如何在请求会话之前检测用户是否拥有iOS集成的Facebook帐户设置?

时间:2012-12-09 23:32:32

标签: ios facebook ios6 facebook-ios-sdk

在我看来,在第一次会议开幕请求时,iOS集成了Facebook,旧的“app切换”授权以不同的方式工作。

第一个需要仅使用读取权限打开会话,然后在发布时请求发布权限。

旧版本需要在第一时间请求每个权限,因此应用程序可以稍后发布(否则不会)。

所以我在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帐户设置?

2 个答案:

答案 0 :(得分:9)

据我所知,找到这个的正确方法是使用

[SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]

请注意,这只是iOS 6及更高版本! Social.framework 的一部分。

答案 1 :(得分:4)

正如安东所说。

//Facebook setup on users device.
BOOL haveIntegratedFacebookAtAll = ([SLComposeViewController class] != nil);
BOOL userHaveIntegratedFacebookAccountSetup = haveIntegratedFacebookAtAll && ([SLComposeViewController isAvailableForServiceType:SLServiceTypeFacebook]);