You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.06 23:06:02