4

私には、最初のセッション開始リクエストで、iOSに統合されたFacebookと、古い「アプリ切り替え」認証が別の方法で機能しているように見えます。

最初に読み取り権限のみでセッションを開き、公開時に公開権限を要求する必要があります。

古いものは最初にすべての許可を要求する必要があるので、アプリは後で投稿できるようになります(そうでない場合)。

そこで、Facebookの接続メソッドでセッション開始ロジックを分割しました。

-(void)connectWithSuccess:(EPPZSuccessBlock) successBlock
                     fail:(EPPZFailBlock) failBlock
{
    if (FBSession.activeSession.isOpen)
    {
        if (successBlock) successBlock();
        [self socialServiceDidConnect:self];
    }

    else
    {
        //This is what I need to decide somehow.
        BOOL userHaveIntegrataedFacebookAccountSetup = NO;

        if (userHaveIntegrataedFacebookAccountSetup)
        {
            //Request for a session with read permissions only, otherwise iOS integrated Facebook will throw me an exception.
            [FBSession openActiveSessionWithReadPermissions:[NSArray arrayWithObject:@"user_about_me"]
                                               allowLoginUI:YES
                                          completionHandler:^(FBSession *session, FBSessionState status, NSError *error)
             { [self handleOpenSessionResponseWithSession:session status:status error:error success:successBlock fail:failBlock]; }];
        }
        else
        {
            //Request for session with every (incuding publish) permissions, otherwise non integrated Facebook won't let the app to post later.
            [FBSession openActiveSessionWithPublishPermissions:self.publishPermissions
                                               defaultAudience:FBSessionDefaultAudienceEveryone
                                                  allowLoginUI:YES
                                             completionHandler:^(FBSession *session, FBSessionState status, NSError *error)
             { [self handleOpenSessionResponseWithSession:session status:status error:error success:successBlock fail:failBlock]; }];
        }
    }
}

しかし、どちらを使用するかを簡単に検出する必要があるため、質問は次のようになります。要求セッションの前に、ユーザーがiOS統合Facebookアカウントを設定しているかどうかを検出するにはどうすればよいですか。

4

2 に答える 2

9

私の知る限り、これを見つける適切な方法は使用することです

[SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]

これは iOS 6 以降のみであることに注意してください。Social.frameworkの一部。

于 2012-12-09T23:43:57.780 に答える
4

アントンの言うとおりだ。

//Facebook setup on users device.
BOOL haveIntegratedFacebookAtAll = ([SLComposeViewController class] != nil);
BOOL userHaveIntegratedFacebookAccountSetup = haveIntegratedFacebookAtAll && ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]);
于 2012-12-10T01:03:01.377 に答える