开发者社区 问答 正文

为什么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-23 14:21:56 1778 分享 版权
阿里云 AI 助理回答

针对您提到的问题,这里有几个可能的原因和对应的解决方案:

  1. 设备通知权限设置:请检查您的Android设备是否对测试App进行了通知权限的限制。不同品牌和系统的设备可能有不同的通知管理方式,例如小米设备需要在【设置】-【应用】-【自定义通知】中调整。确保您的App具有显示通知的权限。

  2. SDK版本兼容性问题:如果您使用的是较老版本的推送SDK,可能存在与Android 4.2以下系统不兼容的情况,导致通知无法弹出。建议升级到最新的SDK版本(如文中提到的SDK v2.3.0及以上),以解决此类兼容性问题。

  3. AndroidManifest.xml配置:请按照提供的代码示例检查并更新您的AndroidManifest.xml文件,确保消息接收器(Receiver)的配置正确无误。特别是对于那些可能导致通知无法弹出的设备,只注册必要的intent-filter,如:

    <receiver android:name=".MyMessageReceiver" android:exported="false">
        <intent-filter>
            <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" />
        </intent-filter>
        <intent-filter>
            <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" />
        </intent-filter>
        <intent-filter>
            <action android:name="com.alibaba.sdk.android.push.RECEIVE" />
        </intent-filter>
    </receiver>
    

    这样可以确保接收特定于推送的通知事件,并且通过设置android:exported="false"来增强安全性。

  4. 版本升级注意事项:如果您的项目是从v2.3.7或更早版本升级到v3.0.0及以上版本,注意文档中提到的任何必要的变更,比如可能需要修改某些配置或者API调用方式,以避免因接口变更导致的通知接收失败。

  5. 后台服务限制:部分Android设备或系统(尤其是Android 8.0及以上版本)对后台服务和广播接收有严格的限制,可能会影响到推送通知的接收。确保您的应用具备相应的权限,并且适配了Android Oreo及更高版本的Notification Channel功能。

如果以上步骤都已确认无误,但问题依旧存在,建议查看开发者日志、使用调试工具进一步分析,或者联系推送服务提供商的技术支持获取帮助。

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