我正在为我的应用程序使用 FB ios SDK v3.5。对于部分登录,我不使用 FBLoginView 登录,而是使用 UIButton 并在该 UIButton 的处理程序中调用 [FBSession openActiveSessionWithReadPermission]。
在 FB SDK v3.2.1 中,我使用以下代码来处理不同的登录场景,效果很好:
self.useAccountAllowed = true;
ACAccountStore *accountStore;
ACAccountType *accountTypeFB;
if ((accountStore = [[ACAccountStore alloc] init]) &&
(accountTypeFB = [accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook] ) ){
NSArray *fbAccounts = [accountStore accountsWithAccountType:accountTypeFB];
id account;
if (!fbAccounts)
{
//do not log into FB on the device
}
else if ([fbAccounts count] == 0) {
[FBSession.activeSession closeAndClearTokenInformation];
self.useAccountAllowed = false; //User does not allow the app to use the account
}
else if ([fbAccounts count]>0 && (account=[fbAccounts objectAtIndex:0])) {
[accountStore renewCredentialsForAccount:account completion:^(ACAccountCredentialRenewResult renewResult, NSError *error) { //User allowes the app to use the account
//we don't actually need to inspect renewResult or error.
if (error){
}
}];
}
}
然后在 UIButton 的处理函数中:
if (self.useAccountAllowed) {
[FBSession openActiveSessionWithReadPermissions:nil allowLoginUI:YES completionHandler:^(FBSession* session, FBSessionState status, NSError* error){
[self sessionStateChanged:session state:status error:error];}];
}
else {
NSArray* lPermission = FBSession.activeSession.permissions;
[FBSession openActiveSessionWithPermissions:lPermission allowLoginUI:YES completionHandler:^(FBSession* session, FBSessionState status, NSError* error){
[self sessionStateChanged:session state:status error:error];}];
也就是说如果用户不允许app使用账号,我们只需要通过safari使用快速切换的方式登录即可;否则我们使用本机登录。
但是在 SDK v3.5 中,还是一样的代码,但是有时候当应用程序执行并登录 facebook 时,应用程序不在“允许这些应用程序使用您的帐户”列表中,所以这段代码无法区分这两种情况: 1.该应用不在列表中;2. 用户不允许该应用使用该帐号。所以应用程序无法本地登录。
请注意,此问题是随机存在的。有时我硬编码直接调用 openActiveSessionWithPermissions,这个问题就消失了。但我不确定是不是这个原因。
我只是想知道在 FB SDK v3.5 中,我是否需要显式调用一些与 iOS 设置相关的 SDK 函数?