使用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/<ProjectName>/
下,在我的情况下为~/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中的错误请求的主要内容,如果未能解决你的问题,请参考以下文章
来自appDelegate performSegue的Swift 3在谷歌登录后无法正常工作
cordova.advanced.http post请求无法正常工作。