zoukankan      html  css  js  c++  java
  • Java中集成极光推送实现给Android提送消息通知(附代码下载)

    场景

    Android中集成极光推送实现推送消息通知与根据别名指定推送附示例代码下载:

    https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/114016288

    若失效,访问下面链接

    https://www.cnblogs.com/badaoliumangqizhi/p/14440653.html

    在上面Android中集成Jpush后,给所有Android设备推送消息以及通过别名给指定都是通过Jpush的

    开发者后台进行推送消息,如果在代码中怎样进行消息推送。

    注:

    博客主页:
    https://blog.csdn.net/badao_liumang_qizhi
    关注公众号
    霸道的程序猿
    获取编程相关电子书、教程推送与免费下载。

    实现

    首先新建一个Maven项目

    在pom.xml中引入Jpush和log4g相关依赖

        <dependencies>
            <!-- 极光推送 -->
            <dependency>
                <groupId>cn.jpush.api</groupId>
                <artifactId>jpush-client</artifactId>
                <version>3.4.8</version>
            </dependency>
            <dependency>
                <groupId>org.msgpack</groupId>
                <artifactId>msgpack</artifactId>
                <version>0.6.12</version>
            </dependency>
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>1.2.17</version>
            </dependency>
    
        </dependencies>

    然后新建包,包下新建工具类JpushClientUtil

    package com.badao.jpushdemo;
    
    import cn.jiguang.common.resp.APIConnectionException;
    import cn.jiguang.common.resp.APIRequestException;
    import cn.jpush.api.JPushClient;
    import cn.jpush.api.push.PushResult;
    import cn.jpush.api.push.model.Message;
    import cn.jpush.api.push.model.Options;
    import cn.jpush.api.push.model.Platform;
    import cn.jpush.api.push.model.PushPayload;
    import cn.jpush.api.push.model.audience.Audience;
    import cn.jpush.api.push.model.notification.AndroidNotification;
    import cn.jpush.api.push.model.notification.IosNotification;
    import cn.jpush.api.push.model.notification.Notification;
    
    public class JpushClientUtil {
    
        private final static String appKey = "Jpush上应用的Appkey";
    
        private final static String masterSecret = "Jpush上应用的secret";
    
        private static JPushClient jPushClient = new JPushClient(masterSecret,appKey);
    
        /**
         * 推送给设备标识参数的用户
         * @param registrationId 设备标识
         * @param notification_title 通知内容标题
         * @param msg_title 消息内容标题
         * @param msg_content 消息内容
         * @param extrasparam1 扩展字段1
         * @param extrasparam2 扩展字段2
         * @return 0推送失败,1推送成功
         */
        public static int sendToRegistrationId( String registrationId,String notification_title, String msg_title, String msg_content, String extrasparam1,String extrasparam2) {
            int result = 0;
            try {
                PushPayload pushPayload= JpushClientUtil.buildPushObject_all_registrationId_alertWithTitle(registrationId,notification_title,msg_title,msg_content,extrasparam1,extrasparam2);
                System.out.println(pushPayload);
                PushResult pushResult=jPushClient.sendPush(pushPayload);
                System.out.println(pushResult);
                if(pushResult.getResponseCode()==200){
                    result=1;
                }
            } catch (APIConnectionException e) {
                e.printStackTrace();
    
            } catch (APIRequestException e) {
                e.printStackTrace();
            }
    
            return result;
        }
    
        /**
         * 发送给安卓指定用户
         * @param notification_title 通知内容标题
         * @param msg_title 消息内容标题
         * @param msg_content 消息内容
         * @param extrasparam 附加参数
         * @param alias 推送别名
         * @return 0推送失败,1推送成功
         */
        public static int sendToOneAndroid( String notification_title, String msg_title, String msg_content, String extrasparam, String alias) {
            int result = 0;
            try {
                PushPayload pushPayload= JpushClientUtil.buildPushObject_android_all_alertWithTitle(notification_title,msg_title,msg_content,extrasparam,null,alias);
                System.out.println(pushPayload);
                PushResult pushResult=jPushClient.sendPush(pushPayload);
                System.out.println(pushResult);
                if(pushResult.getResponseCode()==200){
                    result=1;
                }
            } catch (Exception e) {
    
                e.printStackTrace();
            }
    
            return result;
        }
    
        /**
         * 发送给所有安卓用户
         * @param notification_title 通知内容标题
         * @param msg_title 消息内容标题
         * @param msg_content 消息内容
         * @return 0推送失败,1推送成功
         */
        public static int sendToAllAndroid( String notification_title, String msg_title, String msg_content, String extrasparam) {
            int result = 0;
            try {
                PushPayload pushPayload= JpushClientUtil.buildPushObject_android_all_alertWithTitleAll(notification_title,msg_title,msg_content,extrasparam);
                System.out.println(pushPayload);
                PushResult pushResult=jPushClient.sendPush(pushPayload);
                System.out.println(pushResult);
                if(pushResult.getResponseCode()==200){
                    result=1;
                }
            } catch (Exception e) {
    
                e.printStackTrace();
            }
    
            return result;
        }
    
        /**
         * 发送给所有IOS用户
         * @param notification_title 通知内容标题
         * @param msg_title 消息内容标题
         * @param msg_content 消息内容
         * @param extrasparam 扩展字段
         * @return 0推送失败,1推送成功
         */
        public static int sendToAllIos(String notification_title, String msg_title, String msg_content, String extrasparam) {
            int result = 0;
            try {
                PushPayload pushPayload= JpushClientUtil.buildPushObject_ios_all_alertWithTitle(notification_title,msg_title,msg_content,extrasparam);
                System.out.println(pushPayload);
                PushResult pushResult=jPushClient.sendPush(pushPayload);
                System.out.println(pushResult);
                if(pushResult.getResponseCode()==200){
                    result=1;
                }
            } catch (Exception e) {
    
                e.printStackTrace();
            }
    
            return result;
        }
    
        /**
         * 发送给所有用户
         * @param notification_title 通知内容标题
         * @param msg_title 消息内容标题
         * @param msg_content 消息内容
         * @param extrasparam 扩展字段
         * @return 0推送失败,1推送成功
         */
        public static int sendToAll( String notification_title, String msg_title, String msg_content, String extrasparam) {
            int result = 0;
            try {
                PushPayload pushPayload= JpushClientUtil.buildPushObject_android_and_ios(notification_title,msg_title,msg_content,extrasparam);
                System.out.println(pushPayload);
                PushResult pushResult=jPushClient.sendPush(pushPayload);
                System.out.println(pushResult);
                if(pushResult.getResponseCode()==200){
                    result=1;
                }
            } catch (Exception e) {
    
                e.printStackTrace();
            }
    
            return result;
        }
    
     
    
        public static PushPayload buildPushObject_android_and_ios(String notification_title, String msg_title, String msg_content, String extrasparam) {
            return PushPayload.newBuilder()
                    .setPlatform(Platform.android_ios())
                    .setAudience(Audience.all())
                    .setNotification(Notification.newBuilder()
                            .setAlert(notification_title)
                            .addPlatformNotification(AndroidNotification.newBuilder()
                                    .setAlert(notification_title)
                                    .setTitle(notification_title)
                                    //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
                                    .addExtra("androidNotification extras key",extrasparam)
                                    .build()
                            )
                            .addPlatformNotification(IosNotification.newBuilder()
                                    //传一个IosAlert对象,指定apns title、title、subtitle等
                                    .setAlert(notification_title)
                                    //直接传alert
                                    //此项是指定此推送的badge自动加1
                                    .incrBadge(1)
                                    //此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,
                                    // 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音
                                    .setSound("sound.caf")
                                    //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
                                    .addExtra("iosNotification extras key",extrasparam)
                                    //此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
                                    // .setContentAvailable(true)
    
                                    .build()
                            )
                            .build()
                    )
                    //Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,
                    // sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的
                    // [通知与自定义消息有什么区别?]了解通知和自定义消息的区别
                    .setMessage(Message.newBuilder()
                            .setMsgContent(msg_content)
                            .setTitle(msg_title)
                            .addExtra("message extras key",extrasparam)
                            .build())
    
                    .setOptions(Options.newBuilder()
                            //此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义
                            .setApnsProduction(false)
                            //此字段是给开发者自己给推送编号,方便推送者分辨推送记录
                            .setSendno(1)
                            //此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天,单位为秒
                            .setTimeToLive(86400)
                            .build()
                    )
                    .build();
        }
    
        private static PushPayload buildPushObject_all_registrationId_alertWithTitle(String alias1, String notification_title, String msg_title, String msg_content, String extrasparam1, String extrasparam2) {
    
            System.out.println("----------buildPushObject_all_all_alert");
            //创建一个IosAlert对象,可指定APNs的alert、title等字段
            //IosAlert iosAlert =  IosAlert.newBuilder().setTitleAndBody("title", "alert body").build();
    
            return PushPayload.newBuilder()
                    //指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
                    .setPlatform(Platform.android())
                    //指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
    //                .setAudience(Audience.registrationId(registrationId))
                    .setAudience(Audience.alias(alias1))
                    //jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
                    .setNotification(Notification.newBuilder()
                            //指定当前推送的android通知
                            .addPlatformNotification(AndroidNotification.newBuilder()
    
                                    .setAlert(msg_content)
    //                                .setTitle(notification_title)
                                    .setTitle(msg_title)
                                    //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
                                    .addExtra("id",extrasparam1)
                                    .addExtra("type",extrasparam2)
    
                                    .build())
                            //指定当前推送的iOS通知
    //                        .addPlatformNotification(IosNotification.newBuilder()
    //                                //传一个IosAlert对象,指定apns title、title、subtitle等
    //                                .setAlert(notification_title)
    //                                //直接传alert
    //                                //此项是指定此推送的badge自动加1
    //                                .incrBadge(1)
    //                                //此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,
    //                                // 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音
    //                                .setSound("sound.caf")
    //                                //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
    //                                .addExtra("iosNotification extras key",extrasparam1)
    //                                //此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
    //                                //取消此注释,消息推送时ios将无法在锁屏情况接收
    //                                // .setContentAvailable(true)
    //
    //                                .build())
    
    
                            .build())
                    //Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,
                    // sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的
                    // [通知与自定义消息有什么区别?]了解通知和自定义消息的区别
                    .setMessage(Message.newBuilder()
                            .setMsgContent(msg_content)
                            .setTitle(msg_title)
                            .addExtra("id",extrasparam1)
                            .addExtra("type",extrasparam2)
                            .build())
    
                    .setOptions(Options.newBuilder()
                            //此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义
                            .setApnsProduction(false)
                            //此字段是给开发者自己给推送编号,方便推送者分辨推送记录
                            .setSendno(1)
                            //此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天;
                            .setTimeToLive(86400)
    
                            .build())
    
                    .build();
    
        }
    
        private static PushPayload buildPushObject_android_all_alertWithTitle(String notification_title, String msg_title, String msg_content, String extrasparam, String type, String value) {
            System.out.println("----------buildPushObject_android_registrationId_alertWithTitle");
            return PushPayload.newBuilder()
                    //指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
                    .setPlatform(Platform.android())
                    //指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
                    //根据别名推送
                    .setAudience(Audience.alias(value))
    
                    //jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
                    .setNotification(Notification.newBuilder()
                                    //指定当前推送的android通知
                                    .addPlatformNotification(AndroidNotification.newBuilder()
                                            .setAlert(msg_content)
                                            .setTitle(msg_title)
                                            //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
                                            .addExtra("type",extrasparam)
                                            .build())
                                    .build()
                    )
                    //Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,
                    // sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的
                    // [通知与自定义消息有什么区别?]了解通知和自定义消息的区别
                    .setMessage(Message.newBuilder()
                            .setMsgContent(msg_content)
                            .setTitle(msg_title)
    //                        .addExtra("message extras key",extrasparam)
                            .addExtra("status",extrasparam)
                            .build())
    
                    .setOptions(Options.newBuilder()
                            //此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义
                            .setApnsProduction(false)
                            //此字段是给开发者自己给推送编号,方便推送者分辨推送记录
                            .setSendno(1)
                            //此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天,单位为秒
                            .setTimeToLive(86400)
                            .build())
                    .build();
        }
    
        private static PushPayload buildPushObject_android_all_alertWithTitleAll(String notification_title, String msg_title, String msg_content, String extrasparam) {
            System.out.println("----------buildPushObject_android_registrationId_alertWithTitle");
            return PushPayload.newBuilder()
                    //指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
                    .setPlatform(Platform.android())
                    //指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
    
    //               //Audience设置为all,说明采用广播方式推送,所有用户都可以接收到
                    .setAudience(Audience.all())
    
                    //jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
                    .setNotification(Notification.newBuilder()
                                    //指定当前推送的android通知
                                    .addPlatformNotification(AndroidNotification.newBuilder()
                                            .setAlert(msg_content)
                                            .setTitle(msg_title)
                                            //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
                                            .addExtra("type",extrasparam)
                                            .build())
                                    .build()
                    )
                    //Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,
                    // sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的
                    // [通知与自定义消息有什么区别?]了解通知和自定义消息的区别
                    .setMessage(Message.newBuilder()
                            .setMsgContent(msg_content)
                            .setTitle(msg_title)
                            .addExtra("status",extrasparam)
                            .build())
    
                    .setOptions(Options.newBuilder()
                            //此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义
                            .setApnsProduction(false)
                            //此字段是给开发者自己给推送编号,方便推送者分辨推送记录
                            .setSendno(1)
                            //此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天,单位为秒
                            .setTimeToLive(86400)
                            .build())
                    .build();
        }
    
        private static PushPayload buildPushObject_ios_all_alertWithTitle(String notification_title, String msg_title, String msg_content, String extrasparam) {
            System.out.println("----------buildPushObject_ios_registrationId_alertWithTitle");
            return PushPayload.newBuilder()
                    //指定要推送的平台,all代表当前应用配置了的所有平台,也可以传android等具体平台
                    .setPlatform(Platform.ios())
                    //指定推送的接收对象,all代表所有人,也可以指定已经设置成功的tag或alias或该应应用客户端调用接口获取到的registration id
                    .setAudience(Audience.all())
                    //jpush的通知,android的由jpush直接下发,iOS的由apns服务器下发,Winphone的由mpns下发
                    .setNotification(Notification.newBuilder()
                            //指定当前推送的android通知
                            .addPlatformNotification(IosNotification.newBuilder()
                                    //传一个IosAlert对象,指定apns title、title、subtitle等
                                    .setAlert(notification_title)
                                    //直接传alert
                                    //此项是指定此推送的badge自动加1
                                    .incrBadge(1)
                                    //此字段的值default表示系统默认声音;传sound.caf表示此推送以项目里面打包的sound.caf声音来提醒,
                                    // 如果系统没有此音频则以系统默认声音提醒;此字段如果传空字符串,iOS9及以上的系统是无声音提醒,以下的系统是默认声音
                                    .setSound("sound.caf")
                                    //此字段为透传字段,不会显示在通知栏。用户可以通过此字段来做一些定制需求,如特定的key传要指定跳转的页面(value)
                                    .addExtra("iosNotification extras key",extrasparam)
                                    //此项说明此推送是一个background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification
                                    // .setContentAvailable(true)
    
                                    .build())
                            .build()
                    )
                    //Platform指定了哪些平台就会像指定平台中符合推送条件的设备进行推送。 jpush的自定义消息,
                    // sdk默认不做任何处理,不会有通知提示。建议看文档http://docs.jpush.io/guideline/faq/的
                    // [通知与自定义消息有什么区别?]了解通知和自定义消息的区别
                    .setMessage(Message.newBuilder()
                            .setMsgContent(msg_content)
                            .setTitle(msg_title)
                            .addExtra("message extras key",extrasparam)
                            .build())
    
                    .setOptions(Options.newBuilder()
                            //此字段的值是用来指定本推送要推送的apns环境,false表示开发,true表示生产;对android和自定义消息无意义
                            .setApnsProduction(false)
                            //此字段是给开发者自己给推送编号,方便推送者分辨推送记录
                            .setSendno(1)
                            //此字段的值是用来指定本推送的离线保存时长,如果不传此字段则默认保存一天,最多指定保留十天,单位为秒
                            .setTimeToLive(86400)
                            .build())
                    .build();
        }
    
        public static void main(String[] args){
    
    /*        if(JpushClientUtil.sendToAllAndroid("推送给所有Android用户","公众号","霸道的程序猿","101")==1)
            {
                System.out.println("推送给所有Android用户success");
            }*/
            if(JpushClientUtil.sendToOneAndroid("推送给指定Android用户","公众号","指定推送公众号:霸道的程序猿","102", "badaodechengxvyuan")==1){
                System.out.println("推送给指定Android用户success");
            }
        }
    }

    然后这个工具类中提供了一个main方法用来进行推送测试。

    首先将上面工具类中的Appkey和secret修改为Jpush开发者平台上应用对应的数据。

    然后先打开推送给所有安卓用户的测试方法,运行

    然后在App中

    会收到推送,并且在方法回调中

    然后点击App上的注册别名按钮,给当前Android设备添加别名,然后在工具类main方法中放开指定设备推送的代码

    然后在App端

    Java端示例代码下载

    https://download.csdn.net/download/BADAO_LIUMANG_QIZHI/15450452

    Android端示例代码下载

    https://download.csdn.net/download/BADAO_LIUMANG_QIZHI/15435342

    博客园: https://www.cnblogs.com/badaoliumangqizhi/ 关注公众号 霸道的程序猿 获取编程相关电子书、教程推送与免费下载。
  • 相关阅读:
    679 怎样杀死害虫?(对付一个系统最好的方式是“围城必阙”)
    678 "流浪地球"为什么是个好地方?(系统越复杂拥有好运气的机会也就越大)
    677 人类为什么会养猫?(做一件事理性的原因的背后往往还隐藏着自己都不曾发现的感性原因)
    职场人必知的三原则
    677 怎样当一个少数派?(越在意,越出众)
    675 为什么会有“黑天鹅”?(行为和对行为后果的负责与否决定了很多黑天鹅出现概率)
    不做特殊论者(没有所谓的理所当然,你所谓的成功很有可能只是因为运气)
    事实和观点(就事论事,事实有真假,观点无对错)
    一个程序员的价值观总结
    669 创新也是搞政治?(如何创新)
  • 原文地址:https://www.cnblogs.com/badaoliumangqizhi/p/14442449.html
Copyright © 2011-2022 走看看