ios - FBSession requestNewPublishPermissions如何处理 "Skip"用户操作

标签 ios objective-c facebook-ios-sdk

我发现了一个有趣的问题。

当我请求新的发布权限时,fb sdk 会显示带有“跳过”按钮的对话框。 我是这样处理的


        [[[appDelegate facebook] session] requestNewPublishPermissions:permissions
                                                       defaultAudience:FBSessionDefaultAudienceEveryone
                                                     completionHandler:^(FBSession *session, NSError *error)
         {
             if (!error)
             {
                  //do smth if there is no error
             }
         }];

但是当用户在对话框中按下“跳过”时 - 错误为零。

如何处理?也许我不明白…… 谢谢。

最佳答案

我也一样,这似乎是 Facebook SDK 中的错误,但我不确定。我添加了额外检查 session 是否具有新权限。

    - (void)postToFacebookWithMessage:(NSString *)message completionBlock:(void (^)(NSError *))completionBlock
    {
        NSArray *permissions = @[@"publish_actions"];

        void (^completionHandler)(FBSession *session, NSError *error) = ^(FBSession *session, NSError *error) {
            if (error != nil)
            {
                if (completionBlock != nil)
                {
                    completionBlock(error);
                }
            }
            else if(![self activeSessionHasPermissions:permissions])
            {
                NSError *error = [NSError errorWithDomain:@"Facebook" code:FBAccessDisabledCode userInfo:@{NSLocalizedDescriptionKey:NSLocalizedString(@"Facebook access disabled", @"Facebook access disabled")}];
                if (completionBlock != nil)
                {
                    completionBlock(error);
                }
            }
            else
            {
                NSMutableDictionary<FBGraphObject> *action = [FBGraphObject graphObject];
                action[@"message"] = message;

                [FBRequestConnection startForPostWithGraphPath:@"me/og.posts" graphObject:action completionHandler:^(FBRequestConnection *connection, id result, NSError *error) {
                    // internal error 1611231 means that this was already posted
                    if (error.code == 5)
                    {
                        error = [NSError errorWithDomain:@"Facebook" code:FBDuplicateActionErrorCode userInfo:@{NSLocalizedDescriptionKey:NSLocalizedString(@"Already posted to Facebook", @"Already posted to Facebook")}];
                    }

                    if (completionBlock != nil)
                    {
                        completionBlock(error);
                    }
                }];
            }
        };

        if ([self activeSessionHasPermissions:permissions])
        {
            completionHandler([FBSession activeSession], nil);
        }
        else
        {
            [[FBSession activeSession] requestNewPublishPermissions:permissions defaultAudience:FBSessionDefaultAudienceEveryone completionHandler:completionHandler];
        }
    }

    - (BOOL)activeSessionHasPermissions:(NSArray *)permissions
    {
        __block BOOL hasPermissions = YES;
        for (NSString *permission in permissions)
        {
            NSInteger index = [[FBSession activeSession].permissions indexOfObjectPassingTest:^BOOL(id obj, NSUInteger idx, BOOL *stop) {
                if ([obj isEqualToString:permission])
                {
                    *stop = YES;
                }
                return *stop;
            }];

            if (index == NSNotFound)
            {
                hasPermissions = NO;
            }
        }
        return hasPermissions;
    }

希望对你有帮助

关于ios - FBSession requestNewPublishPermissions如何处理 "Skip"用户操作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/16571476/

相关文章:

ios - UISliders 和 UILabels 和 viewControllers

ios - 当检测到的图像不再被捕获时停止播放视频

ios - 在同一个 Storyboard上的 2 个 View Controller 之间切换,使用 willAutorotateTo 进行旋转...不起作用,

objective-c - 重新启动或关闭应用程序时 SQLite iphone 数据丢失

ios - FB iOS SDK 3.2 : Why do I need an access token for logging a conversion pixel?

ios - 如何响应异步事件(登录)?

ios - NewRelicAgent 框架在 NR_timeElapsedInMilliSeconds 内崩溃

ios - NSDateFormatter dateFromString 在不正确的日期返回 nil

ios - 在上一个 View 的顶部打开 Storyboard

ios - 在 Game Center 中启用 Facebook Like 按钮