Facebook iOS SDK 4.1.0 分享回调

Posted

技术标签:

【中文标题】Facebook iOS SDK 4.1.0 分享回调【英文标题】:Facebook iOS SDK 4.1.0 Share Callback 【发布时间】:2015-07-01 19:25:08 【问题描述】:

使用本问题标题中提到的 FBSDK,我在视图控制器中呈现了一个简单的共享对话框:

// Setup the content for the share
FBSDKShareLinkContent *content = [[FBSDKShareLinkContent alloc] init];
content.contentURL = linkUrl;
content.contentDescription = description;
content.contentTitle = title;
content.imageURL = imageUrl;

// Show the share dialog
[FBSDKShareDialog showFromViewController:controller
                             withContent:content
                                delegate:someDelegate];

并实现委托方法...

- (void)sharer:(id<FBSDKSharing>)sharer didCompleteWithResults:(NSDictionary *)results

    NSLog(@"Sweet, they shared.");

到目前为止一切顺利,只要用户在他们的设备上安装了 Facebook 应用程序。当用户没有安装 Facebook 时,就会出现问题。如果是这种情况,Safari 会打开 Facebook 登录流程的 Web 版本(这很好),但如果您随后切换回原始应用程序而不登录 Facebook/执行任何其他任务,则上面显示的完成委托方法是调用。

有没有人对此有任何解决方法的经验?似乎应该有一种可靠的方法来确定该帖子是否确实发生了。

注意:上面的代码很伪。在实际实现中,我确实实现了所有的委托回调(didComplete、didCancel 和 didFail)。

【问题讨论】:

【参考方案1】:

编辑:事实证明,如果设备上安装了 Facebook 应用程序,则调用完成方法时结果字典为空。为了克服这个问题,需要先检查是否已安装 Facebook。

当然,在发布后我偶然发现了答案。如果共享实际发生,则在 didCompleteWithResults 方法中返回的结果字典包含一个 postId 键。所以逻辑很简单:

- (void)sharer:(id<FBSDKSharing>)sharer didCompleteWithResults:(NSDictionary *)results

    NSURL *fbURL = [NSURL URLWithString:@"fb://"];
    if (![[UIApplication sharedApplication] canOpenURL:fbURL])
        if (results[@"postId"]) 
            NSLog(@"Sweet, they shared, and Facebook isn't installed.");
         else 
            NSLog(@"The post didn't complete, they probably switched back to the app");
        
     else 
        NSLog(@"Sweet, they shared, and Facebook is installed.");
    

虽然这可行,但它似乎不是一种非常安全的处理方式(如果 Facebook 将来将密钥从“postId”更改为其他内容怎么办?不太可能,但你明白我的意思)。

【讨论】:

以上是关于Facebook iOS SDK 4.1.0 分享回调的主要内容,如果未能解决你的问题,请参考以下文章

iOS Facebook SDK 原生分享

Facebook SDK for Android 4.1.0 共享对话框取消

Facebook SDK iOS 的自定义分享、登录按钮

通过 FB SDK for iOS 将视频分享到 facebook

Facebook iOS SDK - 分享用户照片

iOS Facebook SDK 分享照片和从 Facebook 应用程序注销后