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

Capacitor 4项目Android端FCM推送及文件上传权限配置问题

问题1:Android端未弹出通知权限对话框的解决
  • 核心原因:
    1. 缺少权限声明:Android 13(API 33)及以上版本要求显式声明POST_NOTIFICATIONS权限,否则PushNotifications.requestPermissions()不会触发弹窗,你的AndroidManifest.xml中未添加该权限。
    2. 系统版本兼容:Android 12及以下版本中,通知权限默认授予,不会弹出请求对话框,可直接在系统设置中查看应用通知权限状态。
  • 修复步骤:
    1. 在AndroidManifest.xml的权限区域添加:
      <uses-permission android:name="android.permission.POST_NOTIFICATIONS" />
      
    2. 调试时打印PushNotifications.requestPermissions()返回的result对象,确认权限状态(未请求时result.receive为'prompt',请求后变为'granted'或'denied')。
问题2:推送通知与音视频上传的权限配置

推送通知所需权限

除上述POST_NOTIFICATIONS外,需补充以下基础权限(部分Capacitor插件会自动合并,显式声明更稳妥):

<!-- 网络权限:用于FCM注册和接收推送 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- 唤醒权限:确保推送到达时应用可及时处理 -->
<uses-permission android:name="android.permission.WAKE_LOCK" />
<!-- 可选:获取设备基础信息 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />

注:你的FirebaseMessagingService配置正确,需确保已在项目中集成Firebase(添加google-services.json文件)。

音视频上传所需权限

音视频上传需要录制权限和媒体访问权限,分版本适配:

  1. 权限声明:
    <!-- 录音权限 -->
    <uses-permission android:name="android.permission.RECORD_AUDIO" />
    <!-- 相机权限 -->
    <uses-permission android:name="android.permission.CAMERA" />
    <!-- Android 13+ 媒体访问权限 -->
    <uses-permission android:name="android.permission.READ_MEDIA_IMAGES" />
    <uses-permission android:name="android.permission.READ_MEDIA_VIDEO" />
    <uses-permission android:name="android.permission.READ_MEDIA_AUDIO" />
    <!-- Android 6-12 存储权限 -->
    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
    <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
    
  2. 动态请求逻辑:
    音视频、存储权限属于危险权限,需在代码中主动请求,示例:
    import { Permissions, PermissionType } from '@capacitor/core';
    
    async requestMediaPermissions() {
      await Promise.all([
        Permissions.requestPermissions([PermissionType.Camera]),
        Permissions.requestPermissions([PermissionType.Microphone]),
        Permissions.requestPermissions([PermissionType.Storage])
      ]);
      // 检查权限授予状态后再执行上传操作
    }
    
额外代码修正

你的AndroidManifest.xml中activity标签存在语法错误:android:Permissions应为小写android:permission,且该属性无需在此设置,建议直接删除该行,避免运行报错。

内容的提问来源于stack exchange,提问作者SimonIoa

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.08.14 07:25:20