Flutter使用google账号登录

最近学习Flutter,项目针对海外,所以需要google登录和Facebook等三方登录。

今天先来看看 google 登录的实现,网上资料略少,主要是看的官方文档,不得不说,google的官方文档真是详细,还有视频讲解。(google firebase官方示例)

  • 第一步 firebase中建立对应项目并开启需要的登录方式

1.首先在firebase的首页点击添加项目,创建一个新的项目

2. 输入项目名称

3. 开启google analytics(分析)默认是开启的,我们本次只讲google登录所以先不开启。点击创建项目

4.等待创建完成,点击android 图标(其他应用点击对应图标)

5.注册应用(填写对应的包名,应用别名,如果需要google登录 需要SHA-1签名指纹(我们就是要用google登录,所以这个必须),获取SHA-1的方法,我放到另外一个文章中《获取签名文件的SHA-1

之后,下载google配置信息(google-services.json)放到对应的文件夹中

按图片放到对应的文件夹中,我们的项目信息google的SDK会直接从这里读取,还是很方便的。如果修改配置,还需要从新下载替换即可。

6.给项目设置登录方式

点击Authentication按钮,之后在右边点击开始

firebase支持多种登录方式,我们用google 登录举例,点击Google按钮

先点右上角启用,之后选择一个电子邮件地址,最后点保存

如果需要添加其他登录方式,点击添加新提供方按钮,添加其他登录方式即可

至此,firebase的准备工作已经完成,下面开始本地工程的配置。

  • 第二步 配置flutter 和 android 的依赖库

1.在 android/build.gradle 文件中添加“classpath 'com.google.gms:google-services:4.3.5'

dependencies {
        classpath 'com.android.tools.build:gradle:4.1.0'
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        classpath 'com.google.gms:google-services:4.3.5'  // new
}

2.在android/app/build.gradle文件中添加“apply plugin: 'com.google.gms.google-services'

apply plugin: 'com.android.application'
apply plugin: 'kotlin-android'
apply from: "$flutterRoot/packages/flutter_tools/gradle/flutter.gradle"
apply plugin: 'com.google.gms.google-services'  // new

3.由于firebaseSDK的方法数过多,需要开启Multidex,所以把minSdkVersion 提高到21以上,在android/app/build.gradle

defaultConfig {
    applicationId "com.example.gtk_flutter"
    minSdkVersion 21  // Updated
    targetSdkVersion 30
    versionCode flutterVersionCode.toInteger()
    versionName flutterVersionName
}

4.在Flutter的pubspec.yaml的依赖中增加firebase核心SDK,验证SDK和google登录SDK

dependencies:
  flutter:
    sdk: flutter

firebase_core: ^1.7.0
firebase_auth: ^3.1.3
google_sign_in: ^5.2.0

点击Pub get,获取SDK

 

  • 第三步 初始化firebase

修改main函数

void main() async {
  WidgetsFlutterBinding.ensureInitialized();//是绑定widget 框架和Flutter 引擎的桥梁 firebase需要使用到里面的api所以先初始化一下这个
  await Firebase.initializeApp();//firebase初始化需要异步。

  runApp(const MyApp());
}

之后就可以在需要的地方使用firebase的API了

下面是个使用 google登录的流程例子:

Future<UserCredential> signInWithGoogle() async {
    FirebaseAuth _auth = FirebaseAuth.instance;

    final GoogleSignInAccount? googleUser = await GoogleSignIn().signIn();
    print("googleUser = ${googleUser.toString()}");

    // Obtain the auth details from the request
    final GoogleSignInAuthentication googleAuth =
    await googleUser!.authentication;

    // Create a new credential
    final OAuthCredential credential = GoogleAuthProvider.credential(
      accessToken: googleAuth.accessToken,
      idToken: googleAuth.idToken,
    );
    print("credential = ${credential.toString()}");

    final UserCredential authResult = await _auth.signInWithCredential(credential);
    final User? user = authResult.user;
    print("user = ${user.toString()}");

    return await FirebaseAuth.instance.signInWithCredential(credential);
  }
}
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章