Ionic - Firebase Google аутентификация пустой белый экран на Android - PullRequest
0 голосов
/ 27 марта 2019

Googe Sign In не работает в ионном приложении для Android, где как отлично работает в веб-приложении, когда я запускаю ionic serve.

Модуль приложения:

    const firebaseConfig = {
      // fire base config here copied from the console.
    };

    @NgModule({
      declarations: [MyApp, AboutPage, ContactPage, HomePage, TabsPage],
      imports: [
        BrowserModule,
        IonicModule.forRoot(MyApp),
        AngularFireModule.initializeApp(firebaseConfig),
        AngularFireAuthModule,
        ComponentsModule
      ],
      bootstrap: [IonicApp],
      entryComponents: [MyApp, AboutPage, ContactPage, HomePage, TabsPage],
      providers: [
        StatusBar,
        SplashScreen,
        { provide: ErrorHandler, useClass: IonicErrorHandler }
      ]
    })
    export class AppModule {}

Я установил пакет cordova-support-google-services и добавил файл google-services.json, который загружается с консоли firebase и помещается в каталог platforms/android/app/.

    @Injectable({ providedIn: "root" })
export class AuthService {
  user$: Observable<User>;

  constructor(
    private afAuth: AngularFireAuth,
    private afs: AngularFirestore,
    private router: Router
  ) {
    this.user$ = this.afAuth.authState.pipe(
      switchMap(user => {
        // Logged in
        if (user) {
          return this.afs.doc<User>(`users/${user.uid}`).valueChanges();
        } else {
          // Logged out
          return of(null);
        }
      })
    );
  }

  async googleSignin() {
    const provider = new auth.GoogleAuthProvider();
    const credential = await this.afAuth.auth.signInWithPopup(provider);
    return this.updateUserData(credential.user);
  }

  private updateUserData(user) {
    // Sets user data to firestore on login
    const userRef: AngularFirestoreDocument<User> = this.afs.doc(
      `users/${user.uid}`
    );

    const data = {
      uid: user.uid,
      email: user.email,
      displayName: user.displayName,
      photoURL: user.photoURL
    };

    return userRef.set(data, { merge: true });
  }

  async signOut() {
    await this.afAuth.auth.signOut();
    this.router.navigate(["/"]);
  }
}

Приведенный выше код отлично работает в сети, но не работает в Android. После нажатия на кнопку в браузере Chrome открывается новая вкладка, в которой отображается логин Google, после успешной регистрации он показывает пустую белую страницу и не перенаправляется в приложение, а также в консоли Firebase. Я вижу, что пользователь не аутентифицирован.

...