.NET對(duì)接極光消息推送的實(shí)現(xiàn)方法
什么是APP消息推送?
很多手機(jī)APP會(huì)不定時(shí)的給用戶(hù)推送消息,例如一些新聞APP會(huì)給用戶(hù)推送用戶(hù)可能感興趣的新聞,或者APP有更新了,會(huì)給用戶(hù)推送是否選擇更新的消息等等,這就是所謂的“消息推送”。
更多APP消息推送的介紹可查閱該篇文章:十分鐘帶你了解APP消息推送(Push)??
如下是我們?nèi)粘I钪谐R?jiàn)的一些APP消息推送示例:
強(qiáng)營(yíng)銷(xiāo)類(lèi):
直接把營(yíng)銷(xiāo)力度,營(yíng)銷(xiāo)模式以一種叫賣(mài)式方式展現(xiàn)出來(lái),目的通過(guò)優(yōu)惠,時(shí)效性勾起用戶(hù)貪小便宜的心理,好奇心理,如下所示:
強(qiáng)關(guān)聯(lián)性:
在信息爆炸的時(shí)代,大腦會(huì)自動(dòng)篩選對(duì)自己有價(jià)值的信息和沒(méi)價(jià)值的信息,如果在一條信息中有@你,您之類(lèi)的言語(yǔ),大腦會(huì)自動(dòng)識(shí)別,使用直接關(guān)聯(lián)的技巧在于巧用“你”相關(guān)的字眼。
強(qiáng)熱點(diǎn):熱點(diǎn)對(duì)眼球的吸引程度不言而喻,但是追熱點(diǎn)這些事情呢,新聞資訊類(lèi)由于其自身的屬性,在熱點(diǎn)話(huà)題這一塊有天然優(yōu)勢(shì),而其他類(lèi)型的APP對(duì)熱點(diǎn)的解讀和追蹤多少差強(qiáng)人意,尤其文案書(shū)寫(xiě)這塊,沒(méi)有杜蕾斯這樣的能力,就別強(qiáng)撩用戶(hù),適得其反反而顯得沒(méi)水平。
強(qiáng)話(huà)題性:
營(yíng)銷(xiāo)界有這么一句話(huà),沒(méi)有違和感就創(chuàng)造不了傳播,不出位就制造不了話(huà)題,那么強(qiáng)話(huà)題性的文案自帶傳播屬性,一般都會(huì)擊中用戶(hù)內(nèi)心的某個(gè)感觸,比如對(duì)社會(huì)的憤世嫉俗,對(duì)高房?jī)r(jià)的逆反心理,對(duì)旅游的文藝心等等。
極光推送介紹
JPush 是經(jīng)過(guò)考驗(yàn)的大規(guī)模 App 推送平臺(tái),每天推送消息量級(jí)為數(shù)百億條。 開(kāi)發(fā)者集成 SDK 后,可以通過(guò)調(diào)用 API 推送消息。同時(shí),JPush 提供可視化的 web 端控制臺(tái)發(fā)送通知,統(tǒng)計(jì)分析推送效果。 JPush 全面支持 Android, iOS, Winphone 三大手機(jī)平臺(tái)。
為什么選擇極光作為APP的消息推送平臺(tái)?
- 首先極光推送支持多平臺(tái)推送
- 支持大規(guī)模的消息推送極光推送
- 對(duì)接方便,不同后端語(yǔ)言都提供了對(duì)應(yīng)的SDK
- 對(duì)于免費(fèi)賬號(hào)支持也非常的友好(不過(guò)免費(fèi)賬號(hào)高峰期有資源瓶頸,假如需要及時(shí)性很強(qiáng)的話(huà)可以購(gòu)買(mǎi)高級(jí)版收費(fèi)服務(wù))
快速對(duì)接Jpush極光推送
- 到極光推送官方網(wǎng)站注冊(cè)開(kāi)發(fā)者帳號(hào);
- 登錄進(jìn)入管理控制臺(tái),創(chuàng)建應(yīng)用程序,得到 Appkey(SDK 與服務(wù)器端通過(guò) Appkey 互相識(shí)別);
- 在推送設(shè)置中給 Android 設(shè)置包名、給 iOS 上傳證書(shū)、啟用 WinPhone,根據(jù)你的需求進(jìn)行選擇;
.NET FX 4.5項(xiàng)目接入
該項(xiàng)目是基于C#/.NET(.NET Framework4.5.1的示例)極光推送對(duì)接實(shí)例,主要是對(duì)接極光集成為我們.Neter提供的SKD。在這里我主要封裝了單個(gè)設(shè)備注冊(cè)ID推送,設(shè)備注冊(cè)ID批量推送和廣播推送三種推送三種方式,其他的推送方式大家可以參考文檔去進(jìn)行封裝。
JPuhs-Sample??(封裝示例源碼)
1、在項(xiàng)目中引入Jiguang.JPush nuget包
2、極光推送調(diào)用
namespace Jpush.Controllers { /// <summary> /// 極光推送管理 /// </summary> public class JPushManageController : Controller { private readonly JPushClientUtil _jPushClientUtil; public JPushManageController(JPushClientUtil jPushClientUtil) { this._jPushClientUtil=jPushClientUtil; } /// <summary> /// 單個(gè)設(shè)備注冊(cè)ID推送 /// </summary> /// <returns></returns> public ActionResult SendPushByRegistrationId() { var isOk = _jPushClientUtil.SendPushByRegistrationId("追逐時(shí)光者歡迎你!", "2022新年快樂(lè)", "1507bfd3f715abecfa4", new Dictionary<string, object>(), true); return Json(new { result = isOk }); } /// <summary> /// 設(shè)備注冊(cè)ID批量推送(一次推送最多1000個(gè)) /// </summary> /// <returns></returns> public ActionResult SendPushByRegistrationIdList() { var registrationIds = new List<string>() { "1507bfd3f715abecfa455", "1507bfd3f715abecfa433", "1507bfd3f715abecfa422" }; var isOk = _jPushClientUtil.SendPushByRegistrationIdList("追逐時(shí)光者歡迎你!", "2022新年快樂(lè)", registrationIds, new Dictionary<string, object>(), true); return Json(new { result = isOk }); } /// <summary> /// 廣播推送 /// </summary> /// <returns></returns> public ActionResult BroadcastPush() { var isOk = _jPushClientUtil.BroadcastPush("追逐時(shí)光者歡迎你!", "2022新年快樂(lè)", new Dictionary<string, object>(), true); return Json(new { result = isOk }); } } }
3、極光推送工具類(lèi)(JPushClientUtil)
namespace Jpush.Common { /// <summary> /// 極光推送工具類(lèi) /// </summary> public class JPushClientUtil { private const string appKey = "youAppKey"; private const string masterSecret = "youMasterSecret"; private static JPushClient client = new JPushClient(appKey, masterSecret); /// <summary> /// 單個(gè)設(shè)備注冊(cè)ID推送 /// </summary> /// <param name="title">推送標(biāo)題(Android才會(huì)存在)</param> /// <param name="noticeContent">通知內(nèi)容</param> /// <param name="registrationid">設(shè)備注冊(cè)ID(registration_id)</param> /// <param name="extrasParam">拓展參數(shù)(傳入App接收的一些參數(shù)標(biāo)識(shí))</param> /// <param name="isApnsProduction">注意:iOS是否推送生產(chǎn)環(huán)境(true是,false否推開(kāi)發(fā)環(huán)境)</param> /// <returns></returns> public bool SendPushByRegistrationId(string title, string noticeContent, string registrationid, Dictionary<string, object> extrasParam = null, bool isApnsProduction = true) { //設(shè)備標(biāo)識(shí)參數(shù)拼接 var pushRegistrationId = new RegistrationIdList(); pushRegistrationId.registration_id.Add(registrationid); return JPushBaseSendMessage(title, noticeContent, isApnsProduction, pushRegistrationId, extrasParam); } /// <summary> /// 設(shè)備注冊(cè)ID批量推送(一次推送最多1000個(gè)) /// </summary> /// <param name="title">推送標(biāo)題(Android才會(huì)存在)</param> /// <param name="noticeContent">通知內(nèi)容</param> /// <param name="registrationIds">注冊(cè)ID(registration_id)列表,一次推送最多1000個(gè)</param> /// <param name="extrasParam">拓展參數(shù)(傳入App接收的一些參數(shù)標(biāo)識(shí))</param> /// <param name="isApnsProduction">注意:iOS是否推送生產(chǎn)環(huán)境(true是,false否推開(kāi)發(fā)環(huán)境)</param> /// <returns></returns> public bool SendPushByRegistrationIdList(string title, string noticeContent, List<string> registrationIds, Dictionary<string, object> extrasParam = null, bool isApnsProduction = true) { //設(shè)備標(biāo)識(shí)參數(shù)拼接 var pushRegistrationId = new RegistrationIdList(); pushRegistrationId.registration_id.AddRange(registrationIds); return JPushBaseSendMessage(title, noticeContent, isApnsProduction, pushRegistrationId, extrasParam); } /// <summary> /// 廣播推送 /// </summary> /// <param name="title">推送標(biāo)題(Android才會(huì)存在)</param> /// <param name="noticeContent">通知內(nèi)容</param> /// <param name="extrasParam">拓展參數(shù)(傳入App接收的一些參數(shù)標(biāo)識(shí))</param> /// <param name="isApnsProduction">注意:iOS是否推送生產(chǎn)環(huán)境(true是,false否推開(kāi)發(fā)環(huán)境)</param> /// <returns></returns> public bool BroadcastPush(string title, string noticeContent, Dictionary<string, object> extrasParam = null, bool isApnsProduction = true) { return JPushBaseSendMessage(title, noticeContent, isApnsProduction, null, extrasParam, true); } /// <summary> /// 極光消息推送公共方法 /// </summary> /// <param name="title">推送標(biāo)題(Android才會(huì)存在)</param> /// <param name="noticeContent">通知內(nèi)容</param> /// <param name="pushRegistrationId">設(shè)備注冊(cè)ID(registration_id)</param> /// <param name="isApnsProduction">iOS是否推送生產(chǎn)環(huán)境(true是,false否推開(kāi)發(fā)環(huán)境)</param> /// <param name="extrasParam">拓展參數(shù)</param> /// <param name="isRadioBroadcast">是否廣播</param> /// <returns></returns> private bool JPushBaseSendMessage(string title, string noticeContent, bool isApnsProduction, RegistrationIdList pushRegistrationId, Dictionary<string, object> extrasParam, bool isRadioBroadcast = false) { try { object audience = pushRegistrationId; if (isRadioBroadcast) { audience = "all"; } var pushPayload = new PushPayload() { Platform = new List<string> { "android", "ios" },//推送平臺(tái)設(shè)置 Audience = audience,//推送目標(biāo) //notifacation:通知內(nèi)容體。是被推送到客戶(hù)端的內(nèi)容。與 message 一起二者必須有其一,可以二者并存。 Notification = new Notification { Alert = noticeContent,//通知內(nèi)容 Android = new Android { Alert = noticeContent,//通知內(nèi)容 Title = title,//通知標(biāo)題 URIActivity = "com.king.sysclearning.platform.app.JPushOpenClickActivity",//該字段用于指定開(kāi)發(fā)者想要打開(kāi)的 activity,值為 activity 節(jié)點(diǎn)的 “android:name”屬性值;適配華為、小米、vivo廠商通道跳轉(zhuǎn) URIAction = "com.king.sysclearning.platform.app.JPushOpenClickActivity",//該字段用于指定開(kāi)發(fā)者想要打開(kāi)的 activity,值為 "activity"-"intent-filter"-"action" 節(jié)點(diǎn)的 "android:name" 屬性值;適配 oppo、fcm跳轉(zhuǎn) Extras = extrasParam //這里自定義JSON格式的Key/Value信息,以供業(yè)務(wù)使用。 }, IOS = new IOS { Alert = noticeContent, Badge = "+1",//此項(xiàng)是指定此推送的badge自動(dòng)加1 Extras = extrasParam //這里自定義JSON格式的Key/Value信息,以供業(yè)務(wù)使用。 } }, Options = new Options//可選參數(shù) { //iOS 環(huán)境不一致問(wèn)題:API 推送消息給 iOS,需要設(shè)置 apns_production 指定推送的環(huán)境,false 為開(kāi)發(fā),true 為生產(chǎn)。 IsApnsProduction = isApnsProduction// 設(shè)置 iOS 推送生產(chǎn)環(huán)境。不設(shè)置默認(rèn)為開(kāi)發(fā)環(huán)境。 } }; var response = client.SendPush(pushPayload); //200一定是正確。所有異常都不使用 200 返回碼 if (response.StatusCode == HttpStatusCode.OK) { return true; } else { return false; } } catch (Exception ex) { return false; } } } public class RegistrationIdList { /// <summary> /// 設(shè)備注冊(cè)ID /// </summary> public List<string> registration_id { get; set; } = new List<string>(); } }
相關(guān)鏈接地址
到此這篇關(guān)于.NET對(duì)接極光消息推送的實(shí)現(xiàn)方法的文章就介紹到這了,更多相關(guān).NET對(duì)接極光消息推送內(nèi)容請(qǐng)搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
動(dòng)態(tài)改變ASP.net頁(yè)面標(biāo)題和動(dòng)態(tài)指定頁(yè)面樣式表的方法
動(dòng)態(tài)改變ASP.net頁(yè)面標(biāo)題和動(dòng)態(tài)指定頁(yè)面樣式表的方法...2007-04-04.NET連接數(shù)據(jù)庫(kù)以及基本的增刪改查操作教程
這篇文章主要給大家介紹了關(guān)于.NET連接數(shù)據(jù)庫(kù)以及基本的增刪改查操作教程的相關(guān)資料,對(duì)于剛?cè)腴T(mén)的新手們來(lái)說(shuō)是個(gè)很好的入門(mén)教程,文中通過(guò)示例代碼介紹的非常詳細(xì),需要的朋友可以參考借鑒,下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧。2018-01-01Asp.net在頁(yè)面間傳遞大量數(shù)據(jù)(數(shù)據(jù)表)建議采用的方法
能讓數(shù)據(jù)在 兩個(gè)不同站點(diǎn)之間傳遞嗎,針對(duì)這個(gè)問(wèn)題將會(huì)展開(kāi)本文的探討有想在A站點(diǎn)的數(shù)據(jù)傳遞到B站點(diǎn)的朋友們可以適當(dāng)參考下,或許本文對(duì)你有所幫助2013-02-02asp.net 2.0中利用Ajax2.0實(shí)現(xiàn)JSON傳送大量頁(yè)面數(shù)據(jù)
本人遇到一個(gè)程序頁(yè)面,要有很大量的數(shù)據(jù)進(jìn)行交互操作。2010-03-03Asp.net+jquery+.ashx文件實(shí)現(xiàn)分頁(yè)思路
分頁(yè)思路: .ashx程序中,編寫(xiě)好取得不同頁(yè)碼的程序。在頁(yè)面布局好的前提下,留下數(shù)據(jù)區(qū)域 div。然后在頁(yè)面請(qǐng)求 .ashx程序生成下一頁(yè)的html代碼。覆蓋div.innerHTMl2013-03-03詳解ASP.Net Core 中如何借助CSRedis實(shí)現(xiàn)一個(gè)安全高效的分布式鎖
這篇文章主要介紹了ASP.Net Core 中如何借助CSRedis實(shí)現(xiàn)一個(gè)安全高效的分布式鎖,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧2019-04-04