You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Ionic-Angular项目Firebase Google登录代码迁移适配Capacitor3、Firebase9求助

Capacitor 3 + Firebase 9 Google登录适配方案

1 报错根源解决

Cannot read properties of undefined (reading 'getAuthInstance') 报错是因为@codetrix-studio/capacitor-google-auth从Capacitor 3适配版本开始,取消了自动初始化逻辑,必须手动调用初始化方法。

2 前置配置

2.1 配置capacitor.config.ts

在配置文件中添加Google Auth相关参数:

import { CapacitorConfig } from '@capacitor/cli';

const config: CapacitorConfig = {
  appId: '你的应用包名',
  appName: '你的应用名',
  webDir: 'www',
  bundledWebRuntime: false,
  plugins: {
    GoogleAuth: {
      scopes: ['profile', 'email'],
      serverClientId: '你的Web客户端ID', // 从Firebase控制台获取的Web客户端ID
      forceCodeForRefreshToken: true,
    },
  },
};

export default config;

2.2 全局初始化Google Auth

在app.component.ts中添加初始化逻辑:

import { Component } from '@angular/core';
import { GoogleAuth } from '@codetrix-studio/capacitor-google-auth';

@Component({
  selector: 'app-root',
  templateUrl: 'app.component.html',
  styleUrls: ['app.component.scss'],
})
export class AppComponent {
  constructor() {
    // 初始化Google Auth,解决getAuthInstance报错
    GoogleAuth.initialize();
  }
}

3 改造auth.service.ts代码

完整修改后的代码如下:

import { Injectable } from '@angular/core';
import { AngularFireAuth } from '@angular/fire/compat/auth';
import { AngularFirestore, AngularFirestoreDocument } from '@angular/fire/compat/firestore';
import { GoogleAuth } from '@codetrix-studio/capacitor-google-auth';
import { GoogleAuthProvider } from 'firebase/auth'; // Firebase 9模块化导入

@Injectable({
  providedIn: 'root'
})
export class AuthService {
  constructor(private afAuth: AngularFireAuth, private afs: AngularFirestore) {}

  async googleSignup() {
    // 替换旧的Plugins调用方式
    const googleUser = await GoogleAuth.signIn() as any;
    // 适配Firebase 9的凭证生成逻辑
    const credential = GoogleAuthProvider.credential(
      googleUser.authentication.idToken
    );
    const afUser = await this.afAuth.signInWithCredential(credential);
    return this.updateUserData(
      afUser.user,
      googleUser.givenName,
      googleUser.imageUrl
    );
  }

  // 原有updateUserData逻辑直接保留即可
  private updateUserData(user: any, givenName: string, avatar: string) {
    const userRef: AngularFirestoreDocument<any> = this.afs.doc(`users/${user.uid}`);
    const data = {
      uid: user.uid,
      email: user.email,
      displayName: givenName,
      photoURL: avatar
    };
    return userRef.set(data, { merge: true });
  }
}

4 其他注意点

  • 确保已经将Firebase控制台下载的google-services.json(Android端)和GoogleService-Info.plist(iOS端)放置在原生工程对应目录
  • 依赖版本要匹配:@codetrix-studio/capacitor-google-auth版本需≥3.0.2适配Capacitor 3
  • introduction.page.ts原有逻辑无需修改,可直接正常调用

内容的提问来源于stack exchange,提问作者God's Peace

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.01 14:45:03