Java中集成极光推送实现给Android提送消息通知(附代码下载)
場(chǎng)景
Android中集成極光推送實(shí)現(xiàn)推送消息通知與根據(jù)別名指定推送附示例代碼下載:
https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details/114016288
若失效,訪問(wèn)下面鏈接
https://www.cnblogs.com/badaoliumangqizhi/p/14440653.html
在上面Android中集成Jpush后,給所有Android設(shè)備推送消息以及通過(guò)別名給指定都是通過(guò)Jpush的
開(kāi)發(fā)者后臺(tái)進(jìn)行推送消息,如果在代碼中怎樣進(jìn)行消息推送。
注:
博客主頁(yè):
https://blog.csdn.net/badao_liumang_qizhi
關(guān)注公眾號(hào)
霸道的程序猿
獲取編程相關(guān)電子書(shū)、教程推送與免費(fèi)下載。
實(shí)現(xiàn)
首先新建一個(gè)Maven項(xiàng)目
在pom.xml中引入Jpush和log4g相關(guān)依賴
??? <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上應(yīng)用的Appkey";private final static String masterSecret = "Jpush上應(yīng)用的secret";private static JPushClient jPushClient = new JPushClient(masterSecret,appKey);/*** 推送給設(shè)備標(biāo)識(shí)參數(shù)的用戶* @param registrationId 設(shè)備標(biāo)識(shí)* @param notification_title 通知內(nèi)容標(biāo)題* @param msg_title 消息內(nèi)容標(biāo)題* @param msg_content 消息內(nèi)容* @param extrasparam1 擴(kuò)展字段1* @param extrasparam2 擴(kuò)展字段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;}/*** 發(fā)送給安卓指定用戶* @param notification_title 通知內(nèi)容標(biāo)題* @param msg_title 消息內(nèi)容標(biāo)題* @param msg_content 消息內(nèi)容* @param extrasparam 附加參數(shù)* @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;}/*** 發(fā)送給所有安卓用戶* @param notification_title 通知內(nèi)容標(biāo)題* @param msg_title 消息內(nèi)容標(biāo)題* @param msg_content 消息內(nèi)容* @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;}/*** 發(fā)送給所有IOS用戶* @param notification_title 通知內(nèi)容標(biāo)題* @param msg_title 消息內(nèi)容標(biāo)題* @param msg_content 消息內(nèi)容* @param extrasparam 擴(kuò)展字段* @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;}/*** 發(fā)送給所有用戶* @param notification_title 通知內(nèi)容標(biāo)題* @param msg_title 消息內(nèi)容標(biāo)題* @param msg_content 消息內(nèi)容* @param extrasparam 擴(kuò)展字段* @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)//此字段為透?jìng)髯侄?#xff0c;不會(huì)顯示在通知欄。用戶可以通過(guò)此字段來(lái)做一些定制需求,如特定的key傳要指定跳轉(zhuǎn)的頁(yè)面(value).addExtra("androidNotification extras key",extrasparam).build()).addPlatformNotification(IosNotification.newBuilder()//傳一個(gè)IosAlert對(duì)象,指定apns title、title、subtitle等.setAlert(notification_title)//直接傳alert//此項(xiàng)是指定此推送的badge自動(dòng)加1.incrBadge(1)//此字段的值default表示系統(tǒng)默認(rèn)聲音;傳sound.caf表示此推送以項(xiàng)目里面打包的sound.caf聲音來(lái)提醒,// 如果系統(tǒng)沒(méi)有此音頻則以系統(tǒng)默認(rèn)聲音提醒;此字段如果傳空字符串,iOS9及以上的系統(tǒng)是無(wú)聲音提醒,以下的系統(tǒng)是默認(rèn)聲音.setSound("sound.caf")//此字段為透?jìng)髯侄?#xff0c;不會(huì)顯示在通知欄。用戶可以通過(guò)此字段來(lái)做一些定制需求,如特定的key傳要指定跳轉(zhuǎn)的頁(yè)面(value).addExtra("iosNotification extras key",extrasparam)//此項(xiàng)說(shuō)明此推送是一個(gè)background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification// .setContentAvailable(true).build()).build())//Platform指定了哪些平臺(tái)就會(huì)像指定平臺(tái)中符合推送條件的設(shè)備進(jìn)行推送。 jpush的自定義消息,// sdk默認(rèn)不做任何處理,不會(huì)有通知提示。建議看文檔http://docs.jpush.io/guideline/faq/的// [通知與自定義消息有什么區(qū)別?]了解通知和自定義消息的區(qū)別.setMessage(Message.newBuilder().setMsgContent(msg_content).setTitle(msg_title).addExtra("message extras key",extrasparam).build()).setOptions(Options.newBuilder()//此字段的值是用來(lái)指定本推送要推送的apns環(huán)境,false表示開(kāi)發(fā),true表示生產(chǎn);對(duì)android和自定義消息無(wú)意義.setApnsProduction(false)//此字段是給開(kāi)發(fā)者自己給推送編號(hào),方便推送者分辨推送記錄.setSendno(1)//此字段的值是用來(lái)指定本推送的離線保存時(shí)長(zhǎng),如果不傳此字段則默認(rèn)保存一天,最多指定保留十天,單位為秒.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");//創(chuàng)建一個(gè)IosAlert對(duì)象,可指定APNs的alert、title等字段//IosAlert iosAlert =? IosAlert.newBuilder().setTitleAndBody("title", "alert body").build();return PushPayload.newBuilder()//指定要推送的平臺(tái),all代表當(dāng)前應(yīng)用配置了的所有平臺(tái),也可以傳android等具體平臺(tái).setPlatform(Platform.android())//指定推送的接收對(duì)象,all代表所有人,也可以指定已經(jīng)設(shè)置成功的tag或alias或該應(yīng)應(yīng)用客戶端調(diào)用接口獲取到的registration id //??????????????? .setAudience(Audience.registrationId(registrationId)).setAudience(Audience.alias(alias1))//jpush的通知,android的由jpush直接下發(fā),iOS的由apns服務(wù)器下發(fā),Winphone的由mpns下發(fā).setNotification(Notification.newBuilder()//指定當(dāng)前推送的android通知.addPlatformNotification(AndroidNotification.newBuilder().setAlert(msg_content) //??????????????????????????????? .setTitle(notification_title).setTitle(msg_title)//此字段為透?jìng)髯侄?#xff0c;不會(huì)顯示在通知欄。用戶可以通過(guò)此字段來(lái)做一些定制需求,如特定的key傳要指定跳轉(zhuǎn)的頁(yè)面(value).addExtra("id",extrasparam1).addExtra("type",extrasparam2).build())//指定當(dāng)前推送的iOS通知 //??????????????????????? .addPlatformNotification(IosNotification.newBuilder() //??????????????????????????????? //傳一個(gè)IosAlert對(duì)象,指定apns title、title、subtitle等 //??????????????????????????????? .setAlert(notification_title) //??????????????????????????????? //直接傳alert //??????????????????????????????? //此項(xiàng)是指定此推送的badge自動(dòng)加1 //??????????????????????????????? .incrBadge(1) //??????????????????????????????? //此字段的值default表示系統(tǒng)默認(rèn)聲音;傳sound.caf表示此推送以項(xiàng)目里面打包的sound.caf聲音來(lái)提醒, //??????????????????????????????? // 如果系統(tǒng)沒(méi)有此音頻則以系統(tǒng)默認(rèn)聲音提醒;此字段如果傳空字符串,iOS9及以上的系統(tǒng)是無(wú)聲音提醒,以下的系統(tǒng)是默認(rèn)聲音 //??????????????????????????????? .setSound("sound.caf") //??????????????????????????????? //此字段為透?jìng)髯侄?#xff0c;不會(huì)顯示在通知欄。用戶可以通過(guò)此字段來(lái)做一些定制需求,如特定的key傳要指定跳轉(zhuǎn)的頁(yè)面(value) //??????????????????????????????? .addExtra("iosNotification extras key",extrasparam1) //??????????????????????????????? //此項(xiàng)說(shuō)明此推送是一個(gè)background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification //??????????????????????????????? //取消此注釋,消息推送時(shí)ios將無(wú)法在鎖屏情況接收 //??????????????????????????????? // .setContentAvailable(true) // //??????????????????????????????? .build()).build())//Platform指定了哪些平臺(tái)就會(huì)像指定平臺(tái)中符合推送條件的設(shè)備進(jìn)行推送。 jpush的自定義消息,// sdk默認(rèn)不做任何處理,不會(huì)有通知提示。建議看文檔http://docs.jpush.io/guideline/faq/的// [通知與自定義消息有什么區(qū)別?]了解通知和自定義消息的區(qū)別.setMessage(Message.newBuilder().setMsgContent(msg_content).setTitle(msg_title).addExtra("id",extrasparam1).addExtra("type",extrasparam2).build()).setOptions(Options.newBuilder()//此字段的值是用來(lái)指定本推送要推送的apns環(huán)境,false表示開(kāi)發(fā),true表示生產(chǎn);對(duì)android和自定義消息無(wú)意義.setApnsProduction(false)//此字段是給開(kāi)發(fā)者自己給推送編號(hào),方便推送者分辨推送記錄.setSendno(1)//此字段的值是用來(lái)指定本推送的離線保存時(shí)長(zhǎng),如果不傳此字段則默認(rèn)保存一天,最多指定保留十天;.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()//指定要推送的平臺(tái),all代表當(dāng)前應(yīng)用配置了的所有平臺(tái),也可以傳android等具體平臺(tái).setPlatform(Platform.android())//指定推送的接收對(duì)象,all代表所有人,也可以指定已經(jīng)設(shè)置成功的tag或alias或該應(yīng)應(yīng)用客戶端調(diào)用接口獲取到的registration id//根據(jù)別名推送.setAudience(Audience.alias(value))//jpush的通知,android的由jpush直接下發(fā),iOS的由apns服務(wù)器下發(fā),Winphone的由mpns下發(fā).setNotification(Notification.newBuilder()//指定當(dāng)前推送的android通知.addPlatformNotification(AndroidNotification.newBuilder().setAlert(msg_content).setTitle(msg_title)//此字段為透?jìng)髯侄?#xff0c;不會(huì)顯示在通知欄。用戶可以通過(guò)此字段來(lái)做一些定制需求,如特定的key傳要指定跳轉(zhuǎn)的頁(yè)面(value).addExtra("type",extrasparam).build()).build())//Platform指定了哪些平臺(tái)就會(huì)像指定平臺(tái)中符合推送條件的設(shè)備進(jìn)行推送。 jpush的自定義消息,// sdk默認(rèn)不做任何處理,不會(huì)有通知提示。建議看文檔http://docs.jpush.io/guideline/faq/的// [通知與自定義消息有什么區(qū)別?]了解通知和自定義消息的區(qū)別.setMessage(Message.newBuilder().setMsgContent(msg_content).setTitle(msg_title) //??????????????????????? .addExtra("message extras key",extrasparam).addExtra("status",extrasparam).build()).setOptions(Options.newBuilder()//此字段的值是用來(lái)指定本推送要推送的apns環(huán)境,false表示開(kāi)發(fā),true表示生產(chǎn);對(duì)android和自定義消息無(wú)意義.setApnsProduction(false)//此字段是給開(kāi)發(fā)者自己給推送編號(hào),方便推送者分辨推送記錄.setSendno(1)//此字段的值是用來(lái)指定本推送的離線保存時(shí)長(zhǎng),如果不傳此字段則默認(rèn)保存一天,最多指定保留十天,單位為秒.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()//指定要推送的平臺(tái),all代表當(dāng)前應(yīng)用配置了的所有平臺(tái),也可以傳android等具體平臺(tái).setPlatform(Platform.android())//指定推送的接收對(duì)象,all代表所有人,也可以指定已經(jīng)設(shè)置成功的tag或alias或該應(yīng)應(yīng)用客戶端調(diào)用接口獲取到的registration id//?????????????? //Audience設(shè)置為all,說(shuō)明采用廣播方式推送,所有用戶都可以接收到.setAudience(Audience.all())//jpush的通知,android的由jpush直接下發(fā),iOS的由apns服務(wù)器下發(fā),Winphone的由mpns下發(fā).setNotification(Notification.newBuilder()//指定當(dāng)前推送的android通知.addPlatformNotification(AndroidNotification.newBuilder().setAlert(msg_content).setTitle(msg_title)//此字段為透?jìng)髯侄?#xff0c;不會(huì)顯示在通知欄。用戶可以通過(guò)此字段來(lái)做一些定制需求,如特定的key傳要指定跳轉(zhuǎn)的頁(yè)面(value).addExtra("type",extrasparam).build()).build())//Platform指定了哪些平臺(tái)就會(huì)像指定平臺(tái)中符合推送條件的設(shè)備進(jìn)行推送。 jpush的自定義消息,// sdk默認(rèn)不做任何處理,不會(huì)有通知提示。建議看文檔http://docs.jpush.io/guideline/faq/的// [通知與自定義消息有什么區(qū)別?]了解通知和自定義消息的區(qū)別.setMessage(Message.newBuilder().setMsgContent(msg_content).setTitle(msg_title).addExtra("status",extrasparam).build()).setOptions(Options.newBuilder()//此字段的值是用來(lái)指定本推送要推送的apns環(huán)境,false表示開(kāi)發(fā),true表示生產(chǎn);對(duì)android和自定義消息無(wú)意義.setApnsProduction(false)//此字段是給開(kāi)發(fā)者自己給推送編號(hào),方便推送者分辨推送記錄.setSendno(1)//此字段的值是用來(lái)指定本推送的離線保存時(shí)長(zhǎng),如果不傳此字段則默認(rèn)保存一天,最多指定保留十天,單位為秒.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()//指定要推送的平臺(tái),all代表當(dāng)前應(yīng)用配置了的所有平臺(tái),也可以傳android等具體平臺(tái).setPlatform(Platform.ios())//指定推送的接收對(duì)象,all代表所有人,也可以指定已經(jīng)設(shè)置成功的tag或alias或該應(yīng)應(yīng)用客戶端調(diào)用接口獲取到的registration id.setAudience(Audience.all())//jpush的通知,android的由jpush直接下發(fā),iOS的由apns服務(wù)器下發(fā),Winphone的由mpns下發(fā).setNotification(Notification.newBuilder()//指定當(dāng)前推送的android通知.addPlatformNotification(IosNotification.newBuilder()//傳一個(gè)IosAlert對(duì)象,指定apns title、title、subtitle等.setAlert(notification_title)//直接傳alert//此項(xiàng)是指定此推送的badge自動(dòng)加1.incrBadge(1)//此字段的值default表示系統(tǒng)默認(rèn)聲音;傳sound.caf表示此推送以項(xiàng)目里面打包的sound.caf聲音來(lái)提醒,// 如果系統(tǒng)沒(méi)有此音頻則以系統(tǒng)默認(rèn)聲音提醒;此字段如果傳空字符串,iOS9及以上的系統(tǒng)是無(wú)聲音提醒,以下的系統(tǒng)是默認(rèn)聲音.setSound("sound.caf")//此字段為透?jìng)髯侄?#xff0c;不會(huì)顯示在通知欄。用戶可以通過(guò)此字段來(lái)做一些定制需求,如特定的key傳要指定跳轉(zhuǎn)的頁(yè)面(value).addExtra("iosNotification extras key",extrasparam)//此項(xiàng)說(shuō)明此推送是一個(gè)background推送,想了解background看:http://docs.jpush.io/client/ios_tutorials/#ios-7-background-remote-notification// .setContentAvailable(true).build()).build())//Platform指定了哪些平臺(tái)就會(huì)像指定平臺(tái)中符合推送條件的設(shè)備進(jìn)行推送。 jpush的自定義消息,// sdk默認(rèn)不做任何處理,不會(huì)有通知提示。建議看文檔http://docs.jpush.io/guideline/faq/的// [通知與自定義消息有什么區(qū)別?]了解通知和自定義消息的區(qū)別.setMessage(Message.newBuilder().setMsgContent(msg_content).setTitle(msg_title).addExtra("message extras key",extrasparam).build()).setOptions(Options.newBuilder()//此字段的值是用來(lái)指定本推送要推送的apns環(huán)境,false表示開(kāi)發(fā),true表示生產(chǎn);對(duì)android和自定義消息無(wú)意義.setApnsProduction(false)//此字段是給開(kāi)發(fā)者自己給推送編號(hào),方便推送者分辨推送記錄.setSendno(1)//此字段的值是用來(lái)指定本推送的離線保存時(shí)長(zhǎng),如果不傳此字段則默認(rèn)保存一天,最多指定保留十天,單位為秒.setTimeToLive(86400).build()).build();}public static void main(String[] args){/*??????? if(JpushClientUtil.sendToAllAndroid("推送給所有Android用戶","公眾號(hào)","霸道的程序猿","101")==1){System.out.println("推送給所有Android用戶success");}*/if(JpushClientUtil.sendToOneAndroid("推送給指定Android用戶","公眾號(hào)","指定推送公眾號(hào):霸道的程序猿","102", "badaodechengxvyuan")==1){System.out.println("推送給指定Android用戶success");}} }然后這個(gè)工具類中提供了一個(gè)main方法用來(lái)進(jìn)行推送測(cè)試。
首先將上面工具類中的Appkey和secret修改為Jpush開(kāi)發(fā)者平臺(tái)上應(yīng)用對(duì)應(yīng)的數(shù)據(jù)。
然后先打開(kāi)推送給所有安卓用戶的測(cè)試方法,運(yùn)行
?
然后在App中
?
會(huì)收到推送,并且在方法回調(diào)中
?
然后點(diǎn)擊App上的注冊(cè)別名按鈕,給當(dāng)前Android設(shè)備添加別名,然后在工具類main方法中放開(kāi)指定設(shè)備推送的代碼
?
然后在App端
?
Java端示例代碼下載
https://download.csdn.net/download/BADAO_LIUMANG_QIZHI/15450452
Android端示例代碼下載
https://download.csdn.net/download/BADAO_LIUMANG_QIZHI/15435342
總結(jié)
以上是生活随笔為你收集整理的Java中集成极光推送实现给Android提送消息通知(附代码下载)的全部?jī)?nèi)容,希望文章能夠幫你解決所遇到的問(wèn)題。
- 上一篇: Android中集成Jpush实现推送消
- 下一篇: Java中对接钉钉API获取数据流程