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

Posted

技术标签:

【中文标题】带有 facebook/gmail 的 OAuth 不适用于 iOS 模拟器(Cordova 应用程序 + Firebase)【英文标题】:OAuth with facebook/gmail is not working on iOS simulator (Cordova app + Firebase) 【发布时间】:2019-10-14 14:32:38 【问题描述】:

我正在尝试在 cordova (+Firebase) 移动应用上完成我的最后一件事,但遇到了一个问题。 所以,我正在为科尔多瓦应用程序进行社交登录, 我正在关注本指南 - Link to guide

完成后,我遇到了一些问题,但已修复(仅在 android 上)

ios 上,当您单击某些登录按钮时 - 没有任何反应, 但是,当我隐藏应用程序(或只是关闭它)并再次打开它时,它开始进行重定向。

在该重定向中,我使用 facebook/gmail 登录,然后将我重定向到我在 config.xml 中的链接

这是我的要求:

 await firebase.auth().signInWithRedirect(provider);
 const user = await firebase.auth().getRedirectResult();

,在安卓上可以正常使用

这是我的 config.xml (我已经尝试了很多stuckoverflow和github解决方案,所以它看起来很乱

<?xml version='0.0.1.2' encoding='utf-8'?>
<widget id="com.appname.ios" version="0.0.1.2" xmlns="http://www.w3.org/ns/widgets">
    <name>App name</name>
    <description>
        Some description...
    </description>
    <author email="example@gmail.com" href="https://appname.com">
        App ame
    </author>
    <content src="index.html" />
    <icon src="/public/favicon.ico" />
    <universal-links>
        <host name="appname.page.link" scheme="https" />
        <host name="appname.com" scheme="https">
            <path url="/__/auth/callback"/>
        </host>
    </universal-links>

    <plugin name="cordova-plugin-whitelist" spec="1" />
    <plugin name="cordova.plugins.diagnostic" />
    <access origin="*" />
    <allow-intent href="http://*/*" />
    <allow-intent href="https://*/*" />
    <allow-intent href="tel:*" />
    <allow-intent href="sms:*" />
    <allow-intent href="mailto:*" />
    <allow-intent href="geo:*" />
    <allow-navigation href="*"/>
    <platform name="android">
        <allow-intent href="market:*" />
    </platform>


    <preference name="AndroidLaunchMode" value="singleTask" />
    <preference name="orientation" value="portrait" />
    <preference name="CordovaWebViewEngine" value="CDVUIWebViewEngine" />


    <platform name="ios">
        <icon src="public/ios/60.png"   />
        <icon src="public/ios/60.png"   />
        <icon src="public/ios/76.png"   />
        <icon src="public/ios/40.png"   />
        <icon src="public/ios/57.png"   />
        <icon src="public/ios/72.png"   />
        <icon src="public/ios/167.png"   />
        <icon src="public/ios/29.png"   />
        <icon src="public/ios/50.png"   />
        <allow-intent href="itms:*" />
        <allow-intent href="itms-apps:*" />


        <splash src="public/ios/appname.png"  />
        <splash src="public/ios/appname.png"  />
        <splash src="public/ios/appname.png"  />
        <splash src="public/ios/appname.png"  />
        <splash src="public/ios/appname.png"  />
        <splash src="public/ios/appname.png"  />
        <splash src="public/ios/appname.png"  />
        <splash src="public/ios/appname.png"  />
        <splash src="public/ios/appname.png"  />
    </platform>
</widget>

这是我成功登录时的屏幕截图: ios simulator screenshot

【问题讨论】:

【参考方案1】:

已经通过接下来的事情解决了:

    在 iOS 上,社交按钮甚至没有重定向到适当的提供程序,因为某些错误会停止整个堆栈: 在这里找到答案 - fixedBugLink 修复该错误后,接下来我要处理的是成功登录后无法返回应用程序

所以我发现问题在于不恰当地添加了下一个插件 - https://www.google.com/search?q=cordova+url+scheme+ios&oq=cordova+url+scheme+ios&aqs=chrome..69i57j0j69i60.2808j0j4&sourceid=chrome&ie=UTF-8

我修复了错误 URL 方案链接的问题,将默认链接更改为 来自我 iOS 应用中 GoogleService-Info.plist 文件的 REVERSED_CLIENT_ID。

所以请注意以下指南(顺便说一句,我已经遵循了这一指南 - oauth-cordva-firebase

希望这对某人也有帮助:)

【讨论】:

我在该教程中也遇到了很多问题,但是(其中一个)对我有帮助的解决方案是不要将 URL_SCHEME=com.firebase.cordova 用于 cordova-plugin-customurlscheme,而是改为使用我的捆绑包 ID。这似乎修复了很多错误,尽管我很想用你的 REVERSED_CLIENT_ID 建议重试它。更改后身份验证过程无法运行,因此我将坚持使用我的捆绑 ID。

以上是关于带有 facebook/gmail 的 OAuth 不适用于 iOS 模拟器(Cordova 应用程序 + Firebase)的主要内容,如果未能解决你的问题,请参考以下文章

facebook、gmail如何发送实时通知?

我应该使用哪个 Java 库通过 Facebook、Gmail、本地身份验证等进行身份验证?

如何从 MSN、Twitter、Facebook、GMail 等中检索联系人/电子邮件?

如何在 Laravel 5.1 中使用 Github、Facebook、Gmail 和 Twitter 登录?

使用Facebook,Gmail和其他注册链接在iOS应用程序中设置登录/注册屏幕的最佳/最简单方法是什么?

OAuth:接收带有参数的回调作为 POST 数据