移动应用推送 SDK

更新时间:2018-03-15 20:34:06

概述

阿里移动推送(Alibaba Cloud Mobile Push)是基于大数据的移动智能推送服务,帮助App快速集成移动推送的功能,在实现高效、精确、实时的移动推送的同时,极大地降低了开发成本。让开发者最有效地与用户保持连接,从而提高用户活跃度、提高应用的留存率。
产品特性

  • 高效稳定

与手机淘宝使用相同架构,基于阿里集团高可用通道。该通道日均消息发送量可达30亿,目前活跃使用的用户达1.8亿。

  • 精准灵活

支持全量推送、设备号推送,账户号推送;同时支持通知(Notification)和应用内消息的推送;api多语言,接口灵活。

  • 实时多样

消息推送及时,展示实时的数据统计报表:包含发送率、到达率、打开率和删除率。

  • 多租户隔离

推送通道多租户互相隔离,保障消息的实时性。

初始化

应用中注册和启动移动推送,在Application里添加初始化代码

    PushServiceFactory.init(app);
    CloudPushService pushService = PushServiceFactory.getCloudPushService();
    // 设置安全图片的auth code
    pushService.setSecurityGuardAuthCode("114d");
    pushService.register(app, new CommonCallback() {
        @Override
        public void onSuccess(String response) {
            Log.d("aep-demo", "init cloudchannel success");
        }

        @Override
        public void onFailed(String errorCode, String errorMessage) {
            Log.d("aep-demo", "init cloudchannel failed -- errorcode:" + errorCode + " -- errorMessage:" + errorMessage);
        }
    });

确认初始化正常

回调方法callback.onSuccess()被调用。以上文接入代码为例,logcat将会打印以下日志:

11-24 12:55:51.096  15235-15535/com.alibaba.xxxx D/YourApp﹕ init cloudchannel success

确认cloudchannel初始化正常,在logcat日志中:输入awcn关键字:

11-24 12:53:51.036  15235-15556/com.alibaba.xxxx E/awcn﹕ |[seq:AWCN1_1] AUTH httpStatusCode: 200
11-24 12:53:51.036  15235-15556/com.alibaba.xxxx E/awcn﹕ |[seq:AWCN1_1] status:AUTH_SUCC

确认DeviceId获取正常:在初始化成功后使用 cloudPushService.getDeviceId() 获取deviceId,应该能够成功获取。

使用方式

接收通知

服务器下发的通知,SDK 会自动处理,无需添加业务代码。

接收消息

服务器下发的消息,需要添加业务代码来处理。创建消息接收 Receiver,继承自 com.alibaba.sdk.android.push.MessageReceiver,并在对应回调中添加业务处理逻辑,可参考以下代码:

