I am using FB ios SDK v3.5 for my app. For log in part, I don't use FBLoginView to log in, instead, I use a UIButton and invoke [FBSession openActiveSessionWithReadPermission] in the handler of that UIButton.
In FB SDK v3.2.1, I use the following code to handle different log in scenarios, it works fine:
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){
}
}];
}
}
then in the handler function of the 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];}];
which means that if User does not allow the app to use the account, we just use fast-switch way through Safari to login; otherwise we use the native login.
But in SDK v3.5, still the same code, but sometimes when the app is executed and logged into facebook, the app is not in the "Allow these apps to Use your Account" list, so this code cannot distinguish these two cases: 1.the app is not in the list; 2. user disallows the app to use this account. so the app fails to log in natively.
Notice that this problem exists randomly. sometimes I hard code to invoke openActiveSessionWithPermissions directly, this problem is gone. but I am not sure it is the reason.
I just wonder in FB SDK v3.5, do I need to explicitly invoke some SDK function that is related to iOS settings?