0

我对 FBSDKLoginManagerRequestTokenHandler 有疑问,因为它应该被调用,但事实并非如此。

let login = FBSDKLoginManager()

login.logInWithReadPermissions(["email"]) { (result, error) in
  // should be retuned here after dismissing Safari, as I understood, but app never call this block.
}

它在第一步运行完美,所以应用程序打开 safari 并且我能够在 Facebook 上登录。

它说“应用程序已被授权”,我点击了 Safari 上的确定按钮,然后我看到一条警报,上面写着“在我的应用程序中打开此页面”,我点击打开并没有任何反应。我的意思是没有回电。

细节:

  • iPhone 6 plus 与 iOS 9.2.1

  • pod 'Facebook-iOS-SDK', '~>4.1'

我注意到我的日志中有此错误:

-canOpenURL: failed for URL: "fbauth://authorize/?client_id=1150389881653102&default_audience=friends&display=touch&e2e=%7B%22init%22%3A1459873693399%7D&legacy_override=v2.3&redirect_uri=fbconnect%3A%2F%2Fsuccess&response_type=token%2Csigned_request&return_scopes=true&scope=email&sdk=ios&sdk_version=4.1.0&state=%7B%22com.facebook.sdk_client_state%22%3Atrue%2C%223_method%22%3A0%2C%220_auth_logger_id%22%3A%228FB19521-A8ED-49DA-A7DC-E5382029252C%22%7D" - error: "This app is not allowed to query for scheme fbauth"

像这里建议的那样,将数据添加到 plist 没有帮助。我已经添加了这个:

<key>LSApplicationQueriesSchemes</key>
<array>
        <string>fbapi</string>
        <string>fb-messenger-api</string>
        <string>fbauth2</string>
        <string>fbshareextension</string>
</array>

我在应用程序委托中有这个:

public func application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool
{
  return self.applicationManager.application?(application, openURL: url, sourceApplication: sourceApplication, annotation: annotation) ?? false
}

但看到它在 iOS 9 中已被弃用

4

1 回答 1

0

更好的解决方案是将您的 Facebook SDK 更新到最新版本,但如果您指定的版本有一些特定要求,您可以检查以下内容

您在问题中提供的链接建议

如果您使用 iOS SDK 9.0 重新编译,如果您使用的是 SDK v4.5 或更早版本,请将以下内容添加到应用程序的 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>

正如您所提到的,您使用的是4.1版,如果您使用的是 4.10 版,您的 plist 应该像您提到的那样工作

对于您可以实现的方法,它在 swift 2.2 中对我有用

application(application: UIApplication, openURL url: NSURL, sourceApplication: String?, annotation: AnyObject) -> Bool {
}

有关集成的更多信息,您可以查看:

FB SDK doc
FB 登录示例:中


更新:因此可能存在一些问题,openURL因为根据 FB doc,警告是可以的

这是一个 Xcode 警告,指示 canOpenURL: 调用返回 false。只要您如上所述在 plist 中配置了 LSApplicationQueriesSchemes 条目,就可以忽略此警告

参考:https ://developers.facebook.com/docs/ios/ios9 ,查看底部

于 2016-04-05T16:48:48.250 回答