我对 Facebook SDK 有疑问。在我的应用程序中,我可以通过 Facebook Graph 请求从用户的 Facebook 帐户中删除该应用程序:
NSString *graphPath = [NSString stringWithFormat:@"/%@/permissions", [FBSDKAccessToken currentAccessToken].userID];
[[[FBSDKGraphRequest alloc] initWithGraphPath:graphPath parameters:nil HTTPMethod:@"DELETE"]
startWithCompletionHandler:^(FBSDKGraphRequestConnection *connection, id result, NSError *error) {
if (!error) {
NSLog(@"Facebook removed");
} else {
NSLog(@"Facebook error: %@", error);
}
}];
一切正常,但如果我随后尝试在 FBSDKLoginManager 上使用 logInWithReadPermissions
再次登录,Safari 出现,我单击“Contiune”以授权应用程序,但它因错误而崩溃:
Terminating app due to uncaught exception 'NSInvalidArgumentException', reason: '*** -[__NSPlaceholderDictionary initWithObjects:forKeys:count:]: attempt to insert nil object from objects[3]'
当我再次启动应用程序后尝试登录时,一切正常。
你有什么线索吗,这可能是什么原因?
更新:
异常发生在 FBSDKCoreKit 文件之一,即 FBSDKTimeSpentData.m,在第 149-155 行我们有:
NSDictionary *timeSpentData =
@{
FBSDKTimeSpentPersistKeySessionSecondsSpent : @(_secondsSpentInCurrentSession),
FBSDKTimeSpentPersistKeySessionNumInterruptions : @(_numInterruptionsInCurrentSession),
FBSDKTimeSpentPersistKeyLastSuspendTime : @(now),
FBSDKTimeSpentPersistKeySessionID : _sessionID,
};
_sessionID 为零 此变量在
中初始化- (void)instanceRestore:(BOOL)calledFromActivateApp
方法,可以在app中调用
[FBSDKAppEvents activateApp]
但是在 instanceRestore: 方法中有一个条件
if (!_isCurrentlyLoaded) {
//
}
未满足,因此未设置 _sessionID。
最佳答案
Facebook iOS 库中存在错误。请更新 Facebook SDK 库。在 FBSDKLoginKit (4.13.1) 中,此错误已修复。
关于iOS Facebook SDK 在撤销应用程序权限后导致应用程序崩溃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36599746/