我在生产中使用Facebook SDK 4.24.0版本的应用程序。在生产应用程序中使用Facebook登录后,一切正常。
我已经将Facebook SDK版本更新为4.35.0。此版本在iOS 9和10中可以正常工作。但是在iOS 11中,要求{AppName}之类的权限才能使用“ facebook.com”登录。单击继续后,没有任何显示。没有WebView,没有应用切换。
这就是我处理登录的方式:
FBSDKLoginManager *login = [[FBSDKLoginManager alloc] init];
[login logInWithReadPermissions:PERMISSIONS fromViewController:self.fromViewController handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) {
if (error) {
// Process error
// [self sessionStateChanged:session state:state error:error];
[self handleFacebookError:error andResult:result];
} else if (result.isCancelled) {
// Handle cancellations
[self handleFacebookSessionClosed];
/**
Letting the delegates know that the session was closed.
*/
[self informDelegateWithLoginStatus:TRUAuthenticationStatus_Error
message:nil];
[self informDelegateWithAccountMergeStatus:TRUAuthenticationStatus_Error
message:nil];
} else {
// If you ask for multiple permissions at once, you
// should check if specific permissions missing
[self handleFacebookSessionOpen];
}
}];
如果我将登录行为设置为FBSDKLoginBehaviorWeb,它会显示一个弹出窗口,如下所示,我是不需要的。
我在info.plist文件中具有以下属性:
<array>
<string>fbapi</string>
<string>fbapiXXX</string>
<string>fbauth</string>
<string>fbauth2</string>
<string>fb-messenger-apiXXX</string>
<string>fb-messenger-share-api</string>
<string>fbshareextension</string>
<string>fb-messenger-api</string>
<string>fb</string>
</array>
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
<key>NSExceptionDomains</key>
<dict>
<key>facebook.com</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>fbcdn.net</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
<key>akamaihd.net</key>
<dict>
<key>NSIncludesSubdomains</key>
<true/>
<key>NSExceptionRequiresForwardSecrecy</key>
<false/>
</dict>
</dict>
我在应用程序委托中处理openURL:
- (BOOL)application:(UIApplication *)application
openURL:(NSURL *)url
sourceApplication:(NSString *)sourceApplication
annotation:(id)annotation {return [[FBSDKApplicationDelegate sharedInstance] application:application
openURL:url
sourceApplication:sourceApplication
annotation:annotation
];}
当我降级到Facebook SDK 4.24.0时,它可以正常工作。到目前为止我已经尝试过的;
我尝试使FBSDKLoginManager * login变量成为全局变量。它没有用。 我曾尝试激活KeyChain。没用。