高阶配置接口(4.x)

更新时间:
复制 MD 格式

本文介绍 Android SDK 4.x 的通知图标、免打扰、通知清理、图片下载监听和兼容配置。

重要

本文中的通知配置接口仅对 ACCS 自有通道通知生效,对厂商通道通知无效。

适用于移动推送 Android SDK 4.x,本文接口和示例以已发布的 4.0.0 版本为基线。使用 3.x 的应用请参见对应的 3.x API 文档。

调用前准备

先完成 PushServiceFactory.init,再获取 CloudPushService。PushServiceFactory 位于 com.alibaba.sdk.android.push.noonesdk,以下接口属于 com.alibaba.sdk.android.push.CloudPushService。

以下 Java 和 Kotlin 示例为业务方法内的代码片段。context 表示有效的 Android Context;R.drawable.notification_large 和 R.drawable.notification_small 为应用自行准备的 drawable 资源,请替换为实际资源 ID。

设置通知大图标

设置 SDK 创建通知时使用的大图标 Bitmap,不改变状态栏小图标。

所属类:CloudPushService。

接口定义

void setNotificationLargeIcon(Bitmap icon);

参数说明

参数

类型

是否必填

说明

icon

Bitmap

否

通知大图标。传入非空 Bitmap 设置自定义图标;传 null 清除该自定义 Bitmap,后续通知按默认图标规则处理。

返回值与回调:void,无返回值,也不提供设置结果回调。配置用于后续创建的通知,不会重新绘制已展示的通知。

未设置时,SDK 尝试使用应用 drawable 目录中的 alicloud_notification_largeicon 资源。服务端指定的通知图片可能优先于此设置。请准备适合通知展示的资源。

代码示例

Bitmap icon = BitmapFactory.decodeResource(
        context.getResources(), R.drawable.notification_large);
PushServiceFactory.getCloudPushService().setNotificationLargeIcon(icon);
val icon = BitmapFactory.decodeResource(context.resources, R.drawable.notification_large)
PushServiceFactory.getCloudPushService().setNotificationLargeIcon(icon)

设置通知状态栏小图标

设置 SDK 创建通知时使用的状态栏小图标资源 ID,不改变通知大图标。

所属类:CloudPushService。

接口定义

void setNotificationSmallIcon(int iconId);

参数说明

参数

类型

是否必填

说明

iconId

int

是

应用 drawable 小图标资源 ID。传 0 取消该自定义资源 ID,后续通知按默认小图标规则处理。

返回值与回调:void,无返回值,也不提供设置结果回调。配置用于后续创建的通知,不会重新绘制已展示的通知。

未设置时,SDK 尝试读取 drawable/alicloud_notification_smallicon;无法获取时再使用应用图标。自定义通知样式中的图标设置也可能影响最终结果。

代码示例

PushServiceFactory.getCloudPushService()
        .setNotificationSmallIcon(R.drawable.notification_small);
PushServiceFactory.getCloudPushService()
    .setNotificationSmallIcon(R.drawable.notification_small)

设置免打扰时段

设置每天的免打扰时间段,在该时段过滤 SDK 处理的通知与消息。

所属类:CloudPushService。

接口定义

void setDoNotDisturb(int startHour, int startMinute,
        int endHour, int endMinute, CommonCallback callback);

参数说明

参数

类型

是否必填

说明

startHour

int

是

免打扰开始小时,24 小时制,取值 0~23,使用设备本地时间。

startMinute

int

是

免打扰开始分钟,取值 0~59。

endHour

int

是

免打扰结束小时,24 小时制,取值 0~23,使用设备本地时间。

endMinute

int

是

免打扰结束分钟,取值 0~59。

callback

CommonCallback

是

设置结果回调,必须提供非空对象;成功和失败含义见下文。

返回值与回调:void,无同步返回值。设置成功调用 onSuccess(String response),4.0.0 的 response 为 "success";时间参数超出范围或未完成初始化时调用 onFailed(String errorCode, String errorMessage),分别返回错误码和失败原因。设置成功表示本地免打扰配置已生效。消息送达结果请通过推送回执和设备接收情况验证。

设置后自动启用免打扰。支持跨午夜时段,例如 22:00~次日 07:00;多次调用以最后一次设置为准。全天免打扰可设置 00:00~23:59。免打扰优先于 showNotificationNow,作用于 ACCS 自有通道的通知和消息,对厂商通道通知无效。

4.0.0 的该设置为进程内状态,如需在应用重启后继续生效,请根据应用保存的业务配置重新设置。

代码示例

CommonCallback callback = new CommonCallback() {
    @Override
    public void onSuccess(String response) {
        // 本地免打扰配置成功;4.0.0 的 response 为 "success"。
    }
    @Override
    public void onFailed(String errorCode, String errorMessage) {
        // 记录错误码并按业务需要处理失败,不输出敏感数据。
    }
};
PushServiceFactory.getCloudPushService()
        .setDoNotDisturb(22, 0, 7, 0, callback);
val callback = object : CommonCallback {
    override fun onSuccess(response: String?) {
        // 本地免打扰配置成功;4.0.0 的 response 为 "success"。
    }
    override fun onFailed(errorCode: String?, errorMessage: String?) {
        // 按业务需要处理失败。
    }
}
PushServiceFactory.getCloudPushService()
    .setDoNotDisturb(22, 0, 7, 0, callback)

关闭免打扰

