阿里云移动推送

以下是阿里云官网介绍:

java

更新时间:2017-10-23 14:17:28

  
  • SDK 地址       https://github.com/aliyun/aliyun-openapi-java-sdk
  • Demo 地址     https://github.com/aliyun/alicloud-ams-demo/tree/master/OpenApi2.0/push-openapi-java-demo

1 获取AccessKeyId和AccessKeySecret

为了保证云服务的安全,您需要创建一个能访问移动推送资源的 RAM 子账号,获取该子账号的 AK 密钥,并使用这个 RAM 子账号调用移动推送 OpenAPI。

以下是获取 RAM 子账号 AK 密钥的操作步骤:

  • 创建 RAM 用户并获取 AK 密钥                       https://help.aliyun.com/document_detail/28637.html?spm=5176.doc51173.2.3.6o476j
  • 直接给 RAM 用户授权,授予 RAM 子账号 管理移动推送(MPush)的权限          https://help.aliyun.com/document_detail/28639.html?spm=5176.doc51173.2.4.Oxl6s8

2 获取appKey

>>前往移动推动控制台获取 app列表->应用证书            https://push.console.aliyun.com

3 引入SDK依赖

<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-push</artifactId>
    <version>3.8.0</version>
</dependency>
<dependency>
    <groupId>com.aliyun</groupId>
    <artifactId>aliyun-java-sdk-core</artifactId>
    <version>3.2.5</version>
</dependency>

4 示例代码(替换成您的AccessKeyId、AccessKeySecret、appKey)

       IClientProfile profile = DefaultProfile.getProfile("cn-hangzhou", accessKeyId, accessKeySecret);
        DefaultAcsClient client = new DefaultAcsClient(profile);
        PushRequest pushRequest = new PushRequest();
        // 推送目标
        pushRequest.setAppKey(appKey);
        pushRequest.setTarget("DEVICE"); //推送目标: DEVICE:按设备推送 ALIAS : 按别名推送 ACCOUNT:按帐号推送  TAG:按标签推送; ALL: 广播推送
        pushRequest.setTargetValue(deviceIds); //根据Target来设定,如Target=DEVICE, 则对应的值为 设备id1,设备id2. 多个值使用逗号分隔.(帐号与设备有一次最多100个的限制)
