我使用的是Unity5.5.0+FBSDK7.9+XCODE8.2
本来想着直接使用fb自己的sdk应该不会有什么问题,然而中途却遇到闪退,具体闪退的地方是在打开fb登录页面之后,返回的时候的崩溃,也不知道什么原因。
在网上找了大半天,终于被我找到了,原来很多人已经遇到过了。因此在这里记录下:
解决方法原文地址:
点我看原文
可能需要翻墙,反正我都是翻墙看的,主要是加了两个文件,这个比较高级,不需要改unity导出的文件,其他人的都是直接修改导出文件,这样在调试导出的时候特别麻烦。
这个人直接重写了UnityAppController中的application方法。
OverrideUnityAppController.h
#import "UnityAppController.h"@interface OverrideUnityAppController : UnityAppController-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation;@endOverrideUnityAppController.mm 注意后缀名称是.mm哦#import "OverrideUnityAppController.h"#include "PluginBase/AppDelegateListener.h"@implementation OverrideUnityAppController-(BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation{ NSMutableArray* keys = [NSMutableArray arrayWithCapacity:3]; NSMutableArray* values = [NSMutableArray arrayWithCapacity:3]; auto addItem = [&](NSString* key, id value) { [keys addObject:key]; if (value == nil){ [values addObject:[NSNull null]]; }else{ [values addObject:value]; } }; addItem(@"url", url); addItem(@"sourceApplication", sourceApplication); addItem(@"annotation", annotation); NSDictionary* notifData = [NSDictionary dictionaryWithObjects:values forKeys:keys]; AppController_SendNotificationWithArg(kUnityOnOpenURL, notifData); return YES;}@endIMPL_APP_CONTROLLER_SUBCLASS(OverrideUnityAppController)其实就是在添加item的时候判断value是否为空,因为unity的疏忽,所以需要自己加上。我们可以把这两个文件放到Unity编辑器中的Plugins/iOS下面,这样每次导出都不用修改了,像这样:
这次让我学习到一个新东西,就是
IMPL_APP_CONTROLLER_SUBCLASS=============
另外后面又发现,unity的新版本,已经把这个问题解决了,下载最新的5.5.1即可,不过我还没试过,下载太慢了,如果你不想下载,也可以使用我这个方法去做。
新闻热点
疑难解答