我正在使用 Firbase 在我的 Ionic 3 应用程序中实现 Google 登录。我已经成功地能够使用本机 Google Plus Cordova 插件,然后使用Angular Fire 2使用凭据登录 Firebase 。这是我的代码:
public loginWithGoogle(): Promise<any> {
return new Promise((resolve, reject) => {
let loginPromise: Promise<any>;
if (this.isMobile()) {
loginPromise = new Promise((resolve, reject) => {
this.googleplus.login({
'webClientId': '--------.apps.googleusercontent.com',
'offline': true
})
.then(res => {
this.afAUth.auth.signInWithCredential(firebase.auth.GoogleAuthProvider.credential(res.idToken))
.then(firebaseRes => {
resolve(firebaseRes);
})
.catch(err => {
reject(err);
});
})
.catch(err => {
reject(err);
});
});
} else {
loginPromise = this.afAUth.auth.signInWithPopup(new firebase.auth.GoogleAuthProvider()) as Promise<any>;
}
loginPromise
.then(res => {
console.log('login promise done: ' + JSON.stringify(res));
const user: User = {
uid: res.user.uid,
email: res.user.email,
displayName: res.user.displayName
};
resolve(user);
});
});
}
在我的登录页面中调用它:
this.auth.loginWithGoogle()
.then(res => {
console.log('success login !!!!!');
})
.catch(err => {
console.log('error login !!!!!');
});
但是,当我使用 Xcode 部署到 iOS 时,我可以看到控制台输出:
2017-06-11 11:32:01.384130 MyApp[2634:842028] login promise done: {"uid":"...","displayName":"...","photoURL":"..."...}
承诺永远不会解决!我曾尝试手动使用 ZoneJS 但未成功:
private zone;
public loginWithGoogle(): Promise<any> {
this.zone = new NgZone({});
...
this.zone.run(() => {
resolve(user);
});
});
});
}
但结果是一样的。有关信息,登录在浏览器中工作正常。