【極光推送】給指定用戶發送消息


前言

如果你還沒有搭建極光推送服務器,建議你根據情況,先從服務器搭建開始。

 

前文標題:

《【極光推送】jpush服務端開發詳盡過程》

鏈接:

http://ningmengjiabing.blog.163.com/blog/static/20484719820163194218972/

 

 

如果你已經完成推送服務器的搭建,最后在驗證推送功能時,返回的options大致格式應該如下所示:

{"sendno":1525934458,"apns_production":false}

 

出現這個東東的原因:

1. 我們並未在極光推送(https://www.jpush.cn的控制台為Android以及iOS應用進行應用登記信息。

 

正文

 

一、 控制台操作

1. 在控制台登記相關應用配置信息。

 

二、 客戶端集成

1. 客戶端上需要增加Android版本或是iOS版本的SDK。下載地址:https://www.jpush.cn/common/products。位置如下圖所示:

【極光推送】給指定用戶發送消息 - 檸檬加冰 - 檸檬加冰的博客

 1. 你可以在極光推送官方文檔中,找到相關平台的SDK集成方式,鏈接為:http://docs.jpush.io/

2. 具體的SDK集成方式再次不做贅述,因為筆者不是專業的移動開發人士,甚至連服務器開發也是臨時湊熱鬧搭把手而已。

 

三、 客戶端開發

想要實現給指定人群推送消息的功能,首先要對推送人群方式進行一個簡單的了解。深入的內容可以參考社區中極光推送博客的《推送人群的選擇 – 技術篇》文章,地址是http://blog.jpush.cn/push_audience_tech/

 

這里只是對具體場景應用簡單描述,設計一下。

我們的消息分為三類,一類是通知消息,給所有人。另一類是具體的工作安排,給某一部門的人。還有一類是具體的個人消息,如給領導發請假通知等。所以我們最終決定使用的方式包括一下方式:

1) 廣播:顧名思義就是給所有人群發消息

2) 別名(alias):給指定id的終端設備發送消息。別名需要客戶端進行設置。

3) 標簽(tag):分組發送消息,理解起來應該類似於微信建了一個群聊的趕腳。標簽需要客戶端進行設置。

 

客戶端開發步驟簡述

1. 集成SDK(之前已經完成)

2. 啟動后,到服務器上注冊,並獲取注冊IDRegistrationID

3. 調用Method - setAliasAndTags (with Callback)函數完成別名和標簽的設置。

 

1:這里,我們應用的別名就是員工ID,標簽就是部門ID。以此來進行分類推送

2:具體的參數定義可參照官方文檔《別名與標簽 API》一文。鏈接地址為:http://docs.jpush.cn/pages/viewpage.action?pageId=557241

3:只有call back返回0時才設置成功,其他結果均會讓服務器返回1011錯誤。

 

四、 服務端開發

1. 設置推送平台

setPlatform(Platform.all()) //設置所有平台

setPlatform(Platform.android())//設置android

setPlatform(Platform.android_ios())//設置AndroidiOS

setPlatform(Platform.ios())//設置iOS

 

2. 設置受眾(收到推送消息的人群)

setAudience(Audience.all())設置所有受眾

setAudience(Audience.tag("tag1""tag2"))//設置tagtag1tag2的受眾,群發

setAudience(AudienceTarget.alias("alias1", "alias2")) //設置別名aliasalias1alias2的受眾,單發

1: 更多的發送方式,可以到官網上去找文檔,可以這是多個條件混合發送。由於本項目中沒有那么復雜的應用需求,所以此處省略不提。

 

3. 設置通知方式

setNotification(Notification.alert(ALERT)) //設置通用通知,以alert方式提醒

setNotification(Notification.android(ALERT, TITLE, null))//增加標題

setNotification(Notification.newBuilder()

                   .addPlatformNotification(IosNotification.newBuilder()

                   .setAlert(ALERT)

                   .setBadge(5)

                    .setSound("happy")

                    .addExtra("from", "JPush")

                    .build())

                    .build())//不管什么東西,iOS的總要復雜一些。

1: 可以不設置通知方式,讓其使用默認的通知方式進行消息推送

 

4. 設置通知內容

setMessage(Message.content(MSG_CONTENT))//MSG_CONTENT中就是通知內容。

5. 設置控制選項

setOptions(M\options(sendno, time_to_live, override_msg_id, apns_productionbig_push_duration))

 

當前包含如下幾個可選項:

sendno int 可選 推送序號 純粹用來作為 API 調用標識,API 返回時被原樣返回,以方便 API 調用方匹配請求與返回。

time_to_live int 可選 離線消息保留時長 推送當前用戶不在線時,為該用戶保留多長時間的離線消息,以便其上線時再次推送。默認 86400 天),最長 10 天。設置為 表示不保留離線消息,只有推送當前在線的用戶可以收到。

override_msg_id long 可選 要覆蓋的消息ID 如果當前的推送要覆蓋之前的一條推送,這里填寫前一條推送的 msg_id 就會產生覆蓋效果,即:1)該 msg_id 離線收到的消息是覆蓋后的內容;2)即使該 msg_id Android 端用戶已經收到,如果通知欄還未清除,則新的消息內容會覆蓋之前這條通知;覆蓋功能起作用的時限是:天。 如果在覆蓋指定時限內該 msg_id 不存在,則返回 1003 錯誤,提示不是一次有效的消息覆蓋操作,當前的消息不會被推送。

apns_production boolean 可選 APNs是否生產環境  True 表示推送生產環境,False 表示要推送開發環境; 如果不指定則為推送生產環境。

注:JPush 官方 API LIbrary (SDK) 默認設置為推送 “開發環境”。

big_push_duration int 可選 定速推送時長(分鍾) 又名緩慢推送,把原本盡可能快的推送速度,降低下來,在給定的 分鍾內,均勻地向這次推送的目標用戶推送。最大值為 1440。未設置則不是定速推送。

 

6. 開始推送

sendPush(PushPayload類型參數)

 

7. 獲取返回結果

PushResult類型參數,可以回去到返回值。結果大致格式如下:

{"msg_id":3270259240,"sendno":34919015}

 

8. 附上兩段分標簽以及分別名推送的函數代碼

//description:自定義推送函數--分組推送
//createTime: 04-21
//author: xk
public static PushPayload buildPushObject_android_and_iosByTag(String tag,String title,String content) {
return PushPayload.newBuilder()
.setPlatform(Platform.android_ios())
.setAudience(Audience.tag(tag))
.setNotification(Notification.newBuilder()
.setAlert(content)
.addPlatformNotification(AndroidNotification.newBuilder()
.setTitle(title).build())
.addPlatformNotification(IosNotification.newBuilder()
.incrBadge(1)
.addExtra(title, content).build())
.build())
.build();
}

//description:自定義推送函數--按別名推送
//createTime: 04-21
//author: xk
public static PushPayload buildPushObject_android_and_iosByAlias(String alias,String title,String content) {
return PushPayload.newBuilder()
.setPlatform(Platform.android_ios())
.setAudience(Audience.alias(alias))
.setNotification(Notification.newBuilder()
.setAlert(content)
.addPlatformNotification(AndroidNotification.newBuilder()
.setTitle(title).build())
.addPlatformNotification(IosNotification.newBuilder()
.incrBadge(1)
.addExtra(title, content).build())
.build())
.build();
}


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM