当用户之前登录 Facebook 时,共享照片不起作用

Posted

技术标签:

【中文标题】当用户之前登录 Facebook 时,共享照片不起作用【英文标题】:Share photos not works when user is previously logged Facebook 【发布时间】:2016-04-08 19:48:55 【问题描述】:

我有这个逻辑

if ([[FBSDKAccessToken currentAccessToken] hasGranted:@"publish_actions"])  
    NSLog(@"has granted!");
    [self sharePhotoWithFBSDK:title andImage:image]; //for logged users
 else 
    FBSDKLoginManager *loginManager = [[FBSDKLoginManager alloc] init];
    [loginManager logInWithPublishPermissions:@[@"publish_actions"] handler:^(FBSDKLoginManagerLoginResult *result, NSError *error) 
    NSLog(@"response logInWithPublishPermissions!!! %@",error);
       if (!error) 
           [self sharePhotoWithFBSDK:title andImage:image]; //Non logged users
       
    ];


- (void)sharePhotoWithFBSDK:(NSString *)title andImage:(UIImage *)image

    FBSDKSharePhoto *sharePhoto = [[FBSDKSharePhoto alloc] init];
    sharePhoto.caption = title;
    sharePhoto.image = image;

    FBSDKSharePhotoContent *content = [[FBSDKSharePhotoContent alloc] init];
    content.photos = @[sharePhoto];

    [FBSDKShareAPI shareWithContent:content delegate:self];

当用户之前登录 facebook 时,分享照片的请求会丢失。进入库发现输入这个函数_sharePhotoContenty就死在这行FBSDKGraphRequestHandler completionHandler = ^ (FBSDKGraphRequestConnection * connection, id result, NSError * error)

我想不出任何合理的原因可能导致这种情况发生。

我只知道,当我尝试对没有会话的用户执行相同操作(对于 else)时效果很好。

【问题讨论】:

【参考方案1】:

找到问题了。

我正在将共享逻辑调用到

dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_BACKGROUND,0), ^

);

所以,需要在主线程中调用

dispatch_async(dispatch_get_main_queue(), ^
    [self sharePhotoWithFBSDK:title andImage:image];
);

【讨论】:

以上是关于当用户之前登录 Facebook 时,共享照片不起作用的主要内容,如果未能解决你的问题,请参考以下文章

如何从测试用户那里检索 Facebook 照片?

当 href 参数是变量时,Facebook 共享对话框不起作用

Facebook 信息未填充 Parse 数据库

当他们使用通过 facebook 连接时,无法从站点注销用户

如何使用 Facebook android 共享图像

解析facebook登录问题?