我会尽力清楚我的问题。 我想在我的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改变了分享内容的方式。属性contentTitle
,contentDescription
和imageURL
现在只读并弃用:
/**
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>
然后共享不显示任何图像标题或描述:
答案 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)