public class MyMessageReceiver extends MessageReceiver {
    // 消息接收部分的LOG_TAG
    public static final String REC_TAG = "receiver";
    @Override
    public void onNotification(Context context, String title, String summary, Map<String, String> extraMap) {
        // TODO 处理推送通知
        Log.e("MyMessageReceiver", "Receive notification, title: " + title + ", summary: " + summary + ", extraMap: " + extraMap);
    }
    @Override
    public void onMessage(Context context, CPushMessage cPushMessage) {
            Log.e("MyMessageReceiver", "onMessage, messageId: " + cPushMessage.getMessageId() + ", title: " + cPushMessage.getTitle() + ", content:" + cPushMessage.getContent());
    }
    @Override
    public void onNotificationOpened(Context context, String title, String summary, String extraMap) {
        Log.e("MyMessageReceiver", "onNotificationOpened, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap);
    }
    @Override
    protected void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap) {
        Log.e("MyMessageReceiver", "onNotificationClickedWithNoAction, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap);
    }
    @Override
    protected void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl) {
        Log.e("MyMessageReceiver", "onNotificationReceivedInApp, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap + ", openType:" + openType + ", openActivity:" + openActivity + ", openUrl:" + openUrl);
    }
    @Override
    protected void onNotificationRemoved(Context context, String messageId) {
        Log.e("MyMessageReceiver", "onNotificationRemoved");
    }
}

将该receiver添加到 AndroidManifest.xml

<!-- 消息接收监听器 (用户可自主扩展) -->
<receiver
    android:name=".MyMessageReceiver"
    android:exported="false"> <!-- 为保证receiver安全,建议设置不可导出,如需对其他应用开放可通过android:permission进行限制 -->
    <intent-filter>
        <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" />
    </intent-filter>
    <intent-filter>
        <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" />
    </intent-filter>
    <intent-filter>
        <action android:name="com.alibaba.sdk.android.push.RECEIVE" />
    </intent-filter>
</receiver>

当接收到服务器下发的消息时,会触发 onNotification 方法

混淆配置


-keepclasseswithmembernames class ** {
    native <methods>;
}

-keepattributes Signature

-keep class sun.misc.Unsafe { *; }

-keep class com.taobao.** {*;}

-keep class com.alibaba.** {*;}

-keep class com.alipay.** {*;}

-keep class com.ut.** {*;}

-keep class com.ta.** {*;}

-keep class anet.**{*;}

-keep class anetwork.**{*;}

-keep class org.android.spdy.**{*;}

-keep class org.android.agoo.**{*;}

-keep class android.os.**{*;}

-dontwarn com.taobao.**

-dontwarn com.alibaba.**

-dontwarn com.alipay.**

-dontwarn anet.**

-dontwarn org.android.spdy.**

-dontwarn org.android.agoo.**

-dontwarn anetwork.**

-dontwarn com.ut.**

-dontwarn com.ta.**

常见错误处理

请参见错误处理

更多功能


1. CloudPushService接口

以下接口调用时,如有回调,均为异步执行,且回调不能为空。

1.1基本设置


SDK注册
  • 初始化推送SDK,关联到云通道。
参数
  • context 应用上下文(需要ApplicationContext
    • callback回调
void register(Context context, CommonCallback callback);

SDK动态注册接口
  • 支持动态设置appKey,appSecret的注册接口
参数
  • context 应用上下文(需要ApplicationContext

    • appKey
  • appSecret

    • callback回调
void register(Context context, String appKey, String appSecret, CommonCallback callback);

启动信息统计
  • 统计App启动信息。
void onAppStart();

获取设备标识
  • 获取设备唯一标识。
返回
  • 设备唯一标识。
String getDeviceId();

设置日志等级
  • 需要在通道初始化之前设置;

  • 默认日志等级为CloudPushService.ERROR

参数
  • logLevel 支持设置:CloudPushService.ERROR | CloudPushService.INFO | CloudPushService.DEBUG | CloudPushService.OFF(关闭Log)
void setLogLevel(int logLevel);

动态设置appKey(V2.3.6及以上版本支持)
  • 动态设置appKey无需在manifest配置appKey

  • 务必在调用register注册接口之前调用该接口,否则动态设置失效

参数
  • appKey 需要设置的appKey
void setAppKey(String appKey);

动态设置appSecret(V2.3.6及以上版本支持)
  • 动态设置appSecret无需在manifest配置appSecret

  • 务必在调用register注册接口之前调用该接口,否则动态设置失效

参数
  • appSecret 需要设置的appSecret
void setAppSecret(String appSecret);

打开推送通道(V3.0.3及以上版本支持)
  • 用于在程序运行时动态打开推送通道

  • 全量推送场景下,打开推送通道存在2-3小时延迟。其他场景实时生效

参数
  • callback 回调
void turnOnPushChannel(CommonCallback callback);

关闭推送通道(V3.0.3及以上版本支持)
  • 用于在程序运行时动态关闭推送通道

  • 全量推送场景下,关闭推送通道存在2-3小时延迟。其他场景实时生效

参数
  • callback 回调
void turnOffPushChannel(CommonCallback callback);

查询推送通道状态(V3.0.3及以上版本支持)
  • app运行时查询当前推送通道状态

  • 如果当前为打开状态,则通过callback.success(String response)回调传入'on';反之则传入'off'

参数
  • callback 回调
void checkPushChannelStatus(CommonCallback callback);

设置消息接收IntentService(V3.0.10及以上版本支持)
  • 通过IntentService组件接收消息回调

  • 设置后消息将通过该组件透出,不再通过MessageReceiver

  • 设置的IntentService需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关回调方法

参数
  • messageIntentService 自定义接收消息IntentService的class
void setPushIntentService(Class messageIntentService);

1.2 账号API


绑定账号
  • 将应用内账号和推送通道相关联,可以实现按账号的定点消息推送;

  • 设备只能绑定一个账号,同一账号可以绑定到多个设备;

  • 同一设备更换绑定账号时无需进行解绑,重新调用绑定账号接口即可生效;

  • 若业务场景需要先解绑后绑定,在解绑账号成功回调中进行绑定绑定操作,以此保证执行的顺序性;

  • 账户名设置支持64字节。

参数
  • account 绑定账号名
    • callback回调
void bindAccount(String account, CommonCallback callback);

解绑账号
  • 将应用内账号和推送通道取消关联。
参数
  • callback 回调
void unbindAccount(CommonCallback callback);

1.3 标签API


绑定标签
  • 绑定标签到指定目标;

  • 支持向设备、账号和别名绑定标签,绑定类型由参数target指定;

  • 绑定标签在10分钟内生效;

  • App最多支持绑定1万个标签,单个标签最大支持128字符。

参数
  • target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名
    • target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名
      • tags标签(数组输入)
      • alias别名(仅当target = 3时生效)
    • callback回调
void bindTag(int target, String[] tags, String alias, CommonCallback callback);

解绑标签
  • 解绑指定目标标签;

  • 支持解绑设备、账号和别名标签,解绑类型由参数target指定;

  • 解绑标签在10分钟内生效;

  • 解绑标签只是解除设备和标签的绑定关系,不等同于删除标签,即该APP下标签仍然存在,系统目前不支持标签的删除。

参数
  • target 目标类型,1:本设备; 2:本设备绑定账号; 3:别名。
    • target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备; CloudPushService.ACCOUNT_TARGET:本账号; CloudPushService.ALIAS_TARGET:别名
      • tags标签(数组输入)
      • alias别名(仅当target = 3时生效)
    • callback回调
void unbindTag(int target, String[] tags, String alias, CommonCallback callback);

查询标签
  • 查询目标绑定标签,当前仅支持查询设备标签;

  • 查询结果可从回调onSuccess(response)的response获取;

  • 标签绑定成功且生效(10分钟内)后即可查询。

参数
  • target 目标类型,1: 本设备
    • target(V2.3.5及以上版本) 目标类型,CloudPushService.DEVICE_TARGET:本设备;
    • callback回调
void listTags(int target, CommonCallback callback);

1.4 别名API


添加别名
  • 设备添加别名;

  • 单个设备最多添加128个别名,且同一别名最多添加到128个设备;

  • 别名支持128字节。

参数
  • alias 别名
    • callback回调
void addAlias(String alias, CommonCallback callback);

删除别名
  • 删除设备别名;

  • 支持删除指定别名和删除全部别名(alias = null || alias.length = 0)。

参数
  • alias 别名(alias = null or alias.length = 0时,删除设备全部别名)
    • callback回调
void removeAlias(String alias, CommonCallback callback);

查询别名
  • 查询设备别名;

  • 查询结果可从回调onSuccess(response)的response中获取;

  • 从V3.0.9及以上版本开始,接口内部有5s短缓存,5s内多次调用只会请求服务端一次。

参数
  • callback 回调
void listAliases(CommonCallback callback);

1.5 通知设置API


设置通知声音
  • 设置推送通知声音文件路径;

  • 若不调用本接口,默认获取资源id为R.raw.alicloud\_notification\_sound的资源文件;

  • 若没有获取到指定声音文件,取设备设置的消息声音。

参数
  • filePath 通知声音文件路径
void setNotificationSoundFilePath(String filePath);

设置通知栏图标
  • 设置推送通知栏图标资源Bitmap。

  • 若不调用本接口,默认获取id为R.drawable.alicloud_notification_largeIcon的资源文件;

  • 若没有获取到指定图标文件,取App启动图标。

参数
  • icon 图标资源Bitmap
void setNotificationLargeIcon(Bitmap icon);

设置状态栏图标
  • 设置推送状态栏图标资源Id;

  • 若不调用本接口,默认获取id为R.drawable.alicloud_notification_smallIcon的资源文件;

  • 若没有获取到指定资源文件Id,取App启动图标。

参数
  • iconId 图标资源Id
void setNotificationSmallIcon(int iconId);

设置免打扰时段
  • 设置免打扰时间段,过滤所有通知与消息;

  • 免打扰时段仅支持设置一次,多次调用以最后一次调用设置时段为准;

  • 设置免打扰时段为00:00 - 00:00,可取消免打扰功能;(以下功能支持该用法,V2.3.5及以上版本使用关闭免打扰功能接口)

  • 全天免打扰可以设置为"0:0-23:59"

  • 免打扰时段设置对小米辅助弹窗通知无效。

参数
  • startHour 免打扰的起始时间(小时),24小时制,取值范围:0-23
    • startMinute免打扰起始时间(分钟),取值范围:0-59
    • endHour免打扰的结束时间(小时),24小时制,取值范围:0-23
    • endMinute免打扰结束时间(分钟),取值范围:0-59
void setDoNotDisturb(int startHour, int startMinute, int endHour, int endMinute, CommonCallback callback);

关闭免打扰功能(V2.3.5及以上版本支持)
  • 关闭后,先前设置的免打扰时段失效

  • 免打扰功能默认是关闭的

  • 没有对应的开发免打扰功能接口,调用设置免打扰功能时段功能后自动打开免打扰功能

void closeDoNotDisturbMode();

删除所有通知接口(V2.3.7及以上版本支持)
  • 删除推送SDK创建的所有通知

  • 若需要实现精准删除特定通知可以在onNotification回调中获取通知id,自行删除

void clearNotifications();

1.6 自建通知统计上报API(V3.0.6及以上版本支持)


本接口主要针对统计用户自建通知(通过阿里云推送发送透传消息,并在onMessage回调中自行创建通知)的删除/点击事件上报,其相关实现可以参考移动推送Android SDK:透传消息+用户自建通知最佳实践,如果您直接通过阿里云推送通知,无需使用相关接口。


自建通知点击上报接口
  • 上报自建通知的点击事件

  • 请确保同一消息仅上报一次

参数
  • message 要上报点击事件的消息实例
void clickMessage(CPushMessage message);

自建通知删除上报接口
  • 上报自建通知的删除事件

  • 请确保同一消息仅上报一次

参数
  • message 要上报删除事件的消息实例
void dismissMessage(CPushMessage message);

1.7 电话API(V3.0.11及以上版本支持)


为提高信息的到达率和实效性,扩展推送的使用场景,我们推出了推送与短信的融合通知模式。开发者可以设置在一定时间内,如果用户未收到或未点击推送,通过短信补发通知用户。具体方案可参考:推送短信融合

为实现推送短信融合方案,需要在终端接入绑定/解绑电话号接口,接口详情如下。

绑定电话号

将设备与电话号绑定

参数
  • phoneNumber 要绑定的手机号

  • callback 回调

void bindPhoneNumber(String phoneNumber, CommonCallback callback);

解绑电话号

解除当前设备与电话号的绑定关系

参数
  • callback 回调
void unbindPhoneNumber(CommonCallback callback);

2. MessageReceiver

  • 通过继承MessageReciever,可以拦截通知,接收消息,获取推送中的扩展字段。或者在通知打开或删除的时候,切入进行后续处理。

  • 如果调用了setPushIntentService,则需继承com.alibaba.sdk.android.push.AliyunMessageIntentService,并覆写相关方法,AliyunMessageIntentService所有消息回调同MessageReceiver一致。

使用方法:

  • MessageReceiver
    • 继承com.alibaba.sdk.android.push.MessageReceiver
    • 在Manifest中找到原来MessageReceiver的配置,将上边的class替换成你自己的receiver[不要配置多个]。
  <!--消息接收监听器-->
  <receiver android:name="com.alibaba.sdk.android.push.MessageReceiver <-- 把这里替换成你自己的receiver">
      <intent-filter>
          <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED"/>
      </intent-filter>
      ... ...
  </receiver>
  • AliyunMessageIntentService
    • 继承com.alibaba.sdk.android.push.AliyunMessageIntentService并覆写相关方法
    • 在Manifest中注册该service
      <service android:name="MyPushIntentService" >
            <intent-filter>
                <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" />
            </intent-filter>
            <intent-filter>
                <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" />
            </intent-filter>
            <intent-filter>
                <action android:name="com.alibaba.sdk.android.push.RECEIVE" />
            </intent-filter>
        </service>
消息接收回调
  • 用于接收服务端推送的消息。

  • 消息不会弹窗,而是回调该方法。

参数
  • context 上下文环境
    • messageCPushMessage类型,可以获取消息Id、消息标题和内容。
void onMessage(Context context, CPushMessage message);

通知接收回调
  • 客户端接收到通知后,回调该方法。

  • 可获取到并处理通知相关的参数。

参数
  • context 上下文环境
    • title 通知标题
    • summary通知内容
    • extraMap通知额外参数,包括部分系统自带参数:
    • \_ALIYUN\_NOTIFICATION\_ID\_(V2.3.5及以上):创建通知对应id
    • \_ALIYUN\_NOTIFICATION\_PRIORITY\_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置
void onNotification(Context context, String title, String summary, Map<String, String> extraMap)

通知打开回调
  • 打开通知时会回调该方法,通知打开上报由SDK自动完成。
参数
  • context 上下文环境
    • title 通知标题
    • summary通知内容
    • extraMap通知额外参数,包括部分系统自带参数:
    • \_ALIYUN\_NOTIFICATION\_ID\_(V2.3.5及以上):创建通知对应id
    • \_ALIYUN\_NOTIFICATION\_PRIORITY\_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置
void onNotificationOpened(Context context, String title, String summary, String extraMap);

无跳转逻辑通知打开回调
  • 打开无跳转逻辑(open=4)通知时回调该方法(v2.3.2及以上版本支持),通知打开上报由SDK自动完成。
参数
  • context 上下文环境
    • title 通知标题
    • summary通知内容
    • extraMap通知额外参数,包括部分系统自带参数:
    • \_ALIYUN\_NOTIFICATION\_ID\_(V2.3.5及以上):创建通知对应id
    • \_ALIYUN\_NOTIFICATION\_PRIORITY\_(V2.3.5及以上):创建通知对应id。默认不带,需要通过OpenApi设置
void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap);

通知删除回调
  • 删除通知时回调该方法,通知删除上报由SDK自动完成。
参数
  • context 上下文环境
    • messageId删除通知的Id
void onNotificationRemoved(Context context, String messageId);

通知在应用内到达回调
  • 当用户创建自定义通知样式,并且设置推送应用内到达不创建通知弹窗时调用该回调,且此时不调用onNotification回调(v2.3.3及以上版本支持)
参数
  • context 上下文环境
    • title 通知标题
      • summary通知内容
      • extraMap通知额外参数
      • openType原本通知打开方式,1:打开APP;2:打开activity;3:打开URL;4:无跳转逻辑
    • openActivity所要打开的activity的名称,仅当openType=2时有效,其余情况为null
      • openUrl所要打开的URL,仅当openType=3时有效,其余情况为null
void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl);

3. 自定义样式通知(V2.3.3及以上版本开始支持

Android Push SDK支持用户自定义通知样式,用户可以设定自己的通知样式,涉及的内容包括通知的提醒方式(声音、震动、静默),通知在状态栏的显示图标,推送消息应用内到达时是否创建通知以及自定义通知布局文件等。自定义样式通知的设置包括两部分:

3.1 客户端设置通知样式

  • 用户利用SDK提供的自定义通知样式接口创建自定义样式通知。SDK中有两个自定义样式通知类:1)BasicCustomPushNotification;2)AdvancedCustomPushNotification。其中BasicCustomPushNotification用户设置基础样式,包括提醒方式、状态栏图标以及当推送消息到达时应用正处于前台情况下是否创建该通知等。AdvancedCustomPushNotificationBasicCustomPushNotification的子类,继承了BasicCustomPushNotification的所有方法,同时还可以设置通知样式布局文件

  • 每个样式都需要对应一个特定的整数类型id,如果多个样式设置为同一个id,则最后设置的样式有效。如果SDK没有找到对应id的样式则会创建默认样式的通知

  • 样式只需设置一次,SDK会记住这个设置,在需要使用时加载对应样式

  • 具体使用例子请参考Demo

