2021-05-12 14:32:11
Java伺服器端呼叫JPushAPI
實現主動推播,還是需要結合我們應用的業務邏輯來判斷具體什麼時候、推播什麼資訊
這裡就詳細介紹下Java伺服器端呼叫JPushAPI
1
去下載jpush伺服器端sdk。
如果使用maven直接在pom.xml中加入對應的依賴包
在原有的基礎上加上:
<dependency>
<groupId>com.google.code.gson</groupId>
<artifactId>gson</artifactId>
<version>2.2.4</version>
</dependency>
<dependency>
<groupId>cn.jpush.api</groupId>
<artifactId>jpush-client</artifactId>
<version>3.2.3</version>
</dependency>
<dependency>
<groupId>net.sf.json-lib</groupId>
<artifactId>json-lib</artifactId>
<version>2.4</version>
<classifier>jdk15</classifier>
</dependency>
2
使用推播的關鍵在於構建PushPayload
先構建一個推播所有平台、所有裝置的推播物件
public static PushPayload buildPushAllPayload(String alert) {
return PushPayload.alertAll(alert);
}
3
因為IOS和Android通知的顯示形式不一樣,所以我們這兩者分開寫,分別單獨推播。
根據別名、內容、標題,構建一個推播IOS平台的推播物件
這裡可以對別名進行統一處理,譬如jpush不支援別名中含點號,而我們的賬號中都是含有點號的,這裡就可以統一替換,而不用每次呼叫時替換
同樣在用戶端登陸時需要把點號換成"_"進行設定別名。
public static PushPayload buildIOSPayload(String alias,String alert) {
return PushPayload.newBuilder()
.setPlatform(Platform.ios_winphone())
.setAudience(Audience.alias(alias.replace(".", "_")))
.setNotification(Notification.newBuilder()
.setAlert(alert)
.build())
.build();
}
4
根據別名、內容、標題,構建一個推播Android和windows phone平台的推播物件
public static PushPayload buildAndroidWinphonePayload(String alias,
String alert,String title) {
return PushPayload.newBuilder()
.setPlatform(Platform.android())
.setAudience(Audience.alias(alias.replace(".", "_")))
.setNotification(Notification.newBuilder()
.setAlert(alert)
.addPlatformNotification(AndroidNotification.newBuilder()
.setTitle(title).build())
.build())
.build();
}
5
測試
寫個main方法測試下如何吧
appKey、masterSecret對應你的應用申請的key和secret
這時候我們傳別名的時候,可以直接用原有的包含「.」的賬號
6
如果別名不存在,會丟擲異常。 Your request params is invalid.
用對應的賬號登陸下用戶端,這時JPush才知道別名對應哪個裝置,再傳送ok成功了。去裝置上看下結果
7
移動裝置顯示效果
這是Android的顯示效果,內容只會顯示部分,而IOS可以顯示內容詳情,
所以有時才有需求要根據平台分別推播。
8
注意項:
發個不同平台分別推播的部分程式碼
如果你的賬號只登陸了一個IOS裝置,推播Android平台時就會拋異常,所以兩個推播不能寫在一個例外處理塊中,同樣這樣異常資訊也不用處理啦,太多啦。。。
相關文章