1.问题
在Activity中执行了推送的初始化逻辑,SDK的接入按照集成文档操作确认无误,为什么推送消息接收不到,或者有时能接收到有时接收不到?相关初始化代码如下:
- [backcolor=transparent]public[backcolor=transparent] [backcolor=transparent]class[backcolor=transparent] [backcolor=transparent]MyActivity[backcolor=transparent] [backcolor=transparent]extends[backcolor=transparent] [backcolor=transparent]Activity[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]@override
- [backcolor=transparent] [backcolor=transparent]public[backcolor=transparent] [backcolor=transparent]void[backcolor=transparent] onCreate[backcolor=transparent]([backcolor=transparent]Bundle[backcolor=transparent] savedInstanceState[backcolor=transparent])[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]super[backcolor=transparent].[backcolor=transparent]onCreate[backcolor=transparent]([backcolor=transparent]savedInstanceState[backcolor=transparent]);
- [backcolor=transparent] initCloudChannel[backcolor=transparent]([backcolor=transparent]getApplicationContext[backcolor=transparent]());
- [backcolor=transparent] [backcolor=transparent]......
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent] [backcolor=transparent]......
- [backcolor=transparent]}
2.问题背景,原因
推送SDK为了提高推送到达率做了进程保活,除了应用进程之外,还有辅助进程channel。在诸如应用退到后台,设备锁屏或者应用杀死等场景都是通过channel进程接收推送消息的。而channel进程的正常工作是依赖于channel的成功初始化。如果您在Activity中执行了推送的初始化逻辑将导致channel进程无法完成初始化操作。channel进程无法正常工作将严重影响推送到达率。
3.解决方案
将推送初始化逻辑移至Application中,并保证主进程和channel进程均可以执行相关代码:
- [backcolor=transparent]public[backcolor=transparent] [backcolor=transparent]class[backcolor=transparent] [backcolor=transparent]MyApplication[backcolor=transparent] [backcolor=transparent]extends[backcolor=transparent] [backcolor=transparent]Application[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]@override
- [backcolor=transparent] [backcolor=transparent]public[backcolor=transparent] [backcolor=transparent]void[backcolor=transparent] onCreate[backcolor=transparent]()[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] [backcolor=transparent]super[backcolor=transparent].[backcolor=transparent]onCreate[backcolor=transparent]();
- [backcolor=transparent] [backcolor=transparent]if[backcolor=transparent](如果是主进程或[backcolor=transparent]channel[backcolor=transparent]进程)[backcolor=transparent] [backcolor=transparent]{
- [backcolor=transparent] initCloudChannel[backcolor=transparent]([backcolor=transparent]this[backcolor=transparent]);
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent] [backcolor=transparent]}
- [backcolor=transparent] [backcolor=transparent]......
- [backcolor=transparent]}