开发者社区> 问答> 正文

【移动推送】Android 8.0以上设备接收不到推送通知咋办?

已解决

在Android 8.0以上的设备集成推送SDK后,发现推送的信息接收不到,查看日志显示通知已经从服务端发送到客户端,但是并未创建通知。

展开
收起
EMAS支持组 2022-09-15 13:04:13 408 0
1 条回答
写回答
取消 提交回答
  • 采纳回答

    阿里云提醒您:

    如果您对实例或数据有修改、变更等风险操作,务必注意实例的容灾、容错能力,确保数据安全。 如果您对实例(包括但不限于ECS、RDS)等进行配置与数据修改,建议提前创建快照或开启RDS日志备份等功能。 如果您在阿里云平台授权或者提交过登录账号、密码等安全信息,建议您及时修改。 阿里云移动推送自V3.1.1版本开始支持NotificationChannel机制,您可以参考以下接入步骤定位并解决问题:

    集成新版SDK

    集成移动推送SDK V3.1.1及其以上版本

    集成服务端OpenApi SDK V3.9.0及其以上版本:

    <dependency>
      <groupId>com.aliyun</groupId>
      <artifactId>aliyun-java-sdk-push</artifactId>
      <version>3.9.0</version>
    </dependency>
    

    注册NotificationChannel

    参考以下代码,在客户端创建自己的NotificationChannel。具体调用位置为Application的onCreate,阿里云移动推送初始化前后都可以注册,详情请参见Demo。

    注意:修改NotificationChannel后,App需要卸载重装才会生效。

    
            if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
                NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
                // 通知渠道的id。
                String id = "1";
                // 用户可以看到的通知渠道的名字。
                CharSequence name = "notification channel";
                // 用户可以看到的通知渠道的描述。
                String description = "notification description";
                int importance = NotificationManager.IMPORTANCE_HIGH;
                NotificationChannel mChannel = new NotificationChannel(id, name, importance);
                // 配置通知渠道的属性。
                mChannel.setDescription(description);
                // 设置通知出现时的闪灯(如果Android设备支持的话)。
                mChannel.enableLights(true);
                mChannel.setLightColor(Color.RED);
                // 设置通知出现时的震动(如果Android设备支持的话)。
                mChannel.enableVibration(true);
                mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
                // 最后在notificationmanager中创建该通知渠道。
                mNotificationManager.createNotificationChannel(mChannel);
            }
    

    推送通知

    利用OpenApi推送 在服务端推送时指定其NotificationChannelid,详情请参见如下代码:

     @Test
        public void testAdvancedPush() throws Exception {
           PushRequest pushRequest = new PushRequest();
           // 推送目标。
           pushRequest.setAppKey(appKey);
           pushRequest.setTarget("DEVICE"); // 推送目标。DEVICE:推送给设备、ACCOUNT:推送给指定账号、TAG:推送给自定义标签、ALL:推送给全部。
           pushRequest.setTargetValue("xxxxxxxxxxxxxxx"); 
           pushRequest.setPushType("NOTICE"); // 消息类型。取值为MESSAGE、NOTICE。
           pushRequest.setDeviceType("ANDROID"); // 设备类型。取值为ANDROID、iOS、ALL。
           // 推送配置。
           pushRequest.setTitle("ALi Push Title"); // 消息的标题。
           pushRequest.setBody("Ali Push Body"); // 消息的内容。
           // 推送配置:Android。
           pushRequest.setAndroidNotifyType("BOTH");//通知的提醒方式。VIBRATE:震动、SOUND:声音、BOTH:声音和震动、NONE:静音。
           pushRequest.setAndroidOpenType("APPLICATION"); //点击通知后动作。APPLICATION:打开应用、ACTIVITY:打开AndroidActivity、URL:打开URL、NONE:无跳转。
          // 指定notificaitonchannel id。
           pushRequest.setAndroidNotificationChannel("1"); 
          ......
        }
    

    利用阿里云控制台推送

    登录EMAS控制台,单击左侧移动推送,选择对应的产品及其应用,单击左侧推送通知。 然后单击高级设置(选填),填写通知通道,也就是上述客户端注册的NotificationChannel的id,然后单击确定发送即可。 image.png

    NotificationChannel注意事项

    指定NotificationChannel后,通知的提醒方式(震动、声音等)均为NotificationChannel所指定的提醒方式,服务端的提醒方式配置不再生效。 NotificationChannel的通知权限,一般品牌是默认给权限的,但是OPPO和VIVO默认不给权限,需要开启权限。


    更多官方信息

    EMAS官网介绍:https://www.aliyun.com/product/emas

    Devops:https://www.aliyun.com/product/emascrash/mobile_devops

    移动热修复:https://www.aliyun.com/product/hotfix

    移动测试:https://www.aliyun.com/activity/emas/mqcexpert

    移动推送:https://www.aliyun.com/product/cps

    HTTPDNS:https://www.aliyun.com/product/httpdns

    EMAS 控制台: https://emas.console.aliyun.com/products

    2022-09-15 13:53:38
    赞同 展开评论 打赏
来源圈子
更多
收录在圈子:
基于阿里巴巴以及合作伙伴的最佳实践,围绕大前端、云原生领域的相关技术热点(小程序、Serverless、应用中间件、低代码、DevOps)展开行业探讨,与开发者一起探寻云原生时代应用研发的新范式。
问答排行榜
最热
最新

相关电子书

更多
58同城Android客户端Walle框架演进与实践之路 立即下载
Android组件化实现 立即下载
蚂蚁聚宝Android秒级编译——Freeline 立即下载