//        pushRequest.setTarget("ALL"); //推送目标: DEVICE:推送给设备; ACCOUNT:推送给指定帐号,TAG:推送给自定义标签; ALL: 推送给全部
//        pushRequest.setTargetValue("ALL"); //根据Target来设定,如Target=DEVICE, 则对应的值为 设备id1,设备id2. 多个值使用逗号分隔.(帐号与设备有一次最多100个的限制)
        pushRequest.setPushType("NOTICE"); // 消息类型 MESSAGE NOTICE
        pushRequest.setDeviceType("ALL"); // 设备类型 ANDROID iOS ALL.
        // 推送配置
        pushRequest.setTitle("ALi Push Title"); // 消息的标题
        pushRequest.setBody("Ali Push Body"); // 消息的内容
        // 推送配置: iOS
        pushRequest.setIOSBadge(5); // iOS应用图标右上角角标
        pushRequest.setIOSMusic("default"); // iOS通知声音
        pushRequest.setIOSSubtitle("iOS10 subtitle");//iOS10通知副标题的内容
        pushRequest.setIOSNotificationCategory("iOS10 Notification Category");//指定iOS10通知Category
        pushRequest.setIOSMutableContent(true);//是否允许扩展iOS通知内容
        pushRequest.setIOSApnsEnv("DEV");//iOS的通知是通过APNs中心来发送的,需要填写对应的环境信息。"DEV" : 表示开发环境 "PRODUCT" : 表示生产环境
        pushRequest.setIOSRemind(true); // 消息推送时设备不在线(既与移动推送的服务端的长连接通道不通),则这条推送会做为通知,通过苹果的APNs通道送达一次。注意:离线消息转通知仅适用于生产环境
        pushRequest.setIOSRemindBody("iOSRemindBody");//iOS消息转通知时使用的iOS通知内容,仅当iOSApnsEnv=PRODUCT && iOSRemind为true时有效
        pushRequest.setIOSExtParameters("{"_ENV_":"DEV","k2":"v2"}"); //通知的扩展属性(注意 : 该参数要以json map的格式传入,否则会解析出错)
        // 推送配置: Android
        pushRequest.setAndroidNotifyType("NONE");//通知的提醒方式 "VIBRATE" : 震动 "SOUND" : 声音 "BOTH" : 声音和震动 NONE : 静音
        pushRequest.setAndroidNotificationBarType(1);//通知栏自定义样式0-100
        pushRequest.setAndroidNotificationBarPriority(1);//通知栏自定义样式0-100
        pushRequest.setAndroidOpenType("URL"); //点击通知后动作 "APPLICATION" : 打开应用 "ACTIVITY" : 打开AndroidActivity "URL" : 打开URL "NONE" : 无跳转
        pushRequest.setAndroidOpenUrl("http://www.aliyun.com"); //Android收到推送后打开对应的url,仅当AndroidOpenType="URL"有效
        pushRequest.setAndroidActivity("com.alibaba.push2.demo.XiaoMiPushActivity"); // 设定通知打开的activity,仅当AndroidOpenType="Activity"有效
        pushRequest.setAndroidMusic("default"); // Android通知音乐
        pushRequest.setAndroidPopupActivity("com.ali.demo.PopupActivity");//设置该参数后启动辅助弹窗功能, 此处指定通知点击后跳转的Activity(辅助弹窗的前提条件:1. 集成第三方辅助通道;2. StoreOffline参数设为true)
        pushRequest.setAndroidPopupTitle("Popup Title");
        pushRequest.setAndroidPopupBody("Popup Body");
        pushRequest.setAndroidExtParameters("{"k1":"android","k2":"v2"}"); //设定通知的扩展属性。(注意 : 该参数要以 json map 的格式传入,否则会解析出错)
        // 推送控制
        Date pushDate = new Date(System.currentTimeMillis()) ; // 30秒之间的时间点, 也可以设置成你指定固定时间
        String pushTime = ParameterHelper.getISO8601Time(pushDate);
        pushRequest.setPushTime(pushTime); // 延后推送。可选,如果不设置表示立即推送
        String expireTime = ParameterHelper.getISO8601Time(new Date(System.currentTimeMillis() + 12 * 3600 * 1000)); // 12小时后消息失效, 不会再发送
        pushRequest.setExpireTime(expireTime);
        pushRequest.setStoreOffline(true); // 离线消息是否保存,若保存, 在推送时候,用户即使不在线,下一次上线则会收到
        PushResponse pushResponse = client.getAcsResponse(pushRequest);
        System.out.printf("RequestId: %s, MessageID: %s
",
        pushResponse.getRequestId(), pushResponse.getMessageId());

推送方式

  • 按设备号推送

    • 在客户端调用getDeviceld获得设备号,再通过控制台/openapi接口推送。
  • 按账号推送

    • 在客户端调用bindAccount操作,传参账号为您自己业务的账号(如您的app用手机号登陆,可以用手机号来bindAccount),再通过控制台/openapi接口推送。

 

名词解释

  • AppKey:app在移动推送中的唯一标示。推送SDK初始化和调用openapi推送时需要,从推送控制台APP列表页的应用证书中获取。

  • AppSecret:app的秘钥。推送SDK初始化时需要,从推送控制台APP列表页的应用证书中获取。

  • accessKeyld和accessKeySecret:阿里云用户使用云产品的openapi接口验权时需要,从阿里云官网控制台获取https://ak-console.aliyun.com/#/accesskey

  • responseld:openapi推送请求返回ID(如需排查问题可告诉客户人员该ID)。

  • messageld:某一次推送的消息ID。从控制台通知记录/消息记录中可以找到消息ID。

  • deviceld:设备在推送的唯一标示。 32位,数字和小写字母组合,通过代码获取:Android:CloudPushService的getDeviceld方法,iOS:CloudPushSDK的getDeviceld方法。

  • deviceToken:iOS设备在苹果中心注册时返回的64位设备标识符(iOS设备同时会有deviceld和deviceToken,请不要混淆)。

  • account:给设备添加的账号,可以是任意您的业务需要的,一个设备只能添加一个account,account可以添加多个设备。

  • alias:给设备添加的别名,可以是任意您的业务需要的,一个设备可以最多添加128个alias,一个alias可以最多添加128个设备。

  • tag:给设备添加的标签,可以是任意您的业务需要的,一个appkey最多能绑定1万个tag,一个tag下绑定的设备没有限制。

***********************************************************************************************************************

以上是阿里云官网介绍

***********************************************************************************************************************

在开发实践中只需要对以上代码进行一些修改就行了,我们当前项目采用的是,将一些约定的东西放到pushBody中,给移动端解析,其余也没做什么修改。

原文地址:https://www.cnblogs.com/kplsm123/p/8359783.html