Flutter谷歌登录接口插件google_sign_in_all_platforms_interface的使用

Flutter 谷歌登录接口插件 google_sign_in_all_platforms_interface 的使用

在使用 google_sign_in_all_platforms_interface 插件之前,我们需要了解该插件的用途。google_sign_in_all_platforms_interface 是一个通用的平台接口,用于实现 google_sign_in_all_platforms 插件。该接口允许平台特定的实现和插件本身确保它们支持相同的接口。

使用方法

要实现一个新的平台特定的 google_sign_in_all_platforms 实现,可以扩展 GoogleSignInAllPlatformsInterface 类,并添加平台特定的行为。

以下是一个完整的示例,展示了如何在 Flutter 应用程序中使用 google_sign_in_all_platforms_interface 插件来实现谷歌登录功能。

import 'package:flutter/material.dart';
import 'package:google_sign_in_all_platforms/google_sign_in_all_platforms.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: GoogleSignInPage(),
    );
  }
}

class GoogleSignInPage extends StatefulWidget {
  [@override](/user/override)
  _GoogleSignInPageState createState() => _GoogleSignInPageState();
}

class _GoogleSignInPageState extends State<GoogleSignInPage> {
  final GoogleSignIn _googleSignIn = GoogleSignIn();

  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Google Sign In'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            try {
              // 调用 google_sign_in_all_platforms 插件进行谷歌登录
              await _googleSignIn.signIn();
              // 获取当前已登录的用户信息
              final GoogleSignInAccount? user = _googleSignIn.currentUser;
              if (user != null) {
                print('User signed in: ${user.email}');
              } else {
                print('User not signed in');
              }
            } catch (error) {
              print('Error signing in: $error');
            }
          },
          child: Text('Sign in with Google'),
        ),
      ),
    );
  }
}

更多关于Flutter谷歌登录接口插件google_sign_in_all_platforms_interface的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter谷歌登录接口插件google_sign_in_all_platforms_interface的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


当然,以下是如何在Flutter项目中使用google_sign_in_all_platforms_interface插件进行谷歌登录的示例代码。不过需要注意的是,google_sign_in_all_platforms_interface本身是一个接口定义库,通常不会直接使用它。相反,我们会使用google_sign_in包,它依赖于这个接口库来实现跨平台的功能。

以下是一个使用google_sign_in包实现谷歌登录的完整示例:

  1. 添加依赖

首先,在pubspec.yaml文件中添加google_sign_in依赖:

dependencies:
  flutter:
    sdk: flutter
  google_sign_in: ^5.3.1  # 请检查最新版本号
  1. 配置Android项目

android/app/src/main/AndroidManifest.xml文件中添加以下配置,以允许谷歌登录:

<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.yourapp">

    <!-- 其他配置 -->

    <application
        android:label="yourapp"
        android:icon="@mipmap/ic_launcher">
        <!-- 添加Google登录所需的Activity配置 -->
        <activity
            android:name=".MainActivity"
            android:exported="true"
            android:launchMode="singleTop"
            android:theme="@style/LaunchTheme"
            android:configChanges="orientation|keyboardHidden|keyboard|screenSize|smallestScreenSize|screenLayout|density|uiMode"
            android:hardwareAccelerated="true"
            android:windowSoftInputMode="adjustResize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />
                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
            <intent-filter>
                <action android:name="com.google.android.gms.auth.api.signin.GOOGLE_SIGN_IN" />
            </intent-filter>
        </activity>
        <!-- 添加Google服务的元数据 -->
        <meta-data
            android:name="com.google.android.gms.client.appid"
            android:value="@string/default_web_client_id"/>
    </application>

</manifest>

此外,你需要在android/app/src/main/res/values/strings.xml文件中添加一个字符串资源,指向你的Web客户端ID:

<resources>
    <string name="app_name">yourapp</string>
    <string name="default_web_client_id">YOUR_WEB_CLIENT_ID.apps.googleusercontent.com</string>
</resources>

替换YOUR_WEB_CLIENT_ID为你的Google Cloud项目的Web客户端ID。

  1. 配置iOS项目

对于iOS,你需要确保你的项目已经配置了URL Scheme和GoogleService-Info.plist文件。

在Xcode中,打开Runner项目,然后到Info标签页,在URL Types部分添加一个URL Scheme,它应该与你的Google Cloud项目的REVERSED_CLIENT_ID相匹配。

此外,将下载的GoogleService-Info.plist文件添加到Xcode项目的Runner目录中。

  1. 实现谷歌登录

现在,你可以在你的Flutter代码中实现谷歌登录功能:

import 'package:flutter/material.dart';
import 'package:google_sign_in/google_sign_in.dart';

void main() {
  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  @override
  Widget build(BuildContext context) {
    return MaterialApp(
      home: GoogleSignInPage(),
    );
  }
}

class GoogleSignInPage extends StatefulWidget {
  @override
  _GoogleSignInPageState createState() => _GoogleSignInPageState();
}

class _GoogleSignInPageState extends State<GoogleSignInPage> {
  final GoogleSignIn _googleSignIn = GoogleSignIn(
    scopes: [
      'email',
      'https://www.googleapis.com/auth/contacts.readonly',
    ],
  );

  @override
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Google Sign In'),
      ),
      body: Center(
        child: ElevatedButton(
          onPressed: () async {
            // 触发谷歌登录
            final GoogleSignInAccount? googleUser = await _googleSignIn.signIn();

            if (googleUser != null) {
              // 获取用户信息
              final GoogleSignInAuthentication googleAuth = await googleUser.authentication;

              // 在这里处理用户信息,例如发送到服务器进行验证
              print('User ID: ${googleUser.id}');
              print('Email: ${googleUser.email}');
              print('Access Token: ${googleAuth.accessToken}');
              print('Refresh Token: ${googleAuth.refreshToken}');
            } else {
              print('Google Sign In failed.');
            }
          },
          child: Text('Sign in with Google'),
        ),
      ),
    );
  }
}

这个示例代码展示了如何使用google_sign_in包进行谷歌登录,并获取用户的基本信息。请确保你已经正确配置了Google Cloud项目和Flutter项目,以便能够成功进行登录。

回到顶部