ios facebook swift sdk 共享对话框永远不会返回成功

Posted

技术标签:

【中文标题】ios facebook swift sdk 共享对话框永远不会返回成功【英文标题】:ios facebook swift sdk share dialog never return success 【发布时间】:2017-11-27 11:33:31 【问题描述】:

我正在使用通过 cocoapods 安装的 swift SDK。我想要的是一个简单的分享功能,当返回不同的结果时有不同的消息警报,例如.cancelled或.success。

分享部分很好,我可以将内容发布到我的 facebook,但发布后它保持空白并且不会返回成功。退出空白屏幕的唯一方法是单击左上角的完成按钮,但这将返回取消。实际发布成功后,我需要显示不同的消息。

这是我的代码:

let url=URL(string: imageUrl as String)
let content = LinkShareContent(url: url!)
let shareDialog = ShareDialog(content: content)
shareDialog.presentingViewController = self
shareDialog.mode = .browser
shareDialog.failsOnInvalidData = true
shareDialog.completion =  result in
  // Handle share results
  switch result
  case .success:
  self.view.showToast("Shared successfully", position: .bottom, popTime: 1, dismissOnTap: false)
  case .failed:
  self.view.showToast("Shared failed", position: .bottom, popTime: 1, dismissOnTap: false)
  case .cancelled:
  self.view.showToast("Shared cancelled", position: .bottom, popTime: 1, dismissOnTap: false)
  

try? shareDialog.show()

当我实际取消帖子时,它会给出预期的警报消息,因此该部分是正确的。我尝试使用 .sharesheet 模式,在该模式下,对话框将自行关闭,返回成功并在发布内容后给出正确的警报消息。

所以我的问题是,我的代码是否有问题无法返回成功?还是.browser 模式?无论哪种情况,如何让它在发布后自动关闭并获得成功返回?

谢谢你们。

【问题讨论】:

【参考方案1】:

您可以使用委托方法来获取共享状态回调(FBSDKSharing 委托方法),即didCompleteWithResults、didFailWithError、sharerDidCancel。 请参考他们的link

【讨论】:

我试过了,在点击发布按钮并成功发布内容后,它只是卡在了空白屏幕上,没有返回任何结果。不是晚上调用委托函数。有什么线索吗?【参考方案2】:

所以我想通了,基本上你只需要在 AppDelegate 文件中添加几行,就像 Facebook SDK for ios 的快速入门一样。

- (void)applicationDidBecomeActive:(UIApplication *)application 
  [FBSDKAppEvents activateApp];


- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 
  [[FBSDKApplicationDelegate sharedInstance] application:application
                       didFinishLaunchingWithOptions:launchOptions];
  return YES;


- (BOOL)application:(UIApplication *)application
        openURL:(NSURL *)url
  sourceApplication:(NSString *)sourceApplication
     annotation:(id)annotation 
  return [[FBSDKApplicationDelegate sharedInstance] application:application
                                                     openURL:url
                                           sourceApplication:sourceApplication
                                                  annotation:annotation];

他们没有提供快速版本的快速入门,所以我不知道您需要修改 AppDelegate。无论如何这里是 swift 代码,不要忘记在 AppDelegate 中导入 FBSDKCoreKit

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
    // Override point for customization after application launch.
    return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)


func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool 
    return FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)


func applicationDidBecomeActive(_ application: UIApplication) 
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    FBSDKAppEvents.activateApp()

【讨论】:

以上是关于ios facebook swift sdk 共享对话框永远不会返回成功的主要内容,如果未能解决你的问题,请参考以下文章

Facebook 使用 Parse SDK 登录(iOS 9、Xcode 7.1、Swift 2.1)

我如何从 facebook 公开资料 Facebook IOS Swift SDK 中获取性别

与 Facebook iOS SDK 共享后从 Facebook 注销

Facebook iOS SDK 和 swift:如何获取用户的头像

使用 SWIFT 在 iOS SDK for Facebook 上使用 FBSDKGraphRequest

带有iOS swift的Facebook SDK未在UIWebView中打开[重复]