Ionic AngularFire Firebase Facebook 登录

Ionic AngularFire Firebase Facebook Login

我遇到了 Ionic 的问题。我会解释的。

我使用 Ionic 2 和 AngularFire 2 来使用 Firebase。这样我就可以访问我的数据库并使用 Facebook 登录。我用一个按钮来调用这个函数:

this.af.auth.login({
    provider: AuthProviders.Facebook,
    method: AuthMethods.Popup
}).then(function(response){
    console.log('facebook login ', response);
});

离子实验室的一切都很好。但是,当我在我的设备中测试我的应用程序时,按钮什么都不做,弹出窗口和重定向都不起作用。那你能帮我吗?

你需要解决一些问题,我使用 Cordova 登录 facebook:

您没有分享您的日志错误,但我认为您需要这样做:

在您的 Facebook 应用中: 添加一个新平台,Android 或 IOS(您没有说明您使用的是什么)。

添加一个 cordova 插件:

ionic plugin add cordova-plugin-facebook4 --save --variable APP_ID="999999999" --variable APP_NAME="myApplication"

使用您的 Facebook 应用 ID 和名称。

在您的应用中安装 ionic-native:

npm install ionic-native --save

在您的代码中添加 Facebook 导入:

import { Facebook } from 'ionic-native';

并更改使用 Cordova 登录的方法:

  loginWithFacebook() {
    return Observable.create(observer => {
      if (this.platform.is('cordova')) {
        Facebook.login(['public_profile', 'email']).then(facebookData => {
          let provider = firebase.auth.FacebookAuthProvider.credential(facebookData.authResponse.accessToken);
          console.log('facebook accessToken: '+facebookData.authResponse.accessToken);
          firebase.auth().signInWithCredential(provider).then(firebaseData => {
            console.log('facebook login ', firebaseData);
            observer.next();
          }).catch(function(error) {
            // Handle Errors here.
            console.log("error");
            console.log(error);
            // ...
          });
        }, error => {
          observer.error(error);
        });
      } else {

        this.af.auth.login({
          provider: AuthProviders.Facebook,
          method: AuthMethods.Popup
        }).then((response) => {
            console.log('facebook login ', response);
          observer.next();
        }).catch((error) => {
          console.info("login", error);
          observer.error(error);
        });
      }
    });
  }

注意:如果您的应用正在开发中,则只有开发人员可以登录。

上面的代码可以更简单地在 AuthProvider 中使用,就像给定的 axample here 只需这样做:

signInWithFacebook(): firebase.Promise<any> {
  if (this.platform.is('cordova')) {
    return Facebook.login(['public_profile', 'email']).then(facebookData => {
      let provider = firebase.auth.FacebookAuthProvider.credential(facebookData.authResponse.accessToken);
      console.log('facebook accessToken: ' + facebookData.authResponse.accessToken);
      return firebase.auth().signInWithCredential(provider);
    });
  } else {
    return this.auth$.login({
      provider: AuthProviders.Facebook,
      method: AuthMethods.Popup
    });
  }
}