在读取权限后直接请求发布权限- Facebook SDK for iOS 6



iOS 6的Facebook SDK要求你在发布权限之前请求读取权限,并强烈建议你只在上下文中请求发布权限。然而,我没有使用FB登录登录或任何与阅读权限相关的内容,我只是希望人们能够在应用程序中发布行为。

我想简单地请求读取权限,然后立即在本机权限对话框中请求发布权限。我发现这样做的唯一方法是通过修改FBLoginView(这是与应用程序打包的登录视图),但我想做我自己的按钮,如果用户登录,帖子到FB。

这就是我现在的调用

[appDelegate openSessionWithAllowLoginUI:YES];

在委托

中调用这个
- (BOOL)openSessionWithAllowLoginUI:(BOOL)allowLoginUI {
NSArray *permissions = [[NSArray alloc] initWithObjects:
                        @"email",
                        @"user_likes",
                        nil];
return [FBSession openActiveSessionWithReadPermissions:permissions
                                          allowLoginUI:allowLoginUI
                                     completionHandler:^(FBSession *session,
                                                         FBSessionState state,
                                                         NSError *error) {
                                         [self sessionStateChanged:session
                                                             state:state
                                                             error:error];
                                     }];

}

我如何修改该函数或立即调用"openActiveSessionwithPublishPermissions"函数后读取权限被授权?

您可以在openActiveSessionWithReadPermissions的完成处理程序中调用openActiveSessionwithPublishPermissions。紧跟[self sessionStateChanged:session state:state error:error];

更新:

例如

。我通过以下方式完成了这个任务:

我在一个类中创建了这个方法,我用它来管理所有的facebook交易:

- (void)attemptToConnectToFacebookForFirstTime:(void (^)(bool granted))completion
{
    ACAccountType *facebookAccountType = [accountStore
                                          accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
    // Specify App ID and permissions
    NSDictionary *options = @{
                              ACFacebookAppIdKey: @"000000000000",
                              ACFacebookPermissionsKey: @[@"email"],
                              ACFacebookAudienceKey: ACFacebookAudienceEveryone
                              };
    [accountStore requestAccessToAccountsWithType:facebookAccountType
                                          options:options 
                                       completion:^(BOOL granted, NSError *e)
     {
         // if you gotta do something here, then do it.
         // and then call the completion
         completion(granted);
     }];
}

然后创建了这个:

- (void)connectToFacebook:(void (^)(bool granted))completion
{
    ACAccountType *facebookAccountType = [accountStore
                                          accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
    // Specify App ID and permissions
    NSDictionary *options = @{
                              ACFacebookAppIdKey: @"0000000000000",
                              ACFacebookPermissionsKey: @[@"publish_stream",
                                                          @"publish_actions"],
                              ACFacebookAudienceKey: ACFacebookAudienceEveryone
                              };
    [accountStore requestAccessToAccountsWithType:facebookAccountType
                                          options:options 
                                       completion:^(BOOL granted, NSError *e)
     {
         // do what you gotta do, and call completion
         completion();
     }];
}

,然后这样调用它们:

[[FacebookManager sharedManager] attemptToConnectToFacebookForFirstTime:^(bool granted)
{
    if (granted)
    {
        [[FacebookManager sharedManager] connectToFacebook:^(bool granted)
        {
            // do something
        }
    }
}

我的版本没有使用facebook SDK,但想法是一样的。

最新更新