Google / Firebase身份验证没有适用于iOS的displayName或photoURL

时间:2017-03-11 14:54:50

标签: angular firebase ionic2 google-plus firebase-authentication

我正在使用Ionic2和GooglePlus Authentication

我可以登录,并按预期在uid列表中创建一个Firebase Authentication的用户。

当我这样做时:

        GooglePlus.login({
            'webClientId': webClientId,
            'offline': true
        }).then(googleData => {

webClientIdClient ID下的iOS Credential匹配。

问题:

但是,对于iOSgoogleData确实包含emailAddressuid,但displayNamephotoURL为{{1} }}

更多信息:

我的null设置iOS CredentialBundle ID中的widget id匹配:

enter image description here

config.xml中

config.xml

它还有<?xml version='1.0' encoding='utf-8'?> <widget id="com.ionicframework.XXXXXXX" version="0.0.1" xmlns="http://www.w3.org/ns/widgets" xmlns:cdv="http://cordova.apache.org/ns/1.0"> <name>theWhoZoo</name> 与上面的REVERSED_CLIENT_ID匹配。

iOS URL scheme

我还为我的项目创建了一个<plugin name="cordova-plugin-googleplus" spec="~5.1.1"> <variable name="REVERSED_CLIENT_ID" value="com.googleusercontent.apps.XXXXXX" /> </plugin> ,它也有匹配的Firebase App(不确定这是否有效):

enter image description here

此外,我不确定这是否有所不同,但我在此处将Bundle ID CLIENT_ID添加到Google Firebase身份验证中:

enter image description here

问题

我为iOS设置了这个错误或做错了什么步骤吗?

2 个答案:

答案 0 :(得分:1)

这应该添加获取配置文件数据所需的范围:

window.plugins.googleplus.login({
  'scopes': 'https://www.googleapis.com/auth/plus.me',
  // continue below...

有关详细信息,请参阅官方documentation和插件documentation

范围描述为here

答案 1 :(得分:0)

这是我的代码,这在IOS上运行良好。

代码

private nativeGoogleLogin(): Promise<firebase.User> {
    return new Promise(async (resolve, reject) => {
      const SCOPES = 'https://www.googleapis.com/auth/drive https://www.googleapis.com/auth/gmail.send https://www.googleapis.com/auth/plus.me';
      await this.gPlus.login({
          'webClientId': 'XXXXXXXX.apps.googleusercontent.com',
          'offline': true,
          'scopes': SCOPES
        }).then(res => {
            const googleCredential = firebase.auth.GoogleAuthProvider.credential(res.idToken , res.access_token);
            this.afAuth.auth.signInWithCredential(googleCredential).then(odata => {
              resolve(odata);
            }).catch(err => {
              reject(err);
            });
        }).catch(err => {
          reject(err);
        });
    });
  }

如何获取displayName名称

async onGoogleLogin() {
    await this.goAuth.googleLogin().then(res => {
      alert(JSON.stringify(res));
      alert(res.providerData[0].displayName);
    }).catch(err => {
      console.log(err);
    });
  }
  

res.providerData [0] .displayName

     

注意:在使用此工具之前,请在模拟器中卸载应用并清理构建文件夹   代码。