iOS Facebook ShareLink 处理干扰 Facebook 登录

Posted

技术标签:

【中文标题】iOS Facebook ShareLink 处理干扰 Facebook 登录【英文标题】:iOS Facebook ShareLink Handling Interfering with Facebook Login 【发布时间】:2016-05-22 10:12:54 【问题描述】:

我有 3 个问题,所有问题都围绕着与 Facebook API 的链接共享。这是我用来分享链接的代码:

let content = FBSDKShareLinkContent()
content.contentURL = NSURL(string: "fb.me app link url")!
content.imageURL = NSURL(string: "image url")         
let messageDialog: FBSDKMessageDialog = FBSDKMessageDialog()
messageDialog.delegate = self
messageDialog.shareContent = content 
if messageDialog.canShow() 
    messageDialog.show()

我的 AppDelegate.swift 中有这个函数来处理传入的共享链接:

func application(app: UIApplication,
                 openURL url: NSURL, options: [String : AnyObject]) -> Bool 

    handleSharedLink(url: url)
    return true

这里有 3 个问题:

    我的应用程序中也有 Facebook 登录,并且我的 AppDelegate 中的 openURL 功能干扰了它。它在 Facebook 登录期间被调用,即使我删除了 handleSharedLink() 函数调用并返回 true,它也会导致 Facebook 登录中途停止。如何正确处理此问题,以便我的共享链接处理不会干扰 Facebook 登录?

    当我使用 FBSDKShareLinkContent(使用上面的代码)发送链接,并在安装了我的应用程序的手机上的 Facebook Messenger 中点击它时,它会打开应用程序并正常工作。但是,当我尝试在没有安装我的应用程序的手机上打开它时,它什么也没做。根据 Facebook API 文档,如果我没记错的话,如果用户没有安装应用程序,它应该将用户重定向到应用程序商店。我怎样才能实现这个功能?

    我使用 Facebook 为我的应用创建了一个以 fb.me 开头的应用链接。当我使用 FBSDKShareLinkContent(上面的代码)共享链接时,它会显示我与之共享的人的 fb.me 链接。如何让它不显示?

对于上述 3 个问题的任何帮助将不胜感激。

【问题讨论】:

【参考方案1】:

经过大量实验并重新阅读文档后,我自己找到了答案。对于任何有类似问题的人,您可以通过以下 2 个步骤解决问题中描述的所有问题。

    将此函数添加到您的 AppDelegate:

    func application(app: UIApplication,
                     openURL url: NSURL, options: [String : AnyObject]) -> Bool 
        //Check if the url has app link data
        let checkUrl = BFURL(inboundURL: url, sourceApplication: options["UIApplicationOpenURLOptionsSourceApplicationKey"] as! String)
    
        if checkUrl != nil 
            //Handle incoming shared link
         else 
            //Take care of handling url for Facebook login
            return FBSDKApplicationDelegate.sharedInstance().application(
                app,
                openURL: url,
                sourceApplication: options["UIApplicationOpenURLOptionsSourceApplicationKey"] as! String,
                annotation: nil)
        
    
    

    在 FBSDKShareLinkContent 的代码中,不要将 contentURL 设置为您创建的 fb.me url,而是将其设置为您的应用网站的 url。在您的应用网站的标题中,添加以下元标记。

    <meta property="al:ios:url" content="app url configured in info.plist"/>
    
    <meta property="al:ios:app_store_id" content="itunes app store id" />
    
    <meta property="al:ios:app_name" content="name of your app" />
    

【讨论】:

以上是关于iOS Facebook ShareLink 处理干扰 Facebook 登录的主要内容,如果未能解决你的问题,请参考以下文章

Facebook SDK for iOS 处理登录

Facebook iOS SDK - 自定义委托

iOS - Swift Facebook Graph 请求完成处理程序 - 表达式类型不明确,没有更多上下文

如何使用登录 facebook 功能处理返回用户?

使用 SDK 3.5 在 iOS 上连接 Facebook

通过 Facebook 登录不适用于我的 iOS 应用程序 [重复]