厂商通道配置

1.添加额外依赖项

    implementation 'com.aliyun.ams:alicloud-android-push:3.1.9.1'
    implementation 'com.aliyun.ams:alicloud-android-third-push:3.1.0@aar'
    implementation 'com.aliyun.ams:huawei-push:2.6.3.305'
    implementation 'com.aliyun.ams:huawei-push-base:2.6.3.305'
    implementation 'com.aliyun.ams:meizu-push:3.8.7.1'
    implementation 'com.aliyun.ams:third_vivopush:2.9.0.1'

2.初始化配置

        // 注册方法会自动判断是否支持系统推送,如不支持会跳过注册。
        // 小米系统推送
        MiPushRegister.register(APP, xxx,xxx);
        // 华为系统推送
        HuaWeiRegister.register(APP);
        // OPPO通道注册
        OppoRegister.register(APP, xxx,xxx);
        // 魅族通道注册
        MeizuRegister.register(APP, xxx, xxx);
        // VIVO通道注册
        VivoRegister.register(APP);

3.配置消息接收广播

/**
 * 阿里云推送:在线时的推送逻辑,离线时走厂商通道 (包名)xxx.xxx.xxx.PopupPushActivity页面
 */
public class MyMessageReceiver extends MessageReceiver{

    @Override
    public void onNotification(Context context, String title, String summary, Map<String, String> extraMap) {
        Timber.d("Receive notification, title: " + title + ", summary: " + summary + ", extraMap: " + extraMap);
       
    }

    @Override
    public void onMessage(Context context, CPushMessage cPushMessage) {
        Timber.d("onMessage, messageId: " + cPushMessage.getMessageId() + ", title: " + cPushMessage.getTitle() + ", content:" + cPushMessage.getContent());
    }
}

4.离线推送配置

/**
 * 阿里云推送:离线时的厂商通道
 */
public class PopupPushActivity extends AndroidPopupActivity {
    static final String TAG = "PopupPushActivity";

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
    }

    /**
     * 辅助弹窗指定打开Activity回调
     * 实现通知打开回调方法,获取通知相关信息
     *
     * @param title   标题
     * @param summary 内容
     * @param extMap  额外参数
     */
    @Override
    protected void onSysNoticeOpened(String title, String summary, Map<String, String> extMap) {
        Timber.d("PopupPushActivity "+"onSysNoticeOpened, title: " + title + ", content: " + summary + ", extMap: " + extMap);
       	//跳转具体业务页面,并携带参数
        startActivity(xxx);	
        finish();
    }


}

通过API进行推送

Java示例代码 ,如果有离线无法收到的情况,请对比查看是否缺少部分参数

PushRequest pushRequest = new PushRequest();
// 推送目标
pushRequest.setAppKey(appKey);
pushRequest.setTarget("ALL"); //推送目标: DEVICE:推送给设备; ACCOUNT:推送给指定帐号,TAG:推送给自定义标签; ALIAS: 按别名推送; ALL: 全推
pushRequest.setTargetValue("all"); //根据Target来设定,如Target=DEVICE, 则对应的值为 设备id1,设备id2. 多个值使用逗号分隔.(帐号与设备有一次最多100个的限制)
pushRequest.setDeviceType("iOS"); // 设备类型deviceType, iOS设备: "iOS"; Android设备: "ANDROID"; 全部: "ALL", 这是默认值.
// 推送配置
pushRequest.setPushType("MESSAGE"); // MESSAGE:表示消息(默认), NOTICE:表示通知
pushRequest.setTitle("Hello"); // 消息的标题
pushRequest.setBody("PushRequest body"); // 消息的内容
// 推送配置: iOS
pushRequest.setIOSBadge(5); // iOS应用图标右上角角标
pushRequest.setIOSMusic("default"); // iOS通知声音
pushRequest.setIOSApnsEnv("PRODUCT");//iOS的通知是通过APNs中心来发送的,需要填写对应的环境信息。'DEV': 表示开发环境 'PRODUCT': 表示生产环境
pushRequest.setIOSRemind(true); //  消息推送时设备不在线(既与移动推送的服务端的长连接通道不通),则这条推送会做为通知,通过苹果的APNs通道送达一次。注意:**离线消息转通知仅适用于`生产环境`**
pushRequest.setIOSRemindBody("PushRequest summary"); // iOS消息转通知时使用的iOS通知内容,仅当iOSApnsEnv=`PRODUCT` && iOSRemind为true时有效
pushRequest.setIOSExtParameters("{\"k1\":\"ios\",\"k2\":\"v2\"}"); //通知的扩展属性(注意 : 该参数要以json map的格式传入,否则会解析出错)
// 推送配置: Android
pushRequest.setAndroidOpenType("ACTIVITY"); // 点击通知后动作 'APPLICATION': 打开应用 'ACTIVITY': 打开应用AndroidActivity 'URL': 打开URL 'NONE': 无跳转
pushRequest.setAndroidNotifyType("SOUND"); // 通知的提醒方式 ‘VIBRATE': 振动  'SOUND': 声音 'DEFAULT': 声音和振动 'NONE': 不做处理,用户自定义
pushRequest.setAndroidOpenUrl("http://www.alibaba.com");
pushRequest.setAndroidMusic("default"); // Android通知声音
pushRequest.setAndroidActivity("com.alibaba.push.PushActivity"); // Android收到推送后打开对应的ACTIVITY,仅当`AndroidOpenType="ACTIVITY"`有效
pushRequest.setAndroidPopupActivity("com.alibaba.push.PopupActivity"); //设置该参数后启动辅助弹窗功能, 此处指定通知点击后跳转的Activity(辅助弹窗的前提条件:1. 集成第三方辅助通道;2. StoreOffline参数设为true)
pushRequest.setAndroidPopupTitle("Popup Title"); //设置辅助弹窗通知的标题
pushRequest.setAndroidPopupBody("Popup Body"); //设置辅助弹窗通知的内容
pushRequest.setAndroidNotificationBarType(50); //Android自定义通知栏样式,取值:1-100
pushRequest.setAndroidNotificationBarPriority(2); //Android通知在通知栏展示时排列位置的优先级 -2 -1 0 1 2
pushRequest.setAndroidExtParameters("{\"k1\":\"android\",\"k2\":\"v2\"}"); //设定通知的扩展属性。(注意 : 该参数要以 json map 的格式传入,否则会解析出错)
// 推送控制
final Date pushDate = new Date(System.currentTimeMillis() + 3600 * 1000); //用于定时发送。不设置缺省是立即发送。时间格式按照ISO8601标准表示,并需要使用UTC时间,格式为`YYYY-MM-DDThh:mm:ssZ`。
final String pushTime = ParameterHelper.getISO8601Time(pushDate);
pushRequest.setPushTime(pushTime); // 延后推送。可选,如果不设置表示立即推送
pushRequest.setStoreOffline(true); // 离线消息是否保存,若保存, 在推送时候,用户即使不在线,下一次上线则会收到
final String expireTime = ParameterHelper.getISO8601Time(new Date(System.currentTimeMillis() + 12 * 3600 * 1000)); // 12小时后消息失效, 不会再发送
pushRequest.setExpireTime(expireTime);
// 短信融合通知
pushRequest.setSmsTemplateName("SMS_1234567"); // 设置短信模板名
pushRequest.setSmsSignName("测试"); //设置短信签名
pushRequest.setSmsParams("name=Bob&code=123"); // 短信模板变量
pushRequest.setSmsSendPolicy(0); // 补发短信的策略,0 表示当设备未收到推送时补发
pushRequest.setSmsDelaySecs(120); // 两分钟未收到触发短信
PushResponse pushResponse = client.getAcsResponse(pushRequest);
System.out.printf("RequestId: %s, MessageId: %s\n",
        pushResponse.getRequestId(), pushResponse.getMessageId());
Logo

技术共进,成长同行——讯飞AI开发者社区

更多推荐