java 阿里云消息推送到手机

本文介绍了如何使用阿里云推送服务将消息推送到Android和iOS设备。通过设置不同的参数,可以定制通知的标题、内容、提醒方式、通知样式以及点击后的操作。同时,还展示了全平台推送的实现,包括设备目标、消息类型和推送控制等配置。
摘要由CSDN通过智能技术生成

阿里云推送消息到Android:

/**
     * 阿里云推送(Android)
     *
     * @param deviceIds 设备号
     * @param title     消息的标题
     * @param body      消息的内容
     * @param subtitle  通知副标题的内容
     * @return :
     */
    @Override
    public void aliAndroidPush(String deviceIds, String title, String body, String subtitle, Long message_id) {
        AliPushProperties aliPushProperties = artQuarterProperties.getAliPush();
        IClientProfile profile = DefaultProfile.getProfile("cn-chengdu", aliPushProperties.getAccessKeyId(), aliPushProperties.getAccessKeySecret());
        DefaultAcsClient client = new DefaultAcsClient(profile);
        PushRequest pushRequest = new PushRequest();
        // 推送目标
        pushRequest.setAppKey(aliPushProperties.getAndroidAccessKeyId());
        //推送目标: DEVICE:按设备推送  ALIAS : 按别名推送 ACCOUNT:按帐号推送  TAG:按标签推送; ALL: 广播推送
        pushRequest.setTarget("ACCOUNT");
        //根据Target来设定,如Target=DEVICE, 则对应的值为 设备id1,设备id2. 多个值使用逗号分隔.(帐号与设备有一次最多100个的限制)
        pushRequest.setTargetValue(deviceIds);
        //推送目标: DEVICE:推送给设备; ACCOUNT:推送给指定帐号,TAG:推送给自定义标签; ALL: 推送给全部
//        pushRequest.setTarget("ALL");
        //根据Target来设定,如Target=DEVICE, 则对应的值为 设备id1,设备id2. 多个值使用逗号分隔.(帐号与设备有一次最多100个的限制)
//        pushRequest.setTargetValue("ALL");

        // 消息类型 MESSAGE NOTICE
        pushRequest.setPushType("NOTICE");
        // 设备类型 ANDROID iOS ALL.
        pushRequest.setDeviceType("ANDROID");
        pushRequest.setAndroidNotificationChannel("1");

        // 推送配置
        // 消息的标题
        pushRequest.setTitle(title);
        // 消息的内容
        pushRequest.setBody(body);

        // 推送配置: Android
        //通知的提醒方式 "VIBRATE" : 震动 "SOUND" : 声音 "BOTH" : 声音和震动 NONE : 静音
        pushRequest.setAndroidNotifyType("NONE");
        //通知栏自定义样式0-100
        pushRequest.setAndroidNotificationBarType(1);
        //通知栏自定义样式0-100
        pushRequest.setAndroidNotificationBarPriority(1);
        //点击通知后动作 "APPLICATION" : 打开应用 "ACTIVITY" : 打开AndroidActivity "URL" : 打开URL "NONE" : 无跳转
        pushRequest.setAndroidOpenType("NONE");
        //Android收到推送后打开对应的url,仅当AndroidOpenType="URL"有效
//        pushRequest.setAndroidOpenUrl("http://www.aliyun.com");
        // 设定通知打开的activity,仅当AndroidOpenType="Activity"有效
//        pushRequest.setAndroidActivity("com.alibaba.push2.demo.XiaoMiPushActivity");
        // Android通知音乐
//        pushRequest.setAndroidMusic("default");
        //设置该参数后启动辅助弹窗功能, 此处指定通知点击后跳转的Activity(辅助弹窗的前提条件:1. 集成第三方辅助通道;2. StoreOffline参数设为true)
//        pushRequest.setAndroidPopupActivity("com.ali.demo.PopupActivity");
//        pushRequest.setAndroidPopupTitle("Title");
//        pushRequest.setAndroidPopupBody("Body");
        //设定通知的扩展属性。(注意 : 该参数要以 json或map 的格式传入,否则会解析出错)
        pushRequest.setAndroidExtParameters("{\"deviceType\":\"android\",\"url\":\"http://192.168.10.100:8095/infor_details.html?message_id="+ message_id+"\"}");

        // 推送控制
        // 30秒之间的时间点, 也可以设置成你指定固定时间
//        Date pushDate = new Date(System.currentTimeMillis()) ;
//        // 延后推送。可选,如果不设置表示立即推送
//        String pushTime = ParameterHelper.getISO8601Time(pushDate);
//        pushRequest.setPushTime(pushTime);
//        // 12小时后消息失效, 不会再发送
//        String expireTime = ParameterHelper.getISO8601Time(new Date(System.currentTimeMillis() + 12 * 3600 * 1000));
//        pushRequest.setExpireTime(expireTime);
        // 离线消息是否保存,若保存, 在推送时候,用户即使不在线,下一次上线则会收到
        pushRequest.setStoreOffline(true);
        PushResponse pushResponse = null;
        try {
            pushResponse = client.getAcsResponse(pushRequest);
            System.out.printf("RequestId: %s, MessageID: %s\n", pushResponse.getRequestId(), pushResponse.getMessageId());
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }

阿里云推送消息到IOS:

/**
     * 阿里云推送(ios)
     *
     * @param deviceIds 设备号
     * @param title     消息的标题
     * @param body      消息的内容
     * @param subtitle  通知副标题的内容
     * @return :
     */
    @Override
    public void aliIosPush(String deviceIds, String title, String body, String subtitle, Long message_id) {
        AliPushProperties aliPushProperties = artQuarterProperties.getAliPush();
        IClientProfile profile = DefaultProfile.getProfile("cn-chengdu", aliPushProperties.getAccessKeyId(), aliPushProperties.getAccessKeySecret());
        DefaultAcsClient client = new DefaultAcsClient(profile);
        PushRequest pushRequest = new PushRequest();
        // 推送目标
        pushRequest.setAppKey(aliPushProperties.getIosAccessKeyId());
        //推送目标: DEVICE:按设备推送  ALIAS : 按别名推送 ACCOUNT:按帐号推送  TAG:按标签推送; ALL: 广播推送,推送给全部
        pushRequest.setTarget("ACCOUNT");
        //根据Target来设定,如Target=DEVICE, 则对应的值为 设备id1,设备id2. 多个值使用逗号分隔.(帐号与设备有一次最多100个的限制)
        pushRequest.setTargetValue(deviceIds);
        //推送目标: DEVICE:推送给设备; ACCOUNT:推送给指定帐号,TAG:推送给自定义标签; ALL: 推送给全部
//        pushRequest.setTarget("ALL");
        //根据Target来设定,如Target=DEVICE, 则对应的值为 设备id1,设备id2. 多个值使用逗号分隔.(帐号与设备有一次最多100个的限制)
//        pushRequest.setTargetValue("ALL");

        // 消息类型 MESSAGE NOTICE
        pushRequest.setPushType("NOTICE");
        // 设备类型 ANDROID iOS ALL.
//        pushRequest.setDeviceType("ALL");
        pushRequest.setDeviceType("iOS");

        // 推送配置
        // 消息的标题
        pushRequest.setTitle(title);
        // 消息的内容
        pushRequest.setBody(body);
        // 推送配置: iOS
        // iOS应用图标右上角角标
        pushRequest.setIOSBadge(1);
        // iOS通知声音
        pushRequest.setIOSMusic("default");
        //iOS10通知副标题的内容
        pushRequest.setIOSSubtitle(subtitle);
        //指定iOS10通知Category
        pushRequest.setIOSNotificationCategory("UNNotificationCategoryOptionCustomDismissAction");
        //是否允许扩展iOS通知内容
        pushRequest.setIOSMutableContent(true);
        //iOS的通知是通过APNs中心来发送的,需要填写对应的环境信息。"DEV" : 表示开发环境 "PRODUCT" : 表示生产环境
        pushRequest.setIOSApnsEnv("PRODUCT");
        // 消息推送时设备不在线(既与移动推送的服务端的长连接通道不通),则这条推送会做为通知,通过苹果的APNs通道送达一次。注意:离线消息转通知仅适用于生产环境
        pushRequest.setIOSRemind(true);
        //iOS消息转通知时使用的iOS通知内容,仅当iOSApnsEnv=PRODUCT && iOSRemind为true时有效
        pushRequest.setIOSRemindBody("iOSRemindBody");
        //通知的扩展属性(注意 : 该参数要以json或map的格式传入,否则会解析出错)
        pushRequest.setIOSExtParameters("{\"_ENV_\":\"PRODUCT\",\"url\":\"http://192.168.10.100:8095/infor_details.html?message_id="+ message_id+"\"}");

        // 推送控制
        // 30秒之间的时间点, 也可以设置成你指定固定时间
//        Date pushDate = new Date(System.currentTimeMillis()) ;
//        // 延后推送。可选,如果不设置表示立即推送
//        String pushTime = ParameterHelper.getISO8601Time(pushDate);
//        pushRequest.setPushTime(pushTime);
//        // 12小时后消息失效, 不会再发送
//        String expireTime = ParameterHelper.getISO8601Time(new Date(System.currentTimeMillis() + 12 * 3600 * 1000));
//        pushRequest.setExpireTime(expireTime);
        // 离线消息是否保存,若保存, 在推送时候,用户即使不在线,下一次上线则会收到
        pushRequest.setStoreOffline(true);
        PushResponse pushResponse = null;
        try {
            pushResponse = client.getAcsResponse(pushRequest);
            System.out.printf("RequestId: %s, MessageID: %s\n", pushResponse.getRequestId(), pushResponse.getMessageId());
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }

阿里云消息全推(不分IOS和Android):

/**
     * 阿里云推送
     *
     * @param deviceIds 设备号
     * @param title     消息的标题
     * @param body      消息的内容
     * @param subtitle  通知副标题的内容
     */
    @Override
    public void aliAllPush(String deviceIds, String title, String body, String subtitle, Long message_id) {
        AliPushProperties aliPushProperties = artQuarterProperties.getAliPush();
        IClientProfile profile = DefaultProfile.getProfile("cn-chengdu", aliPushProperties.getAccessKeyId(), aliPushProperties.getAccessKeySecret());
        DefaultAcsClient client = new DefaultAcsClient(profile);
        PushRequest pushRequest = new PushRequest();

        //推送目标: DEVICE:按设备推送  ALIAS : 按别名推送 ACCOUNT:按帐号推送  TAG:按标签推送; ALL: 广播推送
//        pushRequest.setTarget("ALL");
        //根据Target来设定,如Target=DEVICE, 则对应的值为 设备id1,设备id2. 多个值使用逗号分隔.(帐号与设备有一次最多100个的限制)
//        pushRequest.setTargetValue(deviceIds);
//        pushRequest.setTargetValue("ALL");
        //推送目标: DEVICE:推送给设备; ACCOUNT:推送给指定帐号,TAG:推送给自定义标签; ALL: 推送给全部
        pushRequest.setTarget("ALL");
        //根据Target来设定,如Target=DEVICE, 则对应的值为 设备id1,设备id2. 多个值使用逗号分隔.(帐号与设备有一次最多100个的限制)
        pushRequest.setTargetValue("ALL");

        // 消息类型 MESSAGE NOTICE
        pushRequest.setPushType("NOTICE");
        // 设备类型 ANDROID iOS ALL.
        pushRequest.setDeviceType("ALL");

        // 推送配置
        // 消息的标题
        pushRequest.setTitle(title);
        // 消息的内容
        pushRequest.setBody(body);

        // 推送配置: iOS
        // iOS应用图标右上角角标
        pushRequest.setIOSBadge(1);
        // iOS通知声音
        pushRequest.setIOSMusic("default");
        //iOS10通知副标题的内容
        pushRequest.setIOSSubtitle(subtitle);
        //指定iOS10通知Category
        pushRequest.setIOSNotificationCategory("UNNotificationCategoryOptionCustomDismissAction");
        //是否允许扩展iOS通知内容
        pushRequest.setIOSMutableContent(true);
        //iOS的通知是通过APNs中心来发送的,需要填写对应的环境信息。"DEV" : 表示开发环境 "PRODUCT" : 表示生产环境
        pushRequest.setIOSApnsEnv("PRODUCT");
        // 消息推送时设备不在线(既与移动推送的服务端的长连接通道不通),则这条推送会做为通知,通过苹果的APNs通道送达一次。注意:离线消息转通知仅适用于生产环境
        pushRequest.setIOSRemind(true);
        //iOS消息转通知时使用的iOS通知内容,仅当iOSApnsEnv=PRODUCT && iOSRemind为true时有效
        pushRequest.setIOSRemindBody("iOSRemindBody");
        //通知的扩展属性(注意 : 该参数要以json或map的格式传入,否则会解析出错)
        pushRequest.setIOSExtParameters("{\"_ENV_\":\"PRODUCT\",\"url\":\"http://192.168.10.100:8095/infor_details.html?message_id="+ message_id+"\"}");

        // 推送配置: Android
        //通知的提醒方式 "VIBRATE" : 震动 "SOUND" : 声音 "BOTH" : 声音和震动 NONE : 静音
        pushRequest.setAndroidNotifyType("NONE");
        //通知栏自定义样式0-100
        pushRequest.setAndroidNotificationBarType(1);
        //通知栏自定义样式0-100
        pushRequest.setAndroidNotificationBarPriority(1);
        pushRequest.setAndroidNotificationChannel("1");

        //点击通知后动作 "APPLICATION" : 打开应用 "ACTIVITY" : 打开AndroidActivity "URL" : 打开URL "NONE" : 无跳转
        pushRequest.setAndroidOpenType("NONE");
        //Android收到推送后打开对应的url,仅当AndroidOpenType="URL"有效
//        pushRequest.setAndroidOpenUrl("http://www.aliyun.com");
        // 设定通知打开的activity,仅当AndroidOpenType="Activity"有效
//        pushRequest.setAndroidActivity("com.alibaba.push2.demo.XiaoMiPushActivity");
        // Android通知音乐
//        pushRequest.setAndroidMusic("default");
        //设置该参数后启动辅助弹窗功能, 此处指定通知点击后跳转的Activity(辅助弹窗的前提条件:1. 集成第三方辅助通道;2. StoreOffline参数设为true)
//        pushRequest.setAndroidPopupActivity("com.ali.demo.PopupActivity");
//        pushRequest.setAndroidPopupTitle("标题");
//        pushRequest.setAndroidPopupBody("内容");
        //设定通知的扩展属性。(注意 : 该参数要以 json map 的格式传入,否则会解析出错)
        pushRequest.setAndroidExtParameters("{\"deviceType\":\"android\",\"url\":\"http://192.168.10.100:8095/infor_details.html?message_id="+ message_id+"\"}");

        // 推送控制
        // 30秒之间的时间点, 也可以设置成你指定固定时间
//        Date pushDate = new Date(System.currentTimeMillis()) ;
//        // 延后推送。可选,如果不设置表示立即推送
//        String pushTime = ParameterHelper.getISO8601Time(pushDate);
//        pushRequest.setPushTime(pushTime);
//        // 12小时后消息失效, 不会再发送
//        String expireTime = ParameterHelper.getISO8601Time(new Date(System.currentTimeMillis() + 12 * 3600 * 1000));
//        pushRequest.setExpireTime(expireTime);
        // 离线消息是否保存,若保存, 在推送时候,用户即使不在线,下一次上线则会收到
        pushRequest.setStoreOffline(false);
        PushResponse pushResponse = null;
        try {
            // 推送目标
            pushRequest.setAppKey(aliPushProperties.getAndroidAppId());
            pushResponse = client.getAcsResponse(pushRequest);
            pushRequest.setAppKey(aliPushProperties.getIosAppId());
            pushResponse = client.getAcsResponse(pushRequest);
            System.out.printf("RequestId: %s, MessageID: %s\n", pushResponse.getRequestId(), pushResponse.getMessageId());
        } catch (ClientException e) {
            e.printStackTrace();
        }
    }

pom.xml依赖

<!--阿里云移动推送-->
		<dependency>
			<groupId>com.aliyun</groupId>
			<artifactId>aliyun-java-sdk-push</artifactId>
			<version>3.10.1</version>
		</dependency>
		<dependency>
			<groupId>com.aliyun</groupId>
			<artifactId>aliyun-java-sdk-core</artifactId>
			<version>[4.3.2,5.0.0)</version>
		</dependency>

感觉有用的话,请各位点个赞哟,谢谢!

  • 2
    点赞
  • 9
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 1
    评论
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

凱凱啊

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值