1

适用于 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”函数?

4

1 回答 1

1

您可以调用s 完成处理程序openActiveSessionwithPublishPermissionsopenActiveSessionWithReadPermissions紧接着[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,但想法是一样的。

于 2013-05-28T04:03:51.037 回答