3.2 后端推送消息时添加自定义样式id

  • 用户利用OpenApi推送消息时设定特定样式的id

  • 服务端不能设置样式,只能指定需要展现的样式id

  • 指定id的样式必须在客户端已经进行设置,否则SDK会创建默认样式的通知

3.3 Example


Example-BasicCustomPushNotification
BasicCustomPushNotification notification = new BasicCustomPushNotification();
notification.setRemindType(BasicCustomPushNotification.REMIND_TYPE_SOUND);
notification.setStatusBarDrawable(R.drawable.logo_yuanjiao_120);
boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(1, notification);
Example-AdvancedCustomPushNotification
AdvancedCustomPushNotification notification = new AdvancedCustomPushNotification(R.layout.notitfication_layout, R.id.m_icon, R.id.m_title, R.id.m_text);
notification.setServerOptionFirst(true);
notification.setBuildWhenAppInForeground(false);
boolean res = CustomNotificationBuilder.getInstance().setCustomNotification(2, notification);
Example-OpenApi

客户端设置完成后,服务端在推送通知时需要利用OpenApi指明对应的自定义样式ID

final SimpleDateFormat dateFormat = new SimpleDateFormat("MM-dd HH:mm:ss");
final String date = dateFormat.format(new Date());
PushRequest pushRequest = new PushRequest();
// 推送目标
pushRequest.setAppKey(appKey);
pushRequest.setTarget("device"); //推送目标: device:推送给设备; account:推送给指定帐号,tag:推送给自定义标签; all: 推送给全部
pushRequest.setTargetValue("deviceId"); 
// 推送配置
pushRequest.setType(1); // 0:表示消息(默认为0), 1:表示通知
pushRequest.setTitle(date); // 消息的标题
pushRequest.setBody("PushRequest body"); // 消息的内容
pushRequest.setSummary("PushRequest summary"); // 通知的摘要
pushRequest.setAndroidNotificationBarType(2);//设置的通知样式ID,通知栏自定义样式范围0-100
// 推送配置: Android
pushRequest.setAndroidOpenType("1"); // 点击通知后动作,1:打开应用 2: 打开应用Activity 3:打开 url
pushRequest.setAndroidExtParameters("{\"_NOTIFICATION_BAR_STYLE_\":\"2\"}");

