Unity中针对Android 13请求Firebase推送通知权限的方法
Unity中Android 13 Firebase推送通知权限申请解决方案
Android 13(API 33)开始,系统默认关闭通知权限,Firebase官方的FirebaseMessaging.RequestPermissionAsync()方法因适配问题无法触发Android 13的权限弹窗,需通过Unity原生权限API结合AndroidManifest配置来解决。
步骤1:添加权限声明
在Unity项目的Assets/Plugins/Android目录下的AndroidManifest.xml中添加以下权限(若没有该文件则新建):
<!-- 仅针对Android 13及以上版本申请通知权限 --> <uses-permission android:name="android.permission.POST_NOTIFICATIONS" android:minSdkVersion="33" />
步骤2:C#脚本实现权限请求与Firebase初始化
替换你之前的代码,使用Unity的Permission.RequestUserPermission()主动申请权限,权限通过后再初始化Firebase Messaging:
using UnityEngine; using Firebase.Messaging; public class NotificationPermissionManager : MonoBehaviour { // Android 13通知权限常量 private const string PostNotificationsPermission = "android.permission.POST_NOTIFICATIONS"; void Start() { // 仅在Android 13及以上设备执行权限申请 if (Application.platform == RuntimePlatform.Android && IsAndroidApiLevel33OrHigher()) { RequestNotificationPermission(); } else { // 低版本直接初始化Firebase推送 SetupFirebaseMessaging(); } } // 检查Android系统版本是否为API 33及以上 private bool IsAndroidApiLevel33OrHigher() { using AndroidJavaClass versionClass = new AndroidJavaClass("android.os.Build$VERSION"); return versionClass.GetStatic<int>("SDK_INT") >= 33; } // 异步请求通知权限 private async void RequestNotificationPermission() { PermissionStatus permissionStatus = await Permission.RequestUserPermission(PostNotificationsPermission); if (permissionStatus == PermissionStatus.Granted) { Debug.Log("通知权限已授予"); SetupFirebaseMessaging(); } else { Debug.LogWarning("通知权限被拒绝,将无法接收推送通知"); } } // 初始化Firebase Messaging private void SetupFirebaseMessaging() { // 订阅主题、注册回调等操作 FirebaseMessaging.TokenReceived += OnFCMTokenReceived; FirebaseMessaging.MessageReceived += OnFCMMessageReceived; } // FCM Token接收回调 private void OnFCMTokenReceived(object sender, TokenReceivedEventArgs args) { Debug.Log($"获取到FCM Token: {args.Token}"); // 可将Token上传至服务器 } // FCM消息接收回调 private void OnFCMMessageReceived(object sender, MessageReceivedEventArgs args) { Debug.Log("收到FCM推送消息"); // 处理消息内容 } }
注意事项
- 确保Unity的Android构建目标API级别设置为33及以上,可在
Player Settings > Android > Other Settings > Minimum API Level中配置。 - 必须使用Android 13及以上的真机测试,部分模拟器可能无法正确触发权限弹窗。
FirebaseMessaging.RequestPermissionAsync()主要用于iOS平台的权限申请,Android平台在13版本前无需主动申请,因此插件未适配该权限的请求逻辑。
内容的提问来源于stack exchange,提问作者Jayant Barthwal
相关产品推荐
相关产品推荐

