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