我的应用程序使用FBSDKShareButton
,它会从iOS 8上的原生Facebook应用程序启动弹出窗口。但是,在iOS 9上它会启动浏览器窗口,即使我已按照所有指示进行支持iOS 9 here并添加了必要的LSApplicationQueriesSchemes
(并针对iOS 9重新编译)。
我一直在阅读它的设计" facebook 登录打开浏览器而不是iOS 9上的本机应用程序,但是没有关于为什么/是否共享按钮应该启动的信息原生应用。共享对话框(FBSDKShareDialog
)确实启动了原生应用,但如果可以的话,我想避免使用自己的按钮。
还有一个问题:如果我使用自己的按钮并启动FBSDKShareDialog
,我会在日志中收到以下错误(尽管实际共享似乎工作正常)。为什么呢?
-canOpenURL:网址失败:" fbapi20150629:///" - 错误:"此应用程序不允许查询方案fbapi20150629"
插件com.apple.share.Facebook.post无效
我使用的是最新的Facebook SDK(v4.6),因此不需要引用的URL方案。我正在使用Xcode 7.0.1编译。
答案 0 :(得分:2)
我认为问题是由于FBSDKShareButton在没有ViewController的情况下构建了一个FBSDKShareDialog。因此,如果没有VC,它将回归到使用Safari视图进行共享。 :(您可以在FB SDK源中看到此行为:
我已经将FBSDKShareButton子类化为直接启动对话框,它正确地为我使用了shareheet,只需要少量的覆盖代码,并保持FBSDKShareButton的原生外观(和本地化):
public class EventShareButton: FBSDKShareButton {
func _share(sender: AnyObject) {
FBSDKShareDialog.showFromViewController(parentViewController(), withContent: shareContent, delegate: nil)
}
}
不幸的是,我对fbapi20150629警告没有答案,我试图寻找答案的原因是我在这里。 :)
答案 1 :(得分:1)
FBSDKShare,iOS 9,swift2.0
对于第一个问题:Facebook分享内容可以与iTunes共享内容描述以外的网址。如果共享iTunes网址,则不会分享我们的说明。
我遇到了同样的问题,FB Share按钮点击将我重定向到浏览器,我正在使用的解决方法是将Share Dialog模式设置为使用本机应用程序。
如果您要共享的URL是iTunes App Store URL,则会一致地发生这种情况。 将URL更改为任何其他网站解决了该问题。 https://developers.facebook.com/docs/sharing/ios“注意:如果您的应用分享指向iTunes或Google Play商店的链接,我们不会发布您在共享中指定的任何图片或说明。相反,我们会直接发布从应用商店中删除的一些应用信息Webcrawler。这可能不包括图片。要预览iTunes或Google Play的链接共享,请在URL调试器中输入您的URL。“
func shareFB(sender: AnyObject) {
let content : FBSDKShareLinkContent = FBSDKShareLinkContent()
content.contentURL = NSURL(string: "http://google.com")
content.contentTitle = “MyApp”
content.contentDescription = “//Desc“
content.imageURL = NSURL(string:“//Image URL”)
let dialog : FBSDKShareDialog = FBSDKShareDialog()
dialog.mode = FBSDKShareDialogMode.Native
// if you don't set this before canShow call, canShow would always return YES
if !dialog.canShow() {
// fallback presentation when there is no FB app
dialog.mode = FBSDKShareDialogModeFeedBrowser
}
dialog.show()
}
答案 2 :(得分:1)
我不确定这会解决您的问题。说实话,我并不十分清楚地理解这个API的工作方式 - 只是一个可行的知识......但也许这会有所帮助。
https://developers.facebook.com/docs/ios/ios9
对于使用SDK v4.5及更早版本的应用,请将以下内容插入应用的info.plist
<key>LSApplicationQueriesSchemes</key>
<array>
<string>fbapi</string>
<string>fbapi20130214</string>
<string>fbapi20130410</string>
<string>fbapi20130702</string>
<string>fbapi20131010</string>
<string>fbapi20131219</string>
<string>fbapi20140410</string>
<string>fbapi20140116</string>
<string>fbapi20150313</string>
<string>fbapi20150629</string>
<string>fbauth</string>
<string>fbauth2</string>
<string>fb-messenger-api20140430</string>
</array>
就我而言,它摆脱了这个错误:
-canOpenURL: failed for URL: "fbapi20150629:///" - error: "This app is not allowed to query for scheme fbapi20150629"
并没有摆脱这条消息:
plugin com.apple.share.Facebook.post invalidated
(我正在使用最新的SDK,高于v4.5)
希望这有一些帮助。
答案 3 :(得分:0)
关于你的第一个问题:Facebook share content only shares URL in iOS 9
对于你的第二个问题:即使我有新的Facebook SDK(4.6.0),我也发生了这个问题,我还将字符串“fbapi20150629”添加到了p.list(“Whitelist Facebook Apps”)。