You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

Expo独立构建APK推送通知不显示,但Expo Go环境下正常

Expo独立构建APK推送通知不显示,但Expo Go环境下正常

这种情况我之前帮不少开发者排查过,Expo Go和独立构建在推送配置上确实藏着不少容易忽略的细节,咱们一步步来梳理解决:

  • 先确认通知权限是否正常请求
    Expo Go会自动帮你处理基础的权限请求,但独立构建得手动来。你要确保在App启动的关键节点(比如首页加载时)调用Notifications.requestPermissionsAsync(),而且要判断用户是否真的授权了。如果权限没开,最好加个引导,让用户去系统设置里开启通知权限。

  • Android 8.0+必须配置通知渠道
    这是很多人踩坑的点!Android 8.0及以上系统要求所有推送都绑定到通知渠道,Expo Go内置了默认渠道,但独立构建得你自己创建。可以在App初始化时加这段代码:

    await Notifications.createChannelAsync('default', {
      name: '默认通知渠道',
      importance: Notifications.AndroidImportance.MAX,
      vibrationPattern: [0, 250, 250, 250],
      lightColor: '#FF231F7C',
    });
    

    而且发送推送时,一定要在Expo Push API的请求参数里加上channelId: 'default',不然系统会拒收。

  • 检查eas.json的权限配置
    如果你用的是Android 13及以上版本,必须在eas.json的android构建配置里添加POST_NOTIFICATIONS权限。比如:

    {
      "build": {
        "production": {
          "android": {
            "permissions": ["POST_NOTIFICATIONS"]
          }
        }
      }
    }
    

    旧版本的Android虽然不需要这个权限,但也要确保RECEIVE_BOOT_COMPLETED这类必要权限没被遗漏。

  • 核对推送Payload的格式
    Expo Go对Payload的兼容性比较宽松,但独立构建得严格按照规范来。比如必须同时包含titlebody,而且要把priority设为highdefault(不然后台推送可能被系统压制)。一个标准的Payload示例:

    {
      "to": "你的Expo推送Token",
      "title": "新消息提醒",
      "body": "这是一条测试推送",
      "channelId": "default",
      "priority": "high"
    }
    
  • 检查设备端的通知设置
    有时候问题出在用户设备上:比如不小心把App的通知权限关了,或者开启了免打扰模式,甚至是通知渠道的声音、横幅被手动禁用了。可以让测试的用户去系统设置里找到你的App,逐一确认这些选项是否正常。

  • 用日志排查深层问题
    如果上面的步骤都试过还是不行,建议构建一个开发版APK(eas build --profile development),然后用adb logcat命令查看设备日志,搜索“Notification”相关的关键词,通常能找到系统拒收推送的具体原因——比如权限不足、渠道不存在之类的报错信息。

内容来源于stack exchange

火山引擎 最新活动