参考:http://blog.csdn.net/pz789as/article/details/54890299
我使用的是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;
@end
OverrideUnityAppController.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;
}
@end
IMPL_APP_CONTROLLER_SUBCLASS(OverrideUnityAppController)
其实就是在添加item的时候判断value是否为空,因为unity的疏忽,所以需要自己加上。
我们可以把这两个文件放到Unity编辑器中的Plugins/iOS下面,这样每次导出都不用修改了,像这样:
这次让我学习到一个新东西,就是
IMPL_APP_CONTROLLER_SUBCLASS
=============
另外后面又发现,unity的新版本,已经把这个问题解决了,下载最新的5.5.1即可,不过我还没试过,下载太慢了,如果你不想下载,也可以使用我这个方法去做。