通过 Facebook 登录不适用于我的 iOS 应用程序 [重复]

Posted

技术标签:

【中文标题】通过 Facebook 登录不适用于我的 iOS 应用程序 [重复]【英文标题】:Logging in through Facebook not working for my iOS app [duplicate] 【发布时间】:2019-04-01 13:15:17 【问题描述】:

我的应用有一个设置,用户可以通过电子邮件和密码输入或通过他们的 Facebook 登录凭据正常登录。

为了通过 Facebook 处理登录,我通过 Cocoapods 使用 Facebook 依赖项。我最近也更新了这些依赖项。

Podfile 片段:-

pod 'FacebookCore'
pod 'FacebookLogin'
pod 'FacebookShare'

我的 Podfile.lock 片段:-

- FacebookCore (0.5.0):
    - Bolts (~> 1.9)
    - FBSDKCoreKit (~> 4.37)
- FacebookLogin (0.5.0):
    - Bolts (~> 1.9)
    - FacebookCore (~> 0.5)
    - FBSDKCoreKit (~> 4.37)
    - FBSDKLoginKit (~> 4.37)
- FacebookShare (0.5.0):
    - Bolts (~> 1.9)
    - FacebookCore (~> 0.5)
    - FBSDKCoreKit (~> 4.37)
    - FBSDKShareKit (~> 4.37)
- FBSDKCoreKit (4.38.1):
    - Bolts (~> 1.9)
- FBSDKLoginKit (4.38.1):
    - FBSDKCoreKit
- FBSDKShareKit (4.38.1):
    - FBSDKCoreKit

用户可以使用他们的 Facebook 凭据通过 Safari 浏览器使用电子邮件/电话号码密码凭据登录 Facebook 网站

当用户尝试通过 iPhone 中的 Facebook 应用登录时,问题就出现了。

这些是手头问题的屏幕截图。

第一个屏幕截图显示了通过我的应用程序的 facebook 登录页面:-

下一个屏幕截图显示了尝试通过 facebook 应用程序登录时出现的错误:-

在寻找解决方案时,我看到了这篇文章:- Similar post

根据这篇文章,我检查了我的 info.plist。似乎有效

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>fbfacebook-app-id</string>
        </array>
    </dict>
</array>
...
<key>FacebookAppID</key>
<string>facebook-app-id</string>
<key>FacebookDisplayName</key>
<string>facebook-display-name</string>
<key>LSApplicationQueriesSchemes</key>
<array>
    <string>fbapi</string>
    <string>fb-messenger-api</string>
    <string>fbauth2</string>
    <string>fbshareextension</string>
    <string>whatsapp</string>
</array>

这是我在登录视图控制器中用于 Facebook 相关登录的代码:-

func facebookLoginButtonClicked(sender: UIButton) 
    let loginManager = LoginManager()

    loginManager.logIn(readPermissions: [ReadPermission.publicProfile, ReadPermission.email], viewController : self)  loginResult in
        switch loginResult 
        case .failed(let error):
            print(error)
        case .cancelled:
            print("User cancelled login")
        case .success(let grantedPermissions, let declinedPermissions, let accessToken):
            if let token = accessToken.authenticationToken ?? nil
                let params = ["access_token": token as AnyObject, "account_type":  PineSimpleData.getOnboardingAccountType()! as AnyObject]
                let url = "/user/connect/facebook"
                self.socialLogin(params: params, url: url)
            
        
    

AppDelegate 中的代码片段:-

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool 
    ....
    return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)



func application(_ application: UIApplication, open url: URL, sourceApplication: String?, annotation: Any) -> Bool 
    var handled = FBSDKApplicationDelegate.sharedInstance().application(application, open: url, sourceApplication: sourceApplication, annotation: annotation)
    if handled 
        return true
    
    ....
    return handled


func application(_ app: UIApplication, open url: URL, options: [UIApplicationOpenURLOptionsKey : Any] = [:]) -> Bool 
    if FBSDKApplicationDelegate.sharedInstance().application(app, open: url, options: options) 
        return true
    
    ....
    return true


func application(_ application: UIApplication, willFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey : Any]? = nil) -> Bool 
    return FBSDKApplicationDelegate.sharedInstance().application(application, didFinishLaunchingWithOptions: launchOptions)

到目前为止,通过应用程序和 Facebook 网站都可以正常登录。我应该如何处理这个错误? facebook 开发者部分有强制规定吗?如果是这样,我应该在 facebook 开发人员页面中进行哪些更改?任何帮助表示赞赏。

【问题讨论】:

您是否在 facebook 开发门户中注册了您的应用程序? 我想是的。不太了解,但如果该应用未注册,则无法登录 Facebook。我什至在 info.plist 中有 facebook 应用程序 ID 【参考方案1】:

以下是基本步骤:-

  1.Open https://developers.facebook.com and select your app

   2.Settings > Basic > Add Platform

   3.Now select ios from the window and add your Bundle ID and rest of the information and click on Save changes. 

同样的问题你可以在这里查看:- iOS Facebook Login "Given URL is not allowed by the Application configuration"

【讨论】:

【参考方案2】:

Facebook 应用查询只有fb。 您需要更新您的 plist:

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

【讨论】:

结果是一样的。错误仍然发生。我只需要更新 plist 吗? 好吧,这可能是其中一种情况,但也请查看***.com/questions/31883079/…【参考方案3】:

Facebook 开发者仪表板中有一个开关,用于确定应用是否为原生应用。 可能是你忘记打开了。 Check this image for exact location of that setting

【讨论】:

以上是关于通过 Facebook 登录不适用于我的 iOS 应用程序 [重复]的主要内容,如果未能解决你的问题,请参考以下文章

IOS中的Facebook登录适用于模拟器,但不适用于安装了本机应用程序的设备

解析 Facebook 登录不适用于所有设备

android facebook登录不适用于安装的本机facebook

Facebook 登录不适用于 Facebook 应用程序

带有 facebook/gmail 的 OAuth 不适用于 iOS 模拟器(Cordova 应用程序 + Firebase)

用于 Facebook 聊天的 Asmack 不适用于 PrivacyListManager