使用cordova 进行谷歌登录将无法正常工作。 Android中的错误10和IOS中的错误请求

Posted

技术标签:

【中文标题】使用cordova 进行谷歌登录将无法正常工作。 Android中的错误10和IOS中的错误请求【英文标题】:Google login with cordova won't work. Error 10 in Android and bad request in IOS 【发布时间】:2017-09-11 15:28:00 【问题描述】:

我有一个使用 cordova 构建的 android/ios 应用程序。

由于我现在使用 ssl 运行服务器,因此无法使用 inappBrowser 打开来自 google 的请求。所以我必须使用本机登录,带有this 插件。 (这是我发现的最可靠的)

在阅读了许多帖子(this、this 和 ..)后,我认为问题在于我(试图)生成我的密钥文件的方式

keytool -exportcert -keystore ~/.android/debug.keystore -list -v -alias myAppName

(密码为空)提示

error de herramienta de claves: java.lang.Exception: El alias <myAppName> no existe (doesn't exist)
java.lang.Exception: El alias <myAppName> no existe
    at sun.security.tools.keytool.Main.doPrintEntry(Main.java:1738)
    at sun.security.tools.keytool.Main.doCommands(Main.java:1064)
    at sun.security.tools.keytool.Main.run(Main.java:343)
    at sun.security.tools.keytool.Main.main(Main.java:336)

这是否意味着它不起作用?

关于错误:

window.plugins.googleplus.login(
    
      'scopes': 'profile email', 
      'webClientId': 'xxxxxxxxx.apps.googleusercontent.com', 
      'offline': true, 
    ,
    function (obj) 
      alert(JSON.stringify(obj)); /
    ,
    function (msg) 
      alert('error: ' + msg); // <--- It alerts 'error: 10'
    
);

欢迎任何提示

-EDIT(现在解决了)-

刚刚在IOS(模拟器)中测试,结果更差:

-编辑 2-

我尝试以两种方式安装它(相同的结果)

cordova plugin add cordova-plugin-googleplus --save --variable REVERSED_CLIENT_ID=myreversedclientid cordova plugin add https://github.com/EddyVerbruggen/cordova-plugin-googleplus --save --variable REVERSED_CLIENT_ID=myreversedclientid

(并且多次,在“设置” .key 之前和之后)

-编辑 3-

顺便说一句,这个错误是什么意思? (也找不到)

【问题讨论】:

此问题 (github.com/EddyVerbruggen/cordova-plugin-googleplus/issues/243) 为该问题提供了许多不同的解决方案(似乎适用于所有用户)。你都试过了吗? 我也读过那个。它链接到一个解决方案。但我的问题是它甚至在开发中也不起作用。我认为我的问题是我生成证书的方式.. 检查你的 debug.keystore 是否在默认目录中(假设你在 Mac 上工作):***.com/a/7529858/6184203 谢谢!是的,它在:/Users/toni/.android/debug.keystore 然后继续阅读这里:***.com/questions/6925659/… 【参考方案1】:

对我来说,当 keytool(我用来将应用程序添加到 google)生成的 SHA1 与构建 apk 的 sha 1 不匹配时发生错误 10。我修复的方法是通过将 google 项目的 SHA1 编辑为构建 apk SHA1 .

1 - 首先,构建 apk

cordova build android --device --verbose --stacktrace --debug

2 - 查看您的 apk 的路径。它将位于 projectfolder/platforms/outputs/apk/android-debug.apk

3 - 获取 apk 的 SHA1

keytool -list -printcert -jarfile <path to your apk>

它将输出包含 SHA1 的详细信息。复制这个并替换谷歌项目应用程序中的 SHA1。

4 - 转到 firebase 控制台打开应用编辑 SHA1。复制构建 apk 的 SHA1 以替换我们在创建应用时最初粘贴的之前的 SHA1。

【讨论】:

这个解决方案拯救我的一天 很高兴听到这个消息:)【参考方案2】:

我似乎没有找到 GoogleService-Info.plist 文件。它应该在哪个文件夹中?

既然我们谈论的是 iOS,我相信 GoogleService-Info.plist 文件丢失了,这是一个问题。请看看这个EddyVerbruggen/cordova-plugin-googleplus

要获取您的 iOS REVERSED_CLIENT_ID,请在此处生成配置文件。此 GoogleService-Info.plist 文件包含您在安装过程中需要的 REVERSED_CLIENT_ID。仅 iOS 需要此值。

REVERSED_CLIENT_ID 也称为开发者控制台上的“iOS URL 方案”。

iOS 上的登录通过 Google SDK 将用户带到 SafariViewController,而不是单独的 Safari 浏览器。

要生成配置文件,请转到:https://developers.google.com/mobile/add?platform=ios

在您的 iOS 项目的根目录中找到此文件


在我的例子中,GoogleService-Info.plist 文件看起来像:

<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>CLIENT_ID</key>
    <string>18643434937-j6ofvkktk1uklqjv61ecr75f1llqki0f.apps.googleusercontent.com</string>
    <key>REVERSED_CLIENT_ID</key>
    <string>com.googleusercontent.apps.18643434937-j6ofvkktk1uklqjv61ecr75f1llqki0f</string>
    <key>PLIST_VERSION</key>
    <string>1</string>
    <key>BUNDLE_ID</key>
    <string>com.app.client</string>
    <key>PROJECT_ID</key>
    <string>app-c6c82</string>
    <key>IS_ADS_ENABLED</key>
    <false/>
    <key>IS_ANALYTICS_ENABLED</key>
    <false/>
    <key>IS_APPINVITE_ENABLED</key>
    <false/>
    <key>IS_GCM_ENABLED</key>
    <false/>
    <key>IS_SIGNIN_ENABLED</key>
    <true/>
    <key>GOOGLE_APP_ID</key>
    <string>1:68743434937:ios:b03bcd3b3f571a56</string>