3.4 BasicCustomPushNotification API


默认构造函数
  • BasicCustomPushNotification的默认构造函数,所有配置采用默认设置:通知方式采用震动+通知;NotificationFlag采用Notification.FLAG_AUTO_CANCEL,状态栏图标用的是android.R.drawable.stat_notify_chat。
public BasicCustomPushNotification()

构造函数
参数
  • drawable 状态栏图标
    • flags NotificationFlags,支持系统Notification下的Flag参数
    • remindType提醒类型,有BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动
public BasicCustomPushNotification(int drawable, int flags, int remindType);

获取状态栏图标
  • 获取已设置的状态栏图标
public int getStatusBarDrawable()

设置状态栏图标
  • 更改状态栏图标设置
参数
  • statusBarDrawable 状态栏图标资源id
public void setStatusBarDrawable(int statusBarDrawable);

获取提醒方式
  • 获取已经设置的提醒方式
public int getRemindType();

设置提醒方式
  • 更改自定义通知的提醒方式
参数
  • remindType 提醒方式,提供的参数有:BasicCustomPushNotification.REMIND_TYPE_SILENT:静默;BasicCustomPushNotification.REMIND_TYPE_VIBRATE:震动;BasicCustomPushNotification.REMIND_TYPE_SOUND:声音;BasicCustomPushNotification.REMIND_TYPE_VIBRATE_AND_SOUND:声音+震动
