簡要介紹
極光推送(JPush)是一個端到端的推送服務,使得服務器端消息能夠及時地推送到終端用戶手機上,讓開發者積極地保持與用戶的連接,從而提高用戶活躍度、提高應用的留存率。
概念1:消息 和 通知
- 通知:發送後會在系統通知欄收到展現,同時響鈴或振動提醒用戶。
- 消息:以透傳的形式傳遞給客戶端,無顯示,發送後不會在系統通知欄展現,第三方應用後需要開發者寫代碼才能看到。
概念2:alias 和 tag
- alias:別名,用於單發消息,點對點方式
- tag:標籤,相當於羣發
搭建場景
1,註冊極光賬號,官網:https://www.jiguang.cn/accounts/register,登錄後進到極光推送功能
2,創建一個應用
3,創建應用後,獲取到AppKey和Master Secret,後面會用到這兩個
後臺代碼推送其實也就是推送給極光的消息推送服務器,再由服務器推送給設備,這就是需要key和密鑰的原因了
4,設置極光推送設置,這裏這配置android,ios好像還需要配置證書什麼的
5,配置Android推送:這裏需要注意,需要下載的是apk包,下載zip包的話需要自己打成apk包
6,手機安裝上面的官方apk包
7,運行上面那個軟件,大概長這樣,點擊第一個按鈕,初始化一下
備註:停止恢復推送功能: 當點擊停止推送 "stopPush" 按鈕時, 推送手機端就不會再接收推送內容, 當點擊恢復推送時, 會將期間積攢的所有推送內容一次性推送到手機中
至此,已經搭建好場景了
集成到springboot
1,springboot項目pom引入依賴
<!-- 極光推送 begin -->
<dependency>
<groupId>cn.jpush.api</groupId>
<artifactId>jpush-client</artifactId>
<version>3.3.10</version>
</dependency>
<dependency>
<groupId>cn.jpush.api</groupId>
<artifactId>jiguang-common</artifactId>
<version>1.1.4</version>
</dependency>
<!-- 極光推送 end -->
2,創建JPushUtil類,該類中給出了使用與Android和ios的方法,以及兩者都適用的方法。
根據實際需要自行封裝一些方法方便調用,將創建的AppKey和Master Secret替換一下,或者寫到yml裏
官方:https://github.com/jpush/jpush-api-java-client
/**
* 極光推送工具類
* Created by DUYU on 2019/1/17.
*/
public class JPushUtil {
// 設置好賬號的app_key和masterSecret是必須的
private static String APP_KEY = "fcc67*************ba80d76";
private static String MASTER_SECRET = "a4c45*************cc0";
// 極光推送>>Android
//Map<String, String> parm是我自己傳過來的參數,可以自定義參數
public static void jpushAndroid(Map<String, String> parm) {
// 創建JPushClient(極光推送的實例)
JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY);
// 推送的關鍵,構造一個payload
PushPayload payload = PushPayload.newBuilder()
.setPlatform(Platform.android()) // 指定android平臺的用戶
.setAudience(Audience.all()) // 你項目中的所有用戶
// .setAudience(Audience.alias(parm.get("alias"))) // 設置別名發送,單發,點對點方式
//.setAudience(Audience.tag("tag1")) // 設置按標籤發送,相當於羣發
// .setAudience(Audience.registrationId(parm.get("id"))) // registrationId指定用戶
.setNotification(Notification.android(parm.get("msg"), parm.get("title"), parm)) // 發送內容
.setOptions(Options.newBuilder().setApnsProduction(true).setTimeToLive(7200).build())
// apnProduction指定開發環境 true爲生產模式 false 爲測試模式 (android不區分模式,ios區分模式) 不用設置也沒關係
// TimeToLive 兩個小時的緩存時間
.setMessage(Message.content(parm.get("msg"))) // 自定義信息
.build();
try {
PushResult pu = jpushClient.sendPush(payload);
System.out.println(pu.toString());
} catch (APIConnectionException e) {
e.printStackTrace();
} catch (APIRequestException e) {
e.printStackTrace();
}
}
// 極光推送>>ios
// Map<String, String> parm是我自己傳過來的參數,可以自定義參數
public static void jpushIOS(Map<String, String> parm) {
// 創建JPushClient
JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY);
PushPayload payload = PushPayload.newBuilder()
.setPlatform(Platform.ios()) // ios平臺的用戶
.setAudience(Audience.all()) // 所有用戶
//.setAudience(Audience.registrationId(parm.get("id"))) // registrationId指定用戶
.setNotification(Notification.newBuilder()
.addPlatformNotification(IosNotification.newBuilder()
.setAlert(parm.get("msg"))
.setBadge(+1)
.setSound("happy") // 這裏是設置提示音(更多可以去官網看看)
.addExtras(parm)
.build())
.build())
.setOptions(Options.newBuilder().setApnsProduction(false).build())
.setMessage(Message.newBuilder().setMsgContent(parm.get("msg")).addExtras(parm).build()) // 自定義信息
.build();
try {
PushResult pu = jpushClient.sendPush(payload);
System.out.println(pu.toString());
} catch (APIConnectionException e) {
e.printStackTrace();
} catch (APIRequestException e) {
e.printStackTrace();
}
}
// 極光推送>>All所有平臺
public static void jpushAll(Map<String, String> parm) {
// 創建JPushClient
JPushClient jpushClient = new JPushClient(MASTER_SECRET, APP_KEY);
// 創建option
PushPayload payload = PushPayload.newBuilder()
.setPlatform(Platform.all()) // 所有平臺的用戶
.setAudience(Audience.registrationId(parm.get("id"))) // registrationId指定用戶
.setNotification(Notification.newBuilder()
.addPlatformNotification(IosNotification.newBuilder() // 發送ios
.setAlert(parm.get("msg")) // 消息體
.setBadge(+1)
.setSound("happy") // ios提示音
.addExtras(parm) // 附加參數
.build())
.addPlatformNotification(AndroidNotification.newBuilder() // 發送android
.addExtras(parm) // 附加參數
.setAlert(parm.get("msg")) // 消息體
.build())
.build())
.setOptions(Options.newBuilder().setApnsProduction(true).build()) // 指定開發環境 true爲生產模式 false 爲測試模式 (android不區分模式,ios區分模式)
.setMessage(Message.newBuilder().setMsgContent(parm.get("msg")).addExtras(parm).build()) // 自定義信息
.build();
try {
PushResult pu = jpushClient.sendPush(payload);
System.out.println(pu.toString());
} catch (APIConnectionException e) {
e.printStackTrace();
} catch (APIRequestException e) {
e.printStackTrace();
}
}
}
3,測試
public class Test {
public static void main(String[] args) {
// 設置推送參數
// 這裏可以自定義推送參數了
Map<String, String> parm = new HashMap<String, String>();
// 設置提示信息,內容是文章標題
parm.put("msg","你知道對我最重要的東西是什麼嗎?是這句話的第一個字");
parm.put("title","某電商類APP");
parm.put("alias","alias");
JPushUtil.jpushAndroid(parm);
}
}
4,查看極光平臺
5,手機端
簡析
當採用的是標籤或者別名進行推送,需要在在手機APP端(後端也行)進行標籤和別名設置,一般是在用戶登錄之後就設置好,這樣只要用戶登錄,它的綁定別名或者標籤就可以保存到極光服務器,而我們推送時,指定這個別名或者標籤,就能將信息推送到對應用戶的手機上。
其實我們發起推送請求,只是將信息發送到了極光服務器之上,這個信息有一個保存時限,默認一天,只要用戶使用手機APP登錄系統,極光服務器就會將信息自動推送到對應別名或者標籤的手機上,由此可見,信息並非由我們後臺直接推送到手機,而是通過極光服務器這個中轉站,而這正式極光的工作。
注意:這裏告知一個技巧:
- 在別名設置的時候:其實直接將用戶ID設置爲別名即可,既方便,又安全,不用再去想辦法生成一個唯一的串來進行標識,甚至需要在後臺數據庫中用戶表中新增字段。
- 在標籤設置的時候:一般是將一類用戶設置爲一個標籤,然後實現給某類用戶羣發
官方文檔
極光官方文檔:https://docs.jiguang.cn/jpush/server/push/rest_api_v3_push/#platform
極光 JPush Java SDK:https://github.com/jpush/jpush-api-java-client
參考來源於:
https://blog.csdn.net/vbirdbest/article/details/88971977#commentBox