Ionic Native GooglePlus 登录失败,没有任何错误
Ionic Native GooglePlus login fails without any error
我遵循了 https://ionicframework.com/docs/native/google-plus/ 的指示。
我使用正确的 SHA-1 在 https://console.cloud.google.com/apis/credentials/oauthclient 中创建了 Android 客户端(使用 keytool -list -printcert -jarfile <path to your apk>
重新检查)
登录代码很简单,如说明:
this.googlePlus.login({})
.then(res => console.log(res))
.catch(err => console.error(err));
然而,它从来没有出现在 then
和 catch
中。
控制台中没有显示错误。
离子版本 3.20.0
科尔多瓦版本 7.1.0
Ionic Native GooglePlus 5.3.0
Android phone 版本 5.1.1
cordova-plugin-googleplus 5.3.0
我已经用了两天,Ionic Native Facebook 运行良好,而 GooglePlus 只是默默地失败。
请指教
更新 1
这似乎是 cordova-plugin-googleplus
的问题,因为我正在将 GooglePlus.execute
更改为使用
@Override
public boolean execute(String action, CordovaArgs args, CallbackContext callbackContext) throws JSONException {
this.savedCallbackContext = callbackContext;
savedCallbackContext.error(42);
action = "abracadabra";
... //remains unchanged
然后我在 Chrome 控制台 42 中看到 - 这意味着错误处理在 cordova-plugin-googleplus 插件中无法正常工作。
终于找到了根本原因和解决方案。发生此问题是因为 Google 更新了所有 com.google.android.gms:play-* 模块,这影响了所有 Google 服务 cordova 插件。
如果您只使用 Google Plus 插件,那么我认为一切都应该没问题。
在其他情况下,project.properties、plugin.xml 文件到 com.google.android.gms:play-*
的所有依赖项应替换为旧版本 11.8.0:
是
com.google.android.gms:play-services-auth:+
应该是
com.google.android.gms:play-services-auth:11.8.0
我知道,这最好称为解决方法,但没有其他解决方案有效。
感谢来自:
https://github.com/EddyVerbruggen/cordova-plugin-googleplus/issues/492
https://github.com/EddyVerbruggen/cordova-plugin-googleplus/issues/484
https://github.com/EddyVerbruggen/cordova-plugin-googleplus/issues/488
更新 08.10.2018
上次更新后,插件再次无法使用。
问题的发生是因为 ``com.google.android.gms:play-services-:`.
的版本冲突
例如,com.google.android.gms:play-services-maps:15.0.1
,由 Google 地图插件使用,com.google.android.gms:play-services-auth:11.8.0
由 Google Plus 插件使用。
解决方法很简单:
- 在
config.xml
中,将 <variable name="PLAY_SERVICES_VERSION" value="15.0.1" />
(而不是 15.0.1
(可能有 newer/older 版本)放入每个使用播放服务的插件 - 通常所有与 Google服务。
- 在
platforms/android/project.properties
中到处使用播放服务版本15.0.1
(此处应与第1点中的版本相同)。
我试图将 android/project.properties,带有 google_auth 和标识的行更改为
cordova.system.library.5=com.google.android.gms:play-services-auth:+
cordova.system.library.6=com.google.android.gms:play-services-identity:+
谢谢海洛因的回答。我的问题是:
1) com.google.android.gms:play-services-tagmanager:+
2) com.google.android.gms:play-services-auth:11.8.0
3) com.google.android.gms:play-services-identity:11.8.0
我按照海洛因的建议修复了它,但我删除了 2) 和 3) 的 11.8.0,并将其替换为“+”。然后我进入config.xml发现了:
变量名="PLAY_SERVICES_VERSION"值=“11.8.0”
按照海洛因的建议,将“11.8.0”替换为“+”。重新编译和 运行,现在 google plus 再次工作。
I used com.google.android.gms:play-services-auth:11.8.0 but still popup is not coming. No error. it never comes into neither then nor catch. No error is displayed in console.
Tried below code :
<code>
if (this.platform.is('cordova')) {
this.googlePlus.login({
'scopes': '', // optional, space-separated list of scopes, If not included or empty, defaults to `profile` and `email`.
'webClientId': environment.googleWebClientId, // optional clientId of your Web application from Credentials settings of your project - On Android, this MUST be included to get an idToken. On iOS, it is not required.
'offline': true
}).then((response) => {
const googleCredential = firebase.auth.GoogleAuthProvider.credential(response.idToken);
firebase.auth().signInWithCredential(googleCredential)
.then(user => {
console.log("Firebase success: " + JSON.stringify(user));
resolve();
});
},(err) => {
console.log("Error in doGoogleLogin " + err);
reject(err);
});
}
</code>
在我的情况下,同样的事情正在发生,我尝试了将近 1 个月,最后对我有用的是我删除了我的插件文件夹并删除了 android 平台并再次添加它。它对我有用。希望对大家有所帮助。
在platforms>android>project.properties
变化:
cordova.system.library.6=com.google.android.gms:play-services-auth:11.8.0
cordova.system.library.7=com.google.android.gms:play-services-identity:11.8.0
至:
cordova.system.library.6=com.google.android.gms:play-services-auth:+
cordova.system.library.7=com.google.android.gms:play-services-identity:+
在我的例子中,我通过将播放服务的值更改为相同来修复它,因为使用不同的版本会导致一些错误
所以我更改了这些值
"cordova-plugin-request-location-accuracy": {
"PLAY_SERVICES_LOCATION_VERSION": "16.+"
},
"cordova-plugin-googleplus": {
"REVERSED_CLIENT_ID": "MY_REVERSED_ID",
"PLAY_SERVICES_VERSION": "11.8.0"
},
到
"cordova-plugin-request-location-accuracy": {
"PLAY_SERVICES_LOCATION_VERSION": "11.8.0"
},
"cordova-plugin-googleplus": {
"REVERSED_CLIENT_ID": "MY_REVERSED_ID",
"PLAY_SERVICES_VERSION": "11.8.0"
},
并删除 platforms、www 和 plugins 文件夹并执行 "ionic cordova build android" 命令,一切正常。
我对 ionic 4 也有同样的问题。
以下更改解决了我的问题:-----
之前:
cordova.system.library.5=com.google.android.gms:play-services-auth:11.8.0
cordova.system.library.6=com.google.android.gms:play-services-identity:11.8.0
之后:
cordova.system.library.5=com.google.android.gms:play-services-auth:15.0.1
cordova.system.library.6=com.google.android.gms:play-services-identity:15.0.1
您可以在 "platform/android/project.properties" 文件中找到此设置。
您必须卸载您的插件:
cordova plugin rm cordova-plugin-googleplus
然后重新安装:
cordova plugin add cordova-plugin-googleplus --save --variable REVERSED_CLIENT_ID=<you_reversed_client_id>
这对我有用。
我遵循了 https://ionicframework.com/docs/native/google-plus/ 的指示。
我使用正确的 SHA-1 在 https://console.cloud.google.com/apis/credentials/oauthclient 中创建了 Android 客户端(使用 keytool -list -printcert -jarfile <path to your apk>
重新检查)
登录代码很简单,如说明:
this.googlePlus.login({})
.then(res => console.log(res))
.catch(err => console.error(err));
然而,它从来没有出现在 then
和 catch
中。
控制台中没有显示错误。
离子版本 3.20.0
科尔多瓦版本 7.1.0
Ionic Native GooglePlus 5.3.0
Android phone 版本 5.1.1
cordova-plugin-googleplus 5.3.0
我已经用了两天,Ionic Native Facebook 运行良好,而 GooglePlus 只是默默地失败。
请指教
更新 1
这似乎是 cordova-plugin-googleplus
的问题,因为我正在将 GooglePlus.execute
更改为使用
@Override
public boolean execute(String action, CordovaArgs args, CallbackContext callbackContext) throws JSONException {
this.savedCallbackContext = callbackContext;
savedCallbackContext.error(42);
action = "abracadabra";
... //remains unchanged
然后我在 Chrome 控制台 42 中看到 - 这意味着错误处理在 cordova-plugin-googleplus 插件中无法正常工作。
终于找到了根本原因和解决方案。发生此问题是因为 Google 更新了所有 com.google.android.gms:play-* 模块,这影响了所有 Google 服务 cordova 插件。
如果您只使用 Google Plus 插件,那么我认为一切都应该没问题。
在其他情况下,project.properties、plugin.xml 文件到 com.google.android.gms:play-*
的所有依赖项应替换为旧版本 11.8.0:
是
com.google.android.gms:play-services-auth:+
应该是
com.google.android.gms:play-services-auth:11.8.0
我知道,这最好称为解决方法,但没有其他解决方案有效。
感谢来自:
https://github.com/EddyVerbruggen/cordova-plugin-googleplus/issues/492
https://github.com/EddyVerbruggen/cordova-plugin-googleplus/issues/484
https://github.com/EddyVerbruggen/cordova-plugin-googleplus/issues/488
更新 08.10.2018
上次更新后,插件再次无法使用。 问题的发生是因为 ``com.google.android.gms:play-services-:`.
的版本冲突例如,com.google.android.gms:play-services-maps:15.0.1
,由 Google 地图插件使用,com.google.android.gms:play-services-auth:11.8.0
由 Google Plus 插件使用。
解决方法很简单:
- 在
config.xml
中,将<variable name="PLAY_SERVICES_VERSION" value="15.0.1" />
(而不是15.0.1
(可能有 newer/older 版本)放入每个使用播放服务的插件 - 通常所有与 Google服务。 - 在
platforms/android/project.properties
中到处使用播放服务版本15.0.1
(此处应与第1点中的版本相同)。
我试图将 android/project.properties,带有 google_auth 和标识的行更改为
cordova.system.library.5=com.google.android.gms:play-services-auth:+
cordova.system.library.6=com.google.android.gms:play-services-identity:+
谢谢海洛因的回答。我的问题是:
1) com.google.android.gms:play-services-tagmanager:+
2) com.google.android.gms:play-services-auth:11.8.0
3) com.google.android.gms:play-services-identity:11.8.0
我按照海洛因的建议修复了它,但我删除了 2) 和 3) 的 11.8.0,并将其替换为“+”。然后我进入config.xml发现了:
变量名="PLAY_SERVICES_VERSION"值=“11.8.0”
按照海洛因的建议,将“11.8.0”替换为“+”。重新编译和 运行,现在 google plus 再次工作。
I used com.google.android.gms:play-services-auth:11.8.0 but still popup is not coming. No error. it never comes into neither then nor catch. No error is displayed in console.
Tried below code :
<code>
if (this.platform.is('cordova')) {
this.googlePlus.login({
'scopes': '', // optional, space-separated list of scopes, If not included or empty, defaults to `profile` and `email`.
'webClientId': environment.googleWebClientId, // optional clientId of your Web application from Credentials settings of your project - On Android, this MUST be included to get an idToken. On iOS, it is not required.
'offline': true
}).then((response) => {
const googleCredential = firebase.auth.GoogleAuthProvider.credential(response.idToken);
firebase.auth().signInWithCredential(googleCredential)
.then(user => {
console.log("Firebase success: " + JSON.stringify(user));
resolve();
});
},(err) => {
console.log("Error in doGoogleLogin " + err);
reject(err);
});
}
</code>
在我的情况下,同样的事情正在发生,我尝试了将近 1 个月,最后对我有用的是我删除了我的插件文件夹并删除了 android 平台并再次添加它。它对我有用。希望对大家有所帮助。
在platforms>android>project.properties
变化:
cordova.system.library.6=com.google.android.gms:play-services-auth:11.8.0
cordova.system.library.7=com.google.android.gms:play-services-identity:11.8.0
至:
cordova.system.library.6=com.google.android.gms:play-services-auth:+
cordova.system.library.7=com.google.android.gms:play-services-identity:+
在我的例子中,我通过将播放服务的值更改为相同来修复它,因为使用不同的版本会导致一些错误
所以我更改了这些值
"cordova-plugin-request-location-accuracy": {
"PLAY_SERVICES_LOCATION_VERSION": "16.+"
},
"cordova-plugin-googleplus": {
"REVERSED_CLIENT_ID": "MY_REVERSED_ID",
"PLAY_SERVICES_VERSION": "11.8.0"
},
到
"cordova-plugin-request-location-accuracy": {
"PLAY_SERVICES_LOCATION_VERSION": "11.8.0"
},
"cordova-plugin-googleplus": {
"REVERSED_CLIENT_ID": "MY_REVERSED_ID",
"PLAY_SERVICES_VERSION": "11.8.0"
},
并删除 platforms、www 和 plugins 文件夹并执行 "ionic cordova build android" 命令,一切正常。
我对 ionic 4 也有同样的问题。
以下更改解决了我的问题:-----
之前:
cordova.system.library.5=com.google.android.gms:play-services-auth:11.8.0
cordova.system.library.6=com.google.android.gms:play-services-identity:11.8.0
之后:
cordova.system.library.5=com.google.android.gms:play-services-auth:15.0.1
cordova.system.library.6=com.google.android.gms:play-services-identity:15.0.1
您可以在 "platform/android/project.properties" 文件中找到此设置。
您必须卸载您的插件:
cordova plugin rm cordova-plugin-googleplus
然后重新安装:
cordova plugin add cordova-plugin-googleplus --save --variable REVERSED_CLIENT_ID=<you_reversed_client_id>
这对我有用。