Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/ios/95.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Ios FBSession requestNewPublishPermissions如何处理;跳过“;用户操作_Ios_Objective C_Facebook Ios Sdk - Fatal编程技术网

Ios FBSession requestNewPublishPermissions如何处理;跳过“;用户操作

Ios FBSession requestNewPublishPermissions如何处理;跳过“;用户操作,ios,objective-c,facebook-ios-sdk,Ios,Objective C,Facebook Ios Sdk,我发现了一个有趣的问题 当我请求新的发布权限时,FBSDK会显示带有“跳过”按钮的对话框。 我是这样处理的 [[[appDelegate facebook] session] requestNewPublishPermissions:permissions defaultAudience:FBSessionDefaultAudienceEveryone

我发现了一个有趣的问题

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


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

但当用户在对话框内按“跳过”时,错误为零

如何处理?也许我不懂smth。
Thx.

对我来说也是一样,似乎这是Facebook SDK中的bug,但我不确定。我添加了额外的检查会话是否具有新权限

    - (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;
    }
-(void)postToFacebookWithMessage:(NSString*)message completionBlock:(void(^)(NSError*)completionBlock
{
NSArray*权限=@[@“发布操作”];
void(^completionHandler)(FBSession*会话,NSError*错误)=^(FBSession*会话,NSError*错误){
如果(错误!=nil)
{
if(completionBlock!=nil)
{
完成块(错误);
}
}
如果(![self-activeSessionHasPermissions:permissions])
{
NSError*error=[NSErrorWithDomain:@“Facebook”代码:FBAccessDisabledCode用户信息:@{NSLocalizedDescriptionKey:NSLocalizedString(@“Facebook访问已禁用”,“Facebook访问已禁用”)};
if(completionBlock!=nil)
{
完成块(错误);
}
}
其他的
{
NSMutableDictionary*操作=[FBGraphObject graphObject];
动作[@“消息”]=消息;
[FBRequestConnection startForPostWithGraphPath:@“me/og.posts”graphObject:action completionHandler:^(FBRequestConnection*连接,id结果,N错误*错误){
//内部错误1611231表示此错误已发布
如果(错误代码==5)
{
错误=[NSErrorWithDomain:@“Facebook”代码:FBDuplicateActionErrorCode用户信息:@{NSLocalizedDescriptionKey:NSLocalizedString(@“已发布到Facebook”,“已发布到Facebook”)};
}
if(completionBlock!=nil)
{
完成块(错误);
}
}];
}
};
if([self-activeSessionHasPermissions:permissions])
{
completionHandler([FBSession-activeSession],nil);
}
其他的
{
[[FBSession activeSession]requestNewPublishPermissions:permissions DefaultAudienceEveryone completionHandler:completionHandler];
}
}
-(BOOL)activeSessionHasPermissions:(NSArray*)权限
{
__block BOOL HASSPermissions=是;
for(权限中的NSString*权限)
{
NSInteger index=[[FBSession activeSession]。权限indexOfObjectPassingTest:^BOOL(id obj,整数idx,BOOL*stop){
if([obj isEqualToString:permission])
{
*停止=是;
}
返回*停止;
}];
如果(索引==NSNotFound)
{
hasPermissions=否;
}
}
返回权限;
}

希望这将有助于

dunno谁被压裂液否决了这一点。。。你救了我,发现了同样的问题。Facebook对话框显示“跳过”按钮,从现在开始,你就是那个花花公子。我不知道是谁否决了这一点,因为即使是facebook上美味的示例应用程序也受到了这一点的影响。我没想到friggin示例应用程序会有如此程度的诽谤。你只需检查[[FBSession activeSession]。权限包含对象:@“publish_actions”],而不是使用activeSessionHasPermissions:method@evfemist。