public void setRemindType(int remindType);

获取Notification Flags参数
  • 获取已经设置的notification flag参数
public int getNotificationFlags();

设置Notification Flags参数
  • 更改自定义通知的flags参数
参数
  • notificationFlags 支持系统自带的Notification Flag参数
public void setNotificationFlags(int notificationFlags);

获取是否服务端设置优先
  • 利用OpenApi或者阿里云推送控制台推送消息都可以设置提醒方式,当后端设置的提醒方式和自定义样式提醒方式冲突时,SDK根据serverOptionFirst参数来判断提醒方式策略。如果该参数为true,则采用后端设定的提醒方式;如果该参数为false,则采用自定义样式指定的提醒方式。默认为false
public boolean isServerOptionFirst();

设置是否服务端优先
  • 更改自定义通知的serverOptionFirst参数
参数
  • serverOptionFirst 是否服务器配置优先
public void setServerOptionFirst(boolean serverOptionFirst);

获取推送前台到达否创建通知参数
  • 当推送到达时,如果应用处在前台,用户可以通过自定义样式决定是否创建通知。默认是创建通知
public boolean isBuildWhenAppInForeground();

设置推送前台到达否创建通知参数
  • 更改当推送到达时应用处在前台情况下是否创建通知的设置
参数
  • buildWhenAppInForeground 是否创建通知
