Android API 31下React Native应用如何申请事件追踪与推送权限?
Android API 31 下 React Native 集成第三方追踪与推送的权限配置
针对你要集成 Facebook SDK、Branch.io 实现行为追踪和推送的需求,以下是 API 31(Android 12)及以上版本的权限配置细节:
一、用户行为事件追踪权限
基础事件追踪
普通的应用内行为(如页面浏览、按钮点击)上报不需要额外危险权限,你已配置的 INTERNET 权限足够支持 SDK 向服务器发送数据。
广告归因/ID 追踪
如果需要基于广告 ID 做用户归因或精准投放,需在 Manifest 中添加:
<uses-permission android:name="com.google.android.gms.permission.AD_ID" />
注意:面向欧盟用户时,必须提供关闭广告追踪的选项;API 33+ 需处理用户禁用广告 ID 的场景,避免崩溃。
第三方 SDK 额外配置
- Facebook SDK:除权限外,需在 Manifest 中添加应用信息和内容提供者:
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/> <meta-data android:name="com.facebook.sdk.ClientToken" android:value="@string/facebook_client_token"/> <provider android:name="com.facebook.FacebookContentProvider" android:authorities="com.facebook.app.FacebookContentProvider{你的应用ID}" android:exported="true"/> - Branch.io:无需新增权限,但要配置深度链接的 Intent Filter,确保追踪跳转行为:
<intent-filter> <data android:scheme="你的Branch自定义scheme"/> <action android:name="android.intent.action.VIEW"/> <category android:name="android.intent.category.DEFAULT"/> <category android:name="android.intent.category.BROWSABLE"/> </intent-filter>
二、推送通知权限
API 31+ 对推送权限做了严格限制,必须动态申请 POST_NOTIFICATIONS 权限,仅在 Manifest 声明无效。
1. Manifest 配置
先添加权限声明:
<uses-permission android:name="android.permission.POST_NOTIFICATIONS" /> <!-- 保留推送基础依赖权限 --> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="com.google.android.c2dm.permission.RECEIVE" />
2. 动态申请权限(React Native 代码)
用 react-native-permissions 库实现权限申请弹窗:
import { Platform, PermissionsAndroid } from 'react-native'; async function requestNotificationPermission() { if (Platform.OS === 'android' && Platform.Version >= 31) { try { const granted = await PermissionsAndroid.request( PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS, { title: '请求通知权限', message: '我们需要通知权限向您推送重要更新和消息', buttonNegative: '取消', buttonPositive: '允许', }, ); if (granted === PermissionsAndroid.RESULTS.GRANTED) { console.log('通知权限已获取'); } else { console.log('通知权限被拒绝'); } } catch (err) { console.warn('申请权限出错:', err); } } }
3. 通知渠道配置
API 26+ 必须创建通知渠道,API 31+ 下渠道是推送的必要前提,用 react-native-push-notification 示例:
import PushNotification from 'react-native-push-notification'; PushNotification.createChannel( { channelId: 'app_main_channel', channelName: '应用主通知', channelDescription: '接收应用所有通知内容', importance: 4, // 高优先级,会弹出通知 vibrate: true, }, (isCreated) => console.log('渠道创建状态:', isCreated), );
4. 第三方推送注意事项
Facebook 和 Branch 的推送功能通常依赖 FCM(Firebase Cloud Messaging),需先集成 FCM,并在 Manifest 中配置相关服务:
<service android:name=".MyFirebaseMessagingService" android:exported="false"> <intent-filter> <action android:name="com.google.firebase.MESSAGING_EVENT"/> </intent-filter> </service>
三、实用建议
- 清理冗余权限:你当前 Manifest 中的
CAMERA、READ_CONTACTS等权限如果和追踪/推送无关,建议移除,降低用户抵触感,同时符合 Google Play 权限规范; - 隐私合规:在应用内隐私政策和 Google Play 商店描述中,明确说明第三方 SDK 的追踪用途和推送目的;
- 兼容性测试:在 API 31 真机/模拟器上测试权限申请流程,确保拒绝权限后应用核心功能不受影响;
- 跟进官方文档:Facebook 和 Branch 会持续更新 Android 新版本的适配指南,优先参考官方最新配置。
内容的提问来源于stack exchange,提问作者alia
相关产品推荐
相关产品推荐

