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

4
我的应用使用了一个FBSDKShareButton,在iOS 8上从本地Facebook应用程序启动弹出窗口。然而,在iOS 9上它会启动一个浏览器窗口,尽管我已经遵循了所有支持iOS 9的指示这里并添加了必要的LSApplicationQueriesSchemes(并重新编译为iOS 9)。
我一直在阅读关于Facebook登录在iOS 9上打开浏览器而不是本地应用程序的“设计”,但没有关于分享按钮是否应该启动本地应用程序的信息。看起来分享对话框(FBSDKShareDialog)确实启动了本地应用程序,但如果可能的话,我想避免使用自己的按钮。
还有一个次要问题:如果我使用自己的按钮并启动一个FBSDKShareDialog,我在日志中得到以下错误(虽然实际共享似乎工作正常)。为什么?

-canOpenURL: failed for URL: "fbapi20150629:///" - error: "This app is not allowed to query for scheme fbapi20150629"

plugin com.apple.share.Facebook.post invalidated

我正在使用最新的Facebook SDK(v4.6),因此不需要引用URL方案。我正在使用Xcode 7.0.1编译。
4个回答

2
我认为问题是由于FBSDKShareButton构建了一个没有ViewController的FBSDKShareDialog所致。因此,没有VC,它会回退到使用Safari视图进行共享。:(您可以在FB SDK源代码中看到这种行为:

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

我已经对 FBSDKShareButton 进行了子类化,直接启动对话框,这样可以正确地为我使用分享表单,只需最少量的重写代码,并保持 FBSDKShareButton 的本地化外观和感觉:
public class EventShareButton: FBSDKShareButton {
    func _share(sender: AnyObject) {
        FBSDKShareDialog.showFromViewController(parentViewController(), withContent: shareContent, delegate: nil)
    }
}

很遗憾,我没有关于fbapi20150629警告的答案,而我搜索答案的尝试正是导致我来到这里的原因。 :)

该死,这是一个奇怪的问题,以及一个奇怪的解决方法。但是我会选择使用它,因为我只想使用他们内置的分享和喜欢按钮。谢谢! - ndbroadbent

1

FBSDKShare, 适用于iOS 9,swift2.0

第一个问题:Facebook分享内容可以分享除了iTunes以外的URL,同时带有内容描述。如果分享iTunes URL,则无法分享我们的描述。

我也遇到了同样的问题,点击FB分享按钮会将我重定向到浏览器,解决方法是将分享对话框模式设置为使用原生应用程序。

如果您要分享的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()
     }

我并没有试图发布任何其他内容,只是一个URL。该URL不是iTunes或Google Play商店的URL,而仅仅是我们自己网站上的一个页面。我通过使用共享对话框来解决了这个问题,就像我在原始帖子中所说的那样。但问题是为什么我需要这样做,为什么本地分享按钮不会打开本地应用程序(存在时)。 - Todor K.
您可以参考以下链接,了解为什么在iOS9中,FB会在Safari(浏览器)中打开而不是本地的FB应用程序。在SDK 4.6中,fb默认使用Safari视图控制器而不是快速应用程序切换到本机Facebook应用程序。这是因为快速应用程序切换会导致iOS9中出现额外的插页式对话框。https://dev59.com/l1wY5IYBdhLWcg3wcXaE - ViJay Avhad
感谢您提供有关应用商店或Play商店链接缺少内容描述的信息。这真是一个意外之球。 - oky_sabeni

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。

希望这能有所帮助。


0

关于您的第一个问题:Facebook分享内容在iOS 9中只分享URL

关于您的第二个问题:即使我已经使用了新的Facebook SDK(4.6.0),我仍然遇到了这个问题,我将字符串“fbapi20150629”添加到了p.list(“白名单Facebook应用程序”)中。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接