关闭先前通过 setDoNotDisturb 启用的免打扰模式,恢复按正常流程处理后续通知与消息。

所属类:CloudPushService。

接口定义

void closeDoNotDisturbMode();

参数说明:无。

返回值与回调:void,无返回值和结果回调。

新进程中免打扰模式默认关闭。需要关闭已启用的免打扰模式时,请调用 closeDoNotDisturbMode。

代码示例

PushServiceFactory.getCloudPushService().closeDoNotDisturbMode();
PushServiceFactory.getCloudPushService().closeDoNotDisturbMode()

清除通知

清除 SDK 管理的已展示通知,不关闭推送通道,也不停止接收后续通知。

所属类:CloudPushService。

接口定义

void clearNotifications();

参数说明:无。

返回值与回调:void,无返回值和结果回调。

清除 SDK 管理的通知,不控制厂商通道创建的通知。若业务需要精确取消某条自行创建的通知,请保存其 Android 通知 ID 并通过系统通知 API 管理。

代码示例

PushServiceFactory.getCloudPushService().clearNotifications();
PushServiceFactory.getCloudPushService().clearNotifications()

监听大图标和大图下载失败

设置通知大图标和大图的下载失败监听器,用于感知图片下载失败原因。

所属类:CloudPushService。

接口定义

void setLargeIconDownloadListener(OnLargeIconDownloadListener listener);

参数说明

参数

类型

是否必填

说明

listener

DownloadUtil.OnLargeIconDownloadListener

否

图片下载失败监听对象。传 null 取消监听;重复设置时以后一次传入的监听器为准。

返回值与回调:void,无设置结果返回值。图片下载失败时触发下表对应回调;两个回调方法均返回 void。

OnLargeIconDownloadListener 位于 com.alibaba.sdk.android.push.util.DownloadUtil,用于接收通知图片下载失败事件。通知到达情况请通过 onNotification 回调获取。

回调

说明

void onDownloadLargeIconFailed(String error)

通知大图标下载失败。error 为 String 类型的失败原因,可能来自 HTTP 错误或异常信息;允许为 null。

void onDownloadBigPictureFailed(String error)

通知大图下载失败。error 为 String 类型的失败原因,可能来自 HTTP 错误或异常信息;允许为 null。

代码示例

PushServiceFactory.getCloudPushService().setLargeIconDownloadListener(
        new DownloadUtil.OnLargeIconDownloadListener() {
            @Override public void onDownloadLargeIconFailed(String error) {
                // 按业务需要记录失败原因。
            }
            @Override public void onDownloadBigPictureFailed(String error) {
                // 按业务需要处理大图下载失败。
            }
        });
PushServiceFactory.getCloudPushService().setLargeIconDownloadListener(
    object : DownloadUtil.OnLargeIconDownloadListener {
        override fun onDownloadLargeIconFailed(error: String?) {
            // 按业务需要处理大图标下载失败。
        }
        override fun onDownloadBigPictureFailed(error: String?) {
            // 按业务需要处理大图下载失败。
        }
    }
)

通过 Notification Channel 配置声音

以下是 Android 系统 API 的独立配置示例,不是 CloudPushService 接口。它只演示通知渠道的声音配置,与前述图标、免打扰配置分别生效。

Android 8.0 及以上的通知声音由系统通知渠道管理。请在应用中创建通知渠道,并使推送请求中的 AndroidNotificationChannel 与渠道 ID 一致。渠道创建后,实际声音由渠道配置和用户的系统设置共同决定,重复创建同一渠道不会覆盖用户设置。

if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    NotificationChannel channel = new NotificationChannel(
            "push_default", "消息通知", NotificationManager.IMPORTANCE_DEFAULT);
    Uri sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION);
    AudioAttributes attributes = new AudioAttributes.Builder()
            .setUsage(AudioAttributes.USAGE_NOTIFICATION)
            .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
            .build();
    channel.setSound(sound, attributes);
    NotificationManager manager = context.getSystemService(NotificationManager.class);
    manager.createNotificationChannel(channel);
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.O) {
    val channel = NotificationChannel(
        "push_default", "消息通知", NotificationManager.IMPORTANCE_DEFAULT
    )
    val sound = RingtoneManager.getDefaultUri(RingtoneManager.TYPE_NOTIFICATION)
    val attributes = AudioAttributes.Builder()
        .setUsage(AudioAttributes.USAGE_NOTIFICATION)
        .setContentType(AudioAttributes.CONTENT_TYPE_SONIFICATION)
        .build()
    channel.setSound(sound, attributes)
    context.getSystemService(NotificationManager::class.java).createNotificationChannel(channel)
}

兼容接口

接口定义

4.0.0 状态与使用边界

void setNotificationSoundFilePath(String filePath)

已废弃,签名仍保留。Android 8.0 及以上请使用 Notification Channel 配置声音;不作为新接入推荐方式。

void setNotificationShowInGroup(boolean inGroup)

已废弃,4.0.0 中仍保留本地通知分组配置,默认 false。新方案优先按通知分组使用说明配置服务端分组参数,并统一管理客户端与服务端的分组规则。

4.x 不再提供 PushControlService,不能调用 isConnected、reconnect、reset 或连接状态监听接口;这些内容仅适用于相应的旧版 SDK。

相关文档

接入流程请参见Android SDK接入(4.x)。

使用 3.x 的应用请参见高阶配置接口(3.x)。