在Activity中初始化推送SDK,无法接收到推送通知

问题详述

在Activity中执行了推送的初始化逻辑,SDK的接入按照集成文档操作确认无误,为什么推送消息接收不到,或者有时能接收到有时接收不到?相关初始化代码如下:

  1. public class MyActivity extends Activity {
  2. @override
  3. public void onCreate(Bundle savedInstanceState) {
  4. super.onCreate(savedInstanceState);
  5. initCloudChannel(getApplicationContext());
  6. ......
  7. }
  8. ......
  9. }

问题原因

推送SDK为了提高推送到达率做了进程保活,除了应用进程之外,还有辅助进程channel。在诸如应用退到后台,设备锁屏或者应用杀死等场景都是通过channel进程接收推送消息的。而channel进程的正常工作是依赖于channel的成功初始化。如果您在Activity中执行了推送的初始化逻辑将导致channel进程无法完成初始化操作。channel进程无法正常工作将严重影响推送到达率。

解决方法

将推送初始化逻辑移至Application中,并保证主进程和channel进程均可以执行相关代码:

  1. public class MyApplication extends Application {
  2. @override
  3. public void onCreate() {
  4. super.onCreate();
  5. if(如果是主进程或channel进程) {
  6. initCloudChannel(this);
  7. }
  8. }
  9. ......
  10. }