FBSDKShareLinkContent imageUrl已弃用,但Facebook应用链接未提供图片元数据

时间:2017-07-19 15:18:32

标签: ios facebook facebook-graph-api share meta

我会尽力清楚我的问题。 我想在我的swift应用程序(Swift 3)中启用Facebook共享。当用户点击Facebook上的链接时,他应该被重定向到应用程序商店上的应用程序(如果他有的话)(如果他在iOS上,没有应用程序)或其他案例的其他网站。

Facebook提供了一个简单的工具:App Links:https://developers.facebook.com/docs/applinks

那么我只需要在我的ios项目上创建一个FBSDKShareLinkContent类,并为其提供appLink网址,标题,描述和图像:

let content:FBSDKShareLinkContent = FBSDKShareLinkContent()
content.contentURL = NSURL(string: linkURL)
content.contentTitle = nsTitle as! String
content.contentDescription = nsDesc as! String
content.imageURL = NSURL(string: imageURL)

但是Facebook改变了分享内容的方式。属性contentTitlecontentDescriptionimageURL现在只读并弃用:

/**
      The URL of a picture to attach to this content.
     - Returns: The network URL of an image

     @deprecated `imageURL` is deprecated from Graph API 2.9.
     For more information, see https://developers.facebook.com/docs/apps/changelog#v2_9_deprecations
     */
    @available(*, deprecated, message: "`imageURL` is deprecated from Graph API 2.9")
    open var imageURL: URL! { get }

现在,facebook使用contentURL网站上的元数据来显示图片,标题和说明。 问题是facebook app链接提供的url没有激发任何标题,描述或图像数据,这里是http响应:

<html>
    <head>
        <title>Mowwgli</title>
        <meta property="fb:app_id" content="1786124768326289" />
        <meta property="al:ios:url" content="mowwgli://" />
        <meta property="al:ios:app_name" content="Mowwgli" />
        <meta property="al:ios:app_store_id" content="1184953498" />
        <meta property="al:web:should_fallback" content="false" />
        <meta property="al:web:url" content="http://www.mowwgli.com/" />
        <meta http-equiv="refresh" content="0;url=http://www.mowwgli.com/" />
    </head>
</html>

然后共享不显示任何图像标题或描述:

rendering of facebook share

1 个答案:

答案 0 :(得分:0)

我发现自己是使用这篇文章的解决方案: How to implement iOS app link Facebook functionality in swift 3?

他的问题是他成功分享了图片,标题和描述,但没有应用链接。 所以我使用了他所做的并使用了FBSDKShareOpenGraphContent而不是FBSDKShareLinkContent。共享对话框可以使用这两个。然后我的代码现在是:

  let properties = [
        "og:title": nsTitle,
        "og:description": nDesc,
        "og:image" : imageURL,
        "og:url" : linkURL,
    ]

    let object : FBSDKShareOpenGraphObject = FBSDKShareOpenGraphObject.init(properties: properties)

    // Create an action
    let action : FBSDKShareOpenGraphAction = FBSDKShareOpenGraphAction()
    action.actionType = "news.publishes"
    action.setObject(object, forKey: "article")

    // Create the content
    let content : FBSDKShareOpenGraphContent = FBSDKShareOpenGraphContent()
    content.action = action
    content.previewPropertyName = "article"

    FBSDKShareDialog.show(from: vc, with: content, delegate: nil)