开发者社区 问答 正文

为什么Android设备推送通知在Log中可查看,但是通知无法弹出?



1 问题


向Android设备推送消息,从客户端Log已经看到通知内容,为什么并没有通知弹出?

2 解决方案


请按照以下步骤进行排查:

  • 检查设备【设置】中是否对测试App做了通知栏弹出的限制,如小米设备,通过【设置】-【应用】-【自定义通知】可指定打开或关闭指定应用的通知弹出;
  • 推送老版本SDK对Android 4.2以下版本兼容问题,Android 4.2以下版本系统设备通知可能无法弹出,SDK v2.3.0已将该问题修复。
  • 由于部分设备不允许监听系统的广播,可能导致通知栏的通知无法弹出,将AndroidManifest.xml中消息接收receiver只注册以下三个intent-filter:
    1. [backcolor=transparent]   [backcolor=transparent] <!--[backcolor=transparent] [backcolor=transparent] 消息接收[backcolor=transparent] [backcolor=transparent] (用户可自主扩展)[backcolor=transparent] [backcolor=transparent] -->
    2. [backcolor=transparent]  [backcolor=transparent]<[backcolor=transparent]receiver
    3. [backcolor=transparent]   android[backcolor=transparent]:[backcolor=transparent]name[backcolor=transparent]=[backcolor=transparent]".MyMessageReceiver"
    4. [backcolor=transparent]   android[backcolor=transparent]:[backcolor=transparent]exported[backcolor=transparent]=[backcolor=transparent]"false"[backcolor=transparent]>[backcolor=transparent] [backcolor=transparent]<!--[backcolor=transparent] [backcolor=transparent]为保证[backcolor=transparent]receiver[backcolor=transparent]安全,建议设置不可导出,如需对其他应用开放可通过[backcolor=transparent]    android[backcolor=transparent][backcolor=transparent]permission[backcolor=transparent]进行限制[backcolor=transparent] [backcolor=transparent]-->
    5. [backcolor=transparent]      [backcolor=transparent]<[backcolor=transparent]intent[backcolor=transparent]-[backcolor=transparent]filter[backcolor=transparent]>
    6. [backcolor=transparent]       [backcolor=transparent]<[backcolor=transparent]action android[backcolor=transparent]:[backcolor=transparent]name[backcolor=transparent]=[backcolor=transparent]"com.alibaba.push2.action.NOTIFICATION_OPENED"[backcolor=transparent] [backcolor=transparent]/>
    7. [backcolor=transparent]      [backcolor=transparent]</[backcolor=transparent]intent[backcolor=transparent]-[backcolor=transparent]filter[backcolor=transparent]>
    8. [backcolor=transparent]      [backcolor=transparent]<[backcolor=transparent]intent[backcolor=transparent]-[backcolor=transparent]filter[backcolor=transparent]>
    9. [backcolor=transparent]       [backcolor=transparent]<[backcolor=transparent]action android[backcolor=transparent]:[backcolor=transparent]name[backcolor=transparent]=[backcolor=transparent]"com.alibaba.push2.action.NOTIFICATION_REMOVED"[backcolor=transparent] [backcolor=transparent]/>
    10. [backcolor=transparent]      [backcolor=transparent]</[backcolor=transparent]intent[backcolor=transparent]-[backcolor=transparent]filter[backcolor=transparent]>
    11. [backcolor=transparent]      [backcolor=transparent]<[backcolor=transparent]intent[backcolor=transparent]-[backcolor=transparent]filter[backcolor=transparent]>
    12. [backcolor=transparent]       [backcolor=transparent]<[backcolor=transparent]action android[backcolor=transparent]:[backcolor=transparent]name[backcolor=transparent]=[backcolor=transparent]"com.alibaba.sdk.android.push.RECEIVE"[backcolor=transparent] [backcolor=transparent]/>
    13. [backcolor=transparent]      [backcolor=transparent]</[backcolor=transparent]intent[backcolor=transparent]-[backcolor=transparent]filter[backcolor=transparent]>
    14. [backcolor=transparent]  [backcolor=transparent]</[backcolor=transparent]receiver[backcolor=transparent]>
    如果是从v2.3.7及以下版本升级到v3.0.0及以上版本的用户,需将<action android:name="org.agoo.android.intent.action.receive" />改为<action android:name="com.alibaba.sdk.android.push.receive" />,否则会接收不到推送。

展开
收起
猫饭先生 2017-10-24 09:33:06 1740 分享 版权
阿里云 AI 助理回答

针对您提到的问题,当向Android设备推送消息时,虽然客户端Log显示已收到通知内容,但实际并未弹出通知,这可能是由几个常见原因导致的。根据您的描述和提供的解决方案,我来进一步解释和补充:

  1. 设备设置限制:部分Android设备允许用户对每个应用的通知权限进行单独管理。请检查目标设备的系统设置中是否对您的App禁用了通知显示。通常路径为【设置】 -> 【应用管理/应用信息】 -> 找到您的应用 -> 【通知】,确保通知权限已经开启。

  2. SDK兼容性问题:如果使用的是较老版本的推送SDK,可能存在与特定Android版本(如4.2以下)的兼容性问题。您提到升级到SDK v2.3.0或以上版本可以解决此问题。对于当前情况,请确认使用的SDK版本,并考虑更新至最新版本以获得最佳兼容性和功能支持。

  3. AndroidManifest.xml配置:确保您的AndroidManifest.xml文件中对消息接收器(BroadcastReceiver)的配置正确无误。您给出的代码示例展示了如何注册接收器以监听特定的推送事件。请确认这些intent-filter配置完整且正确地添加到了对应的receiver标签内,特别是对于从v2.3.7及以下版本升级到v3.0.0及以上版本的用户,需要按照新版本的要求调整接收器的配置,避免因API变更导致的通知接收失败。

  4. 权限问题:除了上述配置,还需检查应用是否有相应的系统权限,比如在AndroidManifest.xml中声明了<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/><uses-permission android:name="android.permission.INTERNET"/>等网络相关权限,以及可能需要的其他权限,确保应用能够正常接收到网络推送。

  5. 后台服务限制:某些Android系统(尤其是8.0 Oreo及以上版本)对后台服务和广播有严格的限制,可能会影响到推送通知的接收。在这种情况下,需要确保应用具备前台服务权限或者适配了Android的Notification Channel特性。

  6. 电池优化设置:部分设备的电池优化功能可能会限制后台应用活动,影响到推送通知的接收。用户可以在设备的电池设置中查看并调整针对特定应用的优化选项。

综上所述,排查此类问题时,应从多个角度出发,包括但不限于用户设备设置、SDK版本、应用配置、系统权限等方面。希望这些建议能帮助您解决问题。

有帮助
无帮助
AI 助理回答生成答案可能存在不准确,仅供参考
0 条回答
写回答
取消 提交回答