APP渠道号添加指南

APP渠道号添加指南

本文档介绍了添加渠道号的方法,您可在阅读文档内容后,按照规范添加渠道号。

1、在app主module中创建assets(app/src/main/assets)目录。

2、在assets目录下创建channel文件(格式text)。

3、在assets/channel中填写渠道号:渠道号只能由a-z、A-Z、1-9和下划线组成。

小米MIUI 10 通知类别 (Channel) 适配说明

小米MIUI 10 通知类别 (Channel) 适配说明

1. 什么是通知类别 / Channel

通知类别 (channel) 是 Android O 引入的新功能,旨在解决以下问题:

  • 应用的通知越来越多,给用户造成明显打扰。
  • 但用户只能全局屏蔽这个应用的全部通知,不能屏蔽部分,然后留下对自己有用的。

为了解决这个问题,Android 要求开发者给自己的通知分成若干类,然后允许用户单独屏蔽这个类别的通知。以爱奇艺(v9.5.0) 为例,将通知分成了 4 种 Channel,3 个 Channel Group,如下图:

简单解释一下:

  • Channel:实际的通知类别,爱奇艺分成了4类通知。
  • Channel Group:一组 channel,仅用于做分组区分,没有更多的逻辑。
  • 每个通知类别的权限互相独立,互不影响。例如,通知屏蔽了爱奇艺的「新群聊消息」类通知,「常规推送」类通知依然可以发出来。

Android 已将 Channel 的逻辑纳入 Android Compatibility Definition Document (CDD) 中,意味着所有 Android 厂商都必须支持。因此 MIUI 10 也将兼容和支持相关逻辑。

2.如何适配通知类别(Channel)

官方文档已有非常详细的描述,适配步骤不再赘述,详见 https://developer.android.com/training/notify-user/channels 。

有几点值得注意:

2.1. 不要滥设类别,建议控制在 7 类以内

2.2. Channel 的名字要有可读性、有具体含义,同时避免名字重复

2.3. 如果 Channel 名字不好理解,可以使用 setDescription 来补充说明 Channel 的含义

2.4. 最好不要只设一个 Channel,那样就没有设置 Channel 的意义了。以猫眼为例,可以考虑将通知拆成多个 Channel,如下图

3. FAQ

3.1. 一定要适配通知 Channel 吗

取决于你的应用的 target API:

  • target API ≥ 26(Android 8.0):必须适配,而且必须给每条通知指定一个 Channel,否则无法发出通知。
  • target API ≤ 25(Android 7.1):可以不适配。在8.0及以上的设备,通知也能正常发出。

3.2. 一定要有通知 Channel Group 吗

不是必须的。没必要强行设置 Channel Group,应该视自己的业务需求而定。

3.3. 适配 Channel 后,在 Android 8.0 以前的设备会怎么表现

Android 8.0 以前的设备,会完全无视这个功能,因此不会带来任何兼容性问题。

3.4. 创建好 Channel 后,在代码里修改其配置,为什么会不生效

这个是 Android 对此功能增加的限制:当 Channel 已经存在时,后面的 createNotificationChannel 方法仅能更新其 name/description,以及对 importance 进行降级,其余配置均无法更新。先删除旧的 Channel,再创建新的 Channel 也无法实现对其 importance 的升级。

相关逻辑在 com/android/server/notificaton/RankingHelper.java:

@Override
public void createNotificationChannel(String pkg, int uid, NotificationChannel channel,
        boolean fromTargetApp) {
//......
    NotificationChannel existing = r.channels.get(channel.getId());
    // Keep most of the existing settings
    if (existing != null && fromTargetApp) { // 如果已经存在同channel-id的Channel
//......
        existing.setName(channel.getName().toString()); // 则更新name和description
        existing.setDescription(channel.getDescription());
        existing.setBlockableSystem(channel.isBlockableSystem());
 
        // Apps are allowed to downgrade channel importance if the user has not changed any
        // fields on this channel yet.
        if (existing.getUserLockedFields() == 0 &&  // 并且仅当更新的importance小于原来设置的值时才更新importance
                channel.getImportance() < existing.getImportance()) {
            existing.setImportance(channel.getImportance());
        }
 
        updateConfig();
        return;
    }
//......
}


3.5. 如何判断 MIUI 版本

有以下方法:

android.os.SystemProperties.get("ro.miui.ui.version.code", "7");// 如果返回值是「8」,就是 MIUI 10

android.os.SystemProperties.get("ro.miui.ui.version.name", "");// 如果返回值是「V10」,就是 MIUI 10

3.6. 如何测试

升级到  MIUI 10 最新开发版即可,支持的机型和下载链接如下(找到对应机型的最新开发版):

OPPO推送 通知通道(Channel)适配

OPPO推送 通知通道(Channel)适配

通道/Channel

通知通道(Channel)是Android 8.0(API ≥ 26)引入的新功能,旨在解决以下问题:
1)应用的通知越来越多,给用户造成明显打扰。
2)但用户只能全局屏蔽这个应用的全部通知,不能屏蔽部分,然后留下对自己有用的。
从 Android8.0(API ≥ 26)开始,Android要求开发者必须为所有的通知分配通道,不同类的消息走不同的通道发送。 用户可关闭单个通道的消息通知, 不会影响其它通道的消息推送。 以下图为例:将通知分成了 4 种 Channel,3 个 Channel Group。
Channel为实际的通知类别。Channel Group为一组 channel,仅用于做分组区分,开发者可视自己的业务需求而定。每个通知类别的权限互相独立,互不影响。

Channel适配

适配步骤

适配通知通道步骤详见Android官方文档:《创建和管理通知渠道 》
注意: 客户端适配通道后, 开发者若调 API 发送,则必须带通道 ID 发送。 开发者若用 OPush 消息推送平台推送消息,则必须在“通道配置 → 新建通道”模块(如下图)中登记通道,再在发送消息时选择通道发送。

说明:

分组即Channel Group, 非必填,将按照系统默认分组进行处理

通道即Channel,必填。必须填入客户端创建的通道名称和对应通道ID

注意事项

2.1、通道需在产品发布之前需由产品提前规划好消息分类, 如“订单通知”、“评论回复提醒”、“新资讯提醒”等,不同分类的消息走不同通道发送。规划好的通道不应该在不同版本频繁变更,以免给运营同学带来不便。


2.2、通道名称是对用户可见的,因此需要使用方便用户理解的文本。建议:
1)通道命名符合通知内容特征,例如,发送快递接收信息的专用通道,命名为“快递信息”,便于用户理解。尽量避免通道名称重复
2)命名可以是中文,英文。避免数字、包名等不能指代通道信息特征的符号。其中通道名包含“.”的是不允许的。

2.3、对于target API≥ 26(Android 8.0)的应用,必须适配通知通道,未指定通道的情况下发出的通知将无法显示。
对于target API ≤ 25(Android 7.1)的应用,可以不适配。在8.0及以上的设备,通知也能正常发出。


2.4、合理设置通道级别(Importance),以达到合适的通知效果(过度打扰可能导致用户修改通道设置甚至关闭通知开关)。


2.5、合理控制通道数量,尽量避免仅有1个或者超过5个,这样才能更好发挥出通道控制的效用。


2.6、根据需要可以使用通道组(Group)来在设置界面中对通道进行分组归1类,方便用户区分识别。


2.7、适配 Channel 后,在 Android 8.0 以前的设备,会完全无视这个功能,因此不会带来任何兼容性问题。


2.8、创建通知通道后,通知行为以通道设置为准,应用无法再修改,而是交由用户进行控制。