0

アプリに 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 関数を明示的に呼び出す必要があるのでしょうか?

4

0 に答える 0