Flutter集成Firebase时如何判断用户是否通过Apple账号登录
Flutter 集成Firebase Auth判断登录渠道(Provider)实现方法
你可以直接通过Firebase Auth官方提供的内置API完成登录渠道判断,该方法天然支持所有Firebase接入的第三方登录类型,包括Apple、Google、Facebook、邮箱、手机号等,无需额外在业务侧存储登录渠道标记。
核心原理
Firebase Auth返回的当前登录User对象中,自带providerData属性,这是一个存储了当前用户所有关联登录凭证信息的数组,数组内每一项都包含providerId字段,对应不同登录渠道的唯一标识,直接匹配该字段即可完成判断。
各常用登录渠道对应providerId
- Apple 登录:
apple.com - Google 登录:
google.com - Facebook 登录:
facebook.com - 邮箱密码登录:
password - 手机号登录:
phone - GitHub 登录:
github.com - 自定义接入的第三方登录:和你在Firebase后台配置的provider ID一致
可直接复用的代码
import 'package:firebase_auth/firebase_auth.dart'; /// 校验当前登录用户是否关联了指定的登录渠道 bool checkUserLoginProvider(String targetProviderId) { final User? currentUser = FirebaseAuth.instance.currentUser; // 未登录直接返回false if (currentUser == null) return false; // 遍历所有关联的登录凭证 for (final UserInfo providerItem in currentUser.providerData) { if (providerItem.providerId == targetProviderId) { return true; } } return false; } // 调用示例:判断是否为Apple登录 final bool isAppleLogin = checkUserLoginProvider('apple.com'); // 调用示例:判断是否为Google登录 final bool isGoogleLogin = checkUserLoginProvider('google.com');
踩坑提示
- 不要直接读取
currentUser.providerId做判断,该字段固定返回firebase,不属于实际的第三方登录渠道标识,必须遍历providerData数组取子项的providerId才能拿到正确值 - 如果用户做了多账号关联(比如同时绑定Apple和Google账号),
providerData会同时包含所有绑定渠道的信息,上述方法会返回所有已绑定渠道的匹配结果 - 如果需要获取用户最近一次登录使用的渠道,取
providerData数组的最后一项匹配即可,数组顺序和用户登录/绑定账号的时间顺序一致
参考Firebase后台识别记录截图:
内容的提问来源于stack exchange,提问作者Dennis Ashford
相关产品推荐
相关产品推荐

