Flutter禁用自动登录插件android_disable_auto_sign_in的使用

Flutter禁用自动登录插件android_disable_auto_sign_in的使用

简介

android_disable_auto_sign_in 是一个简单的 Flutter 插件,用于禁用 Android 的 Smart Lock 自动登录功能。
当使用 flutter_auth_ui 并启用 enableSmartLock 时,凭据会被保存在 Firebase 的凭据存储中,并且可以通过调用 FirebaseAuth.instance.signOut() 删除这些凭据。然而,在下一次登录时,Google Smart Lock 会自动使用上次使用的凭据进行登录,这会导致无限登录循环的问题,正如 这里 所描述的那样。

此插件提供了通过 CredentialsClient.disableAutoSignIn()GoogleSignIn.signOut() 来禁用自动登录的功能。


使用方法

以下代码片段展示了如何完全退出当前用户:

import 'package:android_disable_auto_sign_in/android_disable_auto_sign_in.dart';
import 'package:firebase_auth/firebase_auth.dart';

...

/// 正常从 Firebase 注销
await FirebaseAuth.instance.signOut();
/// 这将清除 Google Smart Lock 的凭据缓存
await AndroidDisableAutoSignIn.smartLockSignOut();

如何运行示例代码

要使示例代码在您的环境中正常工作,请按照以下步骤操作:

  1. 更新 applicationIdexample/android/app/build.gradle 文件中,将 applicationId 更新为您的应用程序 ID:

    android {
        ...
    
        defaultConfig {
            // TODO: 指定唯一的 Application ID(https://developer.android.com/studio/build/application-id.html)。
            applicationId "您的应用包名"
            ...
    
  2. 添加 google-services.json 文件 将您自己的 google-services.json 文件放置到 example/android/app/ 目录下。您可以从 Firebase 控制台 获取您的配置文件。


示例代码

以下是完整的示例代码,演示了如何使用 flutter_auth_uiandroid_disable_auto_sign_in 插件来实现登录和注销功能:

import 'package:flutter/material.dart';

import 'package:android_disable_auto_sign_in/android_disable_auto_sign_in.dart';
import 'package:firebase_auth/firebase_auth.dart';
import 'package:firebase_core/firebase_core.dart';
import 'package:flutter_auth_ui/flutter_auth_ui.dart';

void main() {
  WidgetsFlutterBinding.ensureInitialized();
  Firebase.initializeApp();
  runApp(const MyApp());
}

class MyApp extends StatelessWidget {
  const MyApp({Key? key}) : super(key: key);

  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      home: Scaffold(
        appBar: AppBar(
          title: const Text('Plugin example app'),
        ),
        body: Center(
          child: Column(
            children: [
              ElevatedButton(
                child: const Text("开始登录界面"),
                onPressed: () async {
                  // 定义可用的身份验证提供程序
                  final providers = [
                    AuthUiProvider.apple,
                    AuthUiProvider.google,
                    AuthUiProvider.microsoft,
                  ];

                  // 启动身份验证 UI
                  final result = await FlutterAuthUi.startUi(
                    items: providers,
                    tosAndPrivacyPolicy: TosAndPrivacyPolicy(
                      tosUrl: "https://www.google.com",
                      privacyPolicyUrl: "https://www.google.com",
                    ),
                  );

                  // 检查登录结果
                  final user = FirebaseAuth.instance.currentUser;
                  if (user?.email != null) {
                    print('邮箱: ${user!.email}');
                    print('邮箱是否已验证: ${user.emailVerified}');
                    print('令牌: ${await user.getIdToken()}');
                    print('登录提供程序: ${user.providerData.fold<String>(
                      '',
                      (v, ui) => v == '' ? ui.providerId : v + ',' + ui.providerId,
                    )}');
                    // 可选:删除用户账户
                    // await user.delete();
                  } else {
                    print('登录失败。');
                  }

                  // 注销用户
                  await FirebaseAuth.instance.signOut();
                  await AndroidDisableAutoSignIn.smartLockSignOut();
                },
              ),
            ],
          ),
        ),
      ),
    );
  }
}

更多关于Flutter禁用自动登录插件android_disable_auto_sign_in的使用的实战教程也可以访问 https://www.itying.com/category-92-b0.html

1 回复

更多关于Flutter禁用自动登录插件android_disable_auto_sign_in的使用的实战系列教程也可以访问 https://www.itying.com/category-92-b0.html


在Flutter中,如果你想禁用Android应用中的自动登录功能,可以使用android_disable_auto_sign_in插件。这个插件可以帮助你禁用Google Play服务中的自动登录功能,从而避免用户在安装应用后自动登录。

1. 添加依赖

首先,你需要在pubspec.yaml文件中添加android_disable_auto_sign_in插件的依赖:

dependencies:
  flutter:
    sdk: flutter
  android_disable_auto_sign_in: ^1.0.0

然后运行flutter pub get来获取依赖。

2. 使用插件

在你的Flutter代码中,你可以使用AndroidDisableAutoSignIn类来禁用自动登录功能。通常,你可以在应用的初始化阶段调用这个方法。

import 'package:android_disable_auto_sign_in/android_disable_auto_sign_in.dart';

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 禁用自动登录
  await AndroidDisableAutoSignIn.disableAutoSignIn();

  runApp(MyApp());
}

3. 解释

AndroidDisableAutoSignIn.disableAutoSignIn()方法会调用Android的原生代码,禁用Google Play服务中的自动登录功能。这通常是通过调用GoogleSignInOptions.DEFAULT_SIGN_IN中的disableAutoSignIn()方法来实现的。

4. 注意事项

  • 这个插件只适用于Android平台,iOS平台不需要使用。
  • 禁用自动登录功能后,用户将需要手动登录,这可能会影响用户体验,因此请根据你的应用需求谨慎使用。

5. 示例代码

以下是一个完整的示例代码:

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

void main() async {
  WidgetsFlutterBinding.ensureInitialized();

  // 禁用自动登录
  await AndroidDisableAutoSignIn.disableAutoSignIn();

  runApp(MyApp());
}

class MyApp extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return MaterialApp(
      title: 'Flutter Demo',
      theme: ThemeData(
        primarySwatch: Colors.blue,
      ),
      home: MyHomePage(),
    );
  }
}

class MyHomePage extends StatelessWidget {
  [@override](/user/override)
  Widget build(BuildContext context) {
    return Scaffold(
      appBar: AppBar(
        title: Text('Disable Auto Sign-In Example'),
      ),
      body: Center(
        child: Text('Auto Sign-In is disabled.'),
      ),
    );
  }
}
回到顶部