public void setBuildWhenAppInForeground(boolean buildWhenAppInForeground);

3.5 AdvancedCustomPushNotification API

  • AdvancedCustomPushNotificationBasicCustomPushNotification的子类,继承了上文中BasicCustomPushNotification的所有方法。
AdvancedCustomPushNotification构造函数
  • AdvancedCustomPushNotification类的构造函数,AdvancedCustomPushNotification没有默认构造函数
参数
  • view 自定义通知布局文件id。注:Notification的自定义布局是RemoteViews,和其他RemoteViews一样,在自定义视图布局文件中,仅支持FrameLayout、LinearLayout、RelativeLayout三种布局。
    • iconViewId自定义布局文件中icon的viewId
    • titleViewId自定义布局文件中title的viewId
    • contentViewId自定义布局文件中显示通知正文的viewId
public AdvancedCustomPushNotification( int view, int iconViewId, int titleViewId, int contentViewId);

设置通知图标
  • 设置通知栏中显示的图标,该图标显示在iconViewId所指定的控件中。
参数
  • icon icon图标资源id
public void setIcon(int icon);

获取通知图标
  • 获取设置的通知图标
public int getIcon();

3.6 CustomNotificationBuilder API

  • CustomNotificationBuilder用于注册用户设定好的自定义样式通知
