アプリに 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];}];
つまり、ユーザーがアプリにアカウントの使用を許可しない場合、Safari を介して高速切り替えを使用してログインするだけです。それ以外の場合は、ネイティブ ログインを使用します。
ただし、SDK v3.5 でも同じコードですが、アプリを実行して facebook にログインすると、アプリが [これらのアプリにアカウントの使用を許可する] リストにないことがあるため、このコードではこれら 2 つのケースを区別できません。 1. アプリがリストにない。2. ユーザーは、アプリがこのアカウントを使用することを許可しません。そのため、アプリはネイティブにログインできません。
この問題はランダムに存在することに注意してください。openActiveSessionWithPermissions を直接呼び出すコードをハードコーディングすることがありますが、この問題はなくなりました。しかし、それが理由かどうかはわかりません。
FB SDK v3.5 では、iOS 設定に関連する SDK 関数を明示的に呼び出す必要があるのでしょうか?