</dict>
</plist>

对于安卓google-services.json

转至:https://developers.google.com/mobile/add?platform=android

并在那里生成它。

应该是这样的:


  "project_info": 
    "project_number": "68643434935",
    "project_id": "myapp-c6c82"
  ,
  "client": [
    
      "client_info": 
        "mobilesdk_app_id": "1:68643434935:android:71bc3a4035ab9002",
        "android_client_info": 
          "package_name": "com.agan.armoa"
        
      ,
      "oauth_client": [
        
          "client_id": "68643434935-mqm5s8lubfr5j5s3bj62eigbod0h083s.apps.googleusercontent.com",
          "client_type": 1,
          "android_info": 
            "package_name": "com.agan.armoa",
            "certificate_hash": "759A66458E30A70628F2E6A66C46240E21676B72"
          
        ,
        
          "client_id": "68643434935-bc48465luu0r77tufpf4fumv0bd5pta2.apps.googleusercontent.com",
          "client_type": 3
        ,
        
          "client_id": "68643434935-gpdj67581deilm3refkgobuvneceisqt.apps.googleusercontent.com",
          "client_type": 3
        
      ],
      "api_key": [
        
          "current_key": "AIzaSyDB6g1-nMbZ9aZkic2dCz8QrcqHfCSDrsw"
        
      ],
      "services": 
        "analytics_service": 
          "status": 1
        ,
        "appinvite_service": 
          "status": 1,
          "other_platform_oauth_client": []
        ,
        "ads_service": 
          "status": 1
        
      
    ,
    
      "client_info": 
        "mobilesdk_app_id": "1:68643434935:android:b03bcd3b3f571a56",
        "android_client_info": 
          "package_name": "com.myapp.client"
        
      ,
      "oauth_client": [
        
          "client_id": "68643434935-25ciu2gccfv70m08sc7c4fr3v0gqe89m.apps.googleusercontent.com",
          "client_type": 1,
          "android_info": 
            "package_name": "com.myapp.client",
            "certificate_hash": "E90A75A9AA4470337AE5ECD87C3416DDB1109BE1"
          
        ,
        
          "client_id": "68643434935-bc48465luu0r77tufpf4fumv0bd5pta2.apps.googleusercontent.com",
          "client_type": 3
        ,
        
          "client_id": "68643434935-gpdj67581deilm3refkgobuvneceisqt.apps.googleusercontent.com",
          "client_type": 3
        
      ],
      "api_key": [
        
          "current_key": "AIzaSyDB6g1-nMbZ9aZkic2dCz8QrcqHfCSDrsw"
        
      ],
      "services": 
        "analytics_service": 
          "status": 1
        ,
        "appinvite_service": 
          "status": 1,
          "other_platform_oauth_client": []
        ,
        "ads_service": 
          "status": 1
        
      
    
  ],
  "configuration_version": "1"


[编辑 2]

关于你的错误:

keytool -exportcert -list -v \ -alias project -keystore ~/.android/debug.keystore 我得到这个错误:error de herramienta de claves: java.lang.Exception: El archivo de almacén de claves no existe: /Users/toni/.android/debug.keystore java.lang.Exception: El archivo de almacén de claves no existe: /Users/toni/.android/debug.keystore

尝试运行:

keytool -genkey -v -keystore ~/.android/debug.keystore -storepass android -alias androiddebugkey -keypass android -dname "CN=Android Debug,O=Android,C=US"

生成~/.android/debug.keystore

另请看:https://developer.android.com/studio/publish/index.html#debugmode

[编辑 3]

error 10 表示:

public static final int DEVELOPER_ERROR

应用程序配置错误。此错误不可恢复,并且 将被视为致命的。开发人员应该在之后查看日志 这是为了确定更多可操作的信息。

常数值:10

见DOCS及类似错误解决方案:Error: StatusstatusCode=DEVELOPER_ERROR, resolution=null

【讨论】:

感谢您的回答,问题是它生成的 id/reverse_id 与我在网站中使用的不同。那是问题吗?另外,我应该将文件放在cordova项目的哪个文件夹中? 您应该使用生成的内容。该文件应位于PROGECT_ROOT/platforms/ios/&lt;ProjectName&gt;/ 下,在我的情况下为~/projects/moodo/platforms/ios/Moodo/GoogleService-Info.plist(在Classes 旁边) 一般你在谷歌控制台注册ios应用 将 GoogleService-Info.plist 保存到 platforms/ios/project 下的项目路径中后,它在 IOS 中运行!所以谢谢你! :D 但在 Android 中出现同样的错误(错误 10)..关于 android 10 错误的任何线索? @ToniMichelCaubet 你在 Android 项目中有google-services.json 文件吗?

以上是关于使用cordova 进行谷歌登录将无法正常工作。 Android中的错误10和IOS中的错误请求的主要内容,如果未能解决你的问题,请参考以下文章

Angular 5 路由器在谷歌登录回调中无法正常工作

来自appDelegate performSegue的Swift 3在谷歌登录后无法正常工作

cordova.advanced.http post请求无法正常工作。

如果 gps 暂时不可用,Cordova 地理定位插件无法正常工作

使用 rails 4 认证的根路由进行设计无法正常工作

我想只将更新的文件上传到谷歌驱动器,但XCOPY似乎无法正常工作