安卓8.0通知通道设置

问题背景

App安装在安卓8.0以上时需要主动创建NotificaitonChannel。如果没有创建,那么通知会被系统静默,不会弹出显示。 推送时OpenAPI高级接口 中的AndroidNotificationChannel参数值应该和app端代码创建的channelId参数值保持一致。若不一致,也不会弹出通知。

Channel创建

  • App端开发者可以在创建通知通道时候指定通道ID,是否震动,是否响铃等。代码示例如下。

    if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
        NotificationManager mNotificationManager = (NotificationManager) getSystemService(Context.NOTIFICATION_SERVICE);
        // 通知渠道的id。
        String channelId = "vibration_sound"; // 这个id值需要给后端开发和运维人员,推送的时候对应 AndroidNotificationChannel 参数。
        // 用户可以看到的通知渠道的名字。
        CharSequence name = "我的测试通道";
        // 用户可以看到的通知渠道的描述。
        String description = "我的测试通道";
        int importance = NotificationManager.IMPORTANCE_HIGH;
        NotificationChannel mChannel = new NotificationChannel(channelId, name, importance);
        // 配置通知渠道的属性。
        mChannel.setDescription(description);
        // 设置通知出现时的闪灯(如果Android设备支持的话)。
        mChannel.enableLights(true);
        mChannel.setLightColor(Color.RED);
        // 设置通知出现时的震动(如果Android设备支持的话)。
        mChannel.enableVibration(true);
        //  自定义铃声
        mChannel.setSound(Uri.parse("android.resource://"
                + this.getPackageName() + "/" + R.raw.push_hongbao), Notification.AUDIO_ATTRIBUTES_DEFAULT);
        mChannel.setVibrationPattern(new long[]{100, 200, 300, 400, 500, 400, 300, 200, 400});
        // 最后在notificationmanager中创建该通知渠道。
        mNotificationManager.createNotificationChannel(mChannel);
    }

Channel使用

App端侧创建好channel之后保留channelId 的值,服务端推送时需要对齐channel才能达到效果

更多信息

  1. Channel创建这一步骤中的代码您可以调用多次,即可以创建多个通道分别代表不同含义。比如“只响铃”,“只震动”,“铃声+震动”。

  2. Channel创建这一步骤中创建的channelId 同时也用于OPPO厂商通道自分类消息私信通道。对接参数也是AndroidNotificationChannel 。

适用于

  • 移动推送