【问题标题】:ios facebook swift sdk share dialog never return successios facebook swift sdk 共享对话框永远不会返回成功
【发布时间】: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 模式?无论哪种情况,如何让它在发布后自动关闭并获得成功返回?

谢谢你们。

【问题讨论】:

    标签: ios facebook


    【解决方案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()
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-02-26
      • 1970-01-01
      • 1970-01-01
      • 2012-06-09
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多