获取CustomNotificationBuilder实例
  • CustomNotificationBuilder是单例类,必须通过指定接口来获取实例
public static CustomNotificationBuilder getInstance();

注册自定义样式通知
  • 用户创建好自定义样式通知后需要将其注册,并赋予其一个特定的id
参数
  • customNotificationId 所注册的自定义样式通知的id,id必须大于0。如果将多个不同的自定义样式通知赋予同一个id,则最后注册的通知有效,其他的通知将会被覆盖
    • notification创建的通知,该通知可以是BasicCustomPushNotification对象也可以是AdvancedCustomPushNotification对象,但是不能为null
返回
  • 该方法会返回一个boolean类型的结果,如果返回true,则注册成功;反之则失败。
public  boolean setCustomNotification(int customNotificationId, BasicCustomPushNotification notification);

4. 告警功能实现示例

实现 deviceid 和用户体系绑定

实现用户和 deviceid 绑定功能这里的示例网络请求用的是 API 通道 SDK,账号体系用的是账号及用户 SDK

当获取到 deviceid 时调用绑定接口:

void request(String path) {
    CloudPushService pushService = PushServiceFactory.getCloudPushService();
    String deviceId = pushService.getDeviceId();
    if (TextUtils.isEmpty(deviceId)) {
        return;
    }
    String apiVersion = "1.0.0";
    IoTRequestBuilder builder = new IoTRequestBuilder()
            .setAuthType("iotAuth")
            .setScheme(Scheme.HTTPS)
            .setPath(path)
            .setApiVersion(apiVersion)
            .addParam("deviceId", deviceId);
    IoTRequest request = builder.build();
    IoTAPIClient ioTAPIClient = new IoTAPIClientFactory().getClient();
    ioTAPIClient.send(request, new IoTCallback() {
        @Override
        public void onFailure(IoTRequest ioTRequest, Exception e) {
            e.printStackTrace();
            Log.d("Bind --->>>", "Failure");
        }
​
        @Override
        public void onResponse(IoTRequest ioTRequest, IoTResponse ioTResponse) {
           Log.d("Bind --->>>", "Success");
        }
    });
}

在用户登入登出的时候调用接口更新绑定关系:

 // bind user id
IntentFilter intentFilter = new IntentFilter();
intentFilter.addAction(LoginBusiness.LOGIN_CHANGE_ACTION);
LocalBroadcastManager lb = LocalBroadcastManager.getInstance(this);
lb.registerReceiver(new BroadcastReceiver() {
    @Override
    public void onReceive(Context context, Intent intent) {
        String path = LoginBusiness.isLogin() ? BIND : UN_BIND;
        request(path);

    }
}, intentFilter);

results matching ""

    No results matching ""