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:如何获取用户的头像