iOS 9上的Facebook共享按钮打开浏览器而不是本机Facebook应用程序

时间:2015-10-12 16:44:21

标签: ios facebook ios9 facebook-sdk-4.0

我的应用程序使用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编译。

4 个答案:

答案 0 :(得分:2)

我认为问题是由于FBSDKShareButton在没有ViewController的情况下构建了一个FBSDKShareDialog。因此,如果没有VC,它将回归到使用Safari视图进行共享。 :(您可以在FB SDK源中看到此行为:

https://github.com/facebook/facebook-ios-sdk/blob/fe777bd7a8b335c5780e2ee160d81719e132e76c/FBSDKShareKit/FBSDKShareKit/FBSDKShareButton.m

我已经将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”)。