已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
使用极光推送()向安卓手机推送消息【服务端向客户端主送推送】,C#语言在VisualStudio2010中新建网站JPushAndroid。添加引用json帮助类库Newtonsoft.Json.dll。在web.config增加appkey和mastersecret,可以在极光官网申请。web.config源码: 添加类JPushV3,会弹出保存类在App_code文件夹下,确定。JpushV3代码如下:using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Net;using System.Text;using System.IO;using System.Configuration;using System.Collections;/* * 参考文档:/display/dev/Index 选择里面的:服务器端 API,Push-API-V3 * * 极光推送的网站的网址是:/ * 旧版本V2 /display/dev/Push+API+v2 * 最新版本V3 /display/dev/Push-API-v3 * * 其中服务端的接口以及示例代码都在这里:/display/dev/Server-SDKs*/ / 极光推送的最新版:PUSH-API-V3/ 参考地址 /display/dev/Push-API-v3/ POST /v3/push/ public class JPushV3 / / 应用标识:极光推送的用户名 / private readonly string AppKey = ConfigurationManager.AppSettingsAppKey; / / 极光推送的密码 / private readonly string MasterSecret = ConfigurationManager.AppSettingsMasterSecret; / / 极光推送请求的url地址 / private readonly string RequestUrl = /v3/push; / / 查询推送结果请求的Url地址 / private readonly string ReceivedUrl = /v3/received; / / 发送推送请求到JPush,使用HttpWebRequest / / 传入POST或GET / 固定地址 / 用户名AppKey和密码MasterSecret形成的Base64字符串 / 请求的json参数,一般由Platform(平台)、Audience(设备对象标识)、Notification(通知)、Message(自定义消息)、Options(推送可选项)组成 / public string SendRequest(String method, String url, String auth, String reqParams) string resultJson = ; HttpWebRequest myReq = null; HttpWebResponse response = null; try myReq = (HttpWebRequest)WebRequest.Create(url); myReq.Method = method; myReq.ContentType = application/json; if (!String.IsNullOrEmpty(auth) myReq.Headers.Add(Authorization, Basic + auth); if (method = POST) byte bs = UTF8Encoding.UTF8.GetBytes(reqParams); myReq.ContentLength = bs.Length; using (Stream reqStream = myReq.GetRequestStream() reqStream.Write(bs, 0, bs.Length); reqStream.Close(); response = (HttpWebResponse)myReq.GetResponse(); HttpStatusCode statusCode = response.StatusCode; if (Equals(response.StatusCode, HttpStatusCode.OK) using (StreamReader reader = new StreamReader(response.GetResponseStream(), System.Text.Encoding.UTF8) resultJson = reader.ReadToEnd(); try object json = Newtonsoft.Json.JsonConvert.DeserializeObject(resultJson); catch resultJson = string.Format(error: message: 0, code: 10086, 响应的结果不是正确的json格式); catch (WebException ex) if (ex.Status = WebExceptionStatus.ProtocolError) HttpStatusCode errorCode = (HttpWebResponse)ex.Response).StatusCode; string statusDescription = (HttpWebResponse)ex.Response).StatusDescription; using (StreamReader sr = new StreamReader(HttpWebResponse)ex.Response).GetResponseStream(), System.Text.Encoding.UTF8) resultJson = sr.ReadToEnd(); /errcode:404,errmsg:request api doesnt exist Dictionary dict = JsonToDictionary(resultJson); string errCode = 10086; string errMsg = 发送推送的请求地址不存在或无法连接; if (dict.ContainsKey(errcode) errCode = dicterrcode.ToString(); if (dict.ContainsKey(errmsg) errMsg = dicterrmsg.ToString(); resultJson = string.Format(error: message: 0, code: 1, errMsg, errCode); else /这里一定是error作为键名(自定义错误号10086),和极光推送失败时的json格式保持一致 如 error: message: Missing parameter, code: 1002 resultJson = string.Format(error: message: 0, code: 10086, ex.Message.Replace(, ).Replace(, ); catch (System.Exception ex) resultJson = string.Format(error: message: 0, code: 10086, ex.Message.Replace(, ).Replace(, ); finally if (response != null) response.Close(); if (myReq != null) myReq.Abort(); return resultJson; / / 通过用户名AppKey和密码获取验证码 / / private string GetBase64Auth() string str = this.AppKey + : + this.MasterSecret; byte bytes = Encoding.Default.GetBytes(str); return Convert.ToBase64String(bytes); / / 发送推送请求到JPush / / POST或GET / 请求的json参数,一般由Platform(平台)、Audience(设备对象标识)、Notification(通知)、Message(自定义消息)、Options(推送可选项)组成 / public string SendRequest(String method, String reqParams) string auth = GetBase64Auth(); return SendRequest(method, this.RequestUrl, auth, reqParams); / / 发送Post请求 / / 请求的json参数,一般由Platform(平台)、Audience(设备对象标识)、Notification(通知)、Message(自定义消息)、Options(推送可选项)组成 / public string SendPostRequest(String reqParams) string auth = GetBase64Auth(); return SendRequest(POST, this.RequestUrl, auth, reqParams); / / 发送Get请求 / / 请求的json参数,一般由Platform(平台)、Audience(设备对象标识)、Notification(通知)、Message(自定义消息)、Options(推送可选项)组成 / public string SendGetRequest(String reqParams) string auth = GetBase64Auth(); return SendRequest(GET, this.RequestUrl, auth, reqParams); /* * 生成唯一的sendNo的方法: 取序列号 * 查看返回结果的方法 */ / / 查询推送的结果 / / 生成的json信息唯一id / public string GetReceivedResult(String msg_ids) string url = this.ReceivedUrl + ?msg_ids= + msg_ids; String auth = GetBase64Auth(); return SendRequest(GET, url, auth, null); ; /* * 1.正确时返回结果sendno:123456,msg_id:1799597405 * 或者 sendno:0,msg_id:351403900 * 2.入参json完全正确,但找不到要到达的设备。错误时:返回 * msg_id: 3125719446, error: message: cannot find user by this audience, code: 1011 * 3.传入空字符串 或者 非json格式,或者没有必须的选项:error: message: Missing parameter, code: 1002 * 传入的键(键区分大小写)、值不符合要求 error: message: Audience value must be JSON Array format!, code: 1003 */ / / 将返回的json转换为Hashtable对象 / / / public Hashtable JsonToHashtable(string jsonString) /* * 正确时返回结果sendno:123456,msg_id:1799597405 * sendno:0,msg_id:351403900 * 入参json完全正确,但找不到要到达的设备。错误时:返回 msg_id: 3125719446, error: message: cannot find user by this audience, code: 1011 * 传入空字符串 或者 非json格式,或者没有必须的选项:error: message: Missing parameter, code: 1002 * 传入的键值不符合要求 error: message: Audience value must be JSON Array format!, code: 1003 键区分大小写 */ Hashtable ht = new Hashtable(); object json = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString); /返回的结果一定是一个json对象 Newtonsoft.Json.Linq.JObject jsonObject = json as Newtonsoft.Json.Linq.JObject; if (jsonObject = null) return ht; foreach (Newtonsoft.Json.Linq.JProperty jProperty in jsonObject.Properties() Newtonsoft.Json.Linq.JToken jToken = jProperty.Value; string value = ; if (jToken != null) value = jToken.ToString(); ht.Add(jProperty.Name, value); return ht; / / 根据json返回的结果判断是否推送成功 / / 响应的json / 错误信息 / 错误号 / public bool IsSuccess(string jsonString, out string errorMessage, out string errorCode) Hashtable ht = JsonToHashtable(jsonString); errorMessage = ; errorCode = ; foreach (string key in ht.Keys) /如果存在error键,说明推送出错 if (key = error) string errJson = htkey.ToString(); Hashtable htError = JsonToHashtable(errJson); errorMessage = htErrormessage.ToString(); errorCode = htErrorcode.ToString(); return false; return true; / / 根据返回的响应json来判断推送是否成功,成功时记录sendno与msg_id。 / 失败时记录错误信息errorMessage、错误号errCode等 / / 响应的json / 错误信息 / 错误号 / 用户自定义的推送编号(从序列号中获取),不设置则为0,成功后返回该编号 / 极光服务器处理后返回的信息编号 / public bool IsSuccess(string jsonString, out string errorMessage, out string errorCode, out string sendno, out string msg_id) bool result = IsSuccess(jsonString, out errorMessage, out errorCode); Hashtable ht = JsonToHashtable(jsonString); sendno = ; msg_id = ; if (result) /推送成功时,只有键sendno、msg_id sendno = htsendno.ToString(); msg_id = htmsg_id.ToString(); else /如果失败时存在msg_id键,则记录msg_id的值 if (ht.ContainsKey(msg_id) msg_id = htmsg_id.ToString(); return result; / / 将返回的json转换为字典Dictionary对象 / / / public Dictionary JsonToDictionary(string jsonString) Dictionary ht = new Dictionary(); object json = Newtonsoft.Json.JsonConvert.DeserializeObject(jsonString); /返回的结果一定是一个json对象 Newtonsoft.Json.Linq.JObject jsonObject = json as Newtonsoft.Json.Linq.JObject; if (jsonObject = null) return ht; foreach (Newtonsoft.Json.Linq.JProperty jProperty in jsonObject.Properties() Newtonsoft.Json.Linq.JToken jToken = jProperty.Value; string value = ; if (jToken != null) value = jToken.ToString(); ht.Add(jProperty.Name, value); return ht; JPushV2类代码using System;using System.Collections.Generic;using System.Linq;using System.Web;using System.Configuration;using System.Text;using System.Net;using System.IO;using System.Security.Cryptography;/* * 参考文档:/display/dev/Index 选择里面的:服务器端 API,Push-API-V3 * * 极光推送的网站的网址是:/ * 旧版本V2 /display/dev/Push+API+v2 * 最新版本V3 /display/dev/Push-API-v3 * * 其中服务端的接口以及示例代码都在这里:/display/dev/Server-SDKs*/ / 这个版本是Push-API-v2版本,只能用到2015-12-31,建议直接使用最新版v3/ post处理地址 :8800/v2/push/ public class JPushV2 / / Android ApiKey / private readonly string AppKey = ConfigurationManager.AppSettingsAppKey; / / Android密码 / private readonly string APIMasterSecret = ConfigurationManager.AppSettingsMasterSecret; / / Android极光推送:开始推送方法 / / 设备号 RV1D41L5F1T public void PushAndroid(string RegistrationID) try Random ran = new Random(); int sendno = ran.Next(1, 2100000000);/随机生成的一个编号 string app_key = AppKey; string masterSecret = APIMasterSecret; int receiver_type = 4;/接收者类型。2、指定的 tag。3、指定的 alias。4、广播:对 app_key 下的所有用户推送消息。5、根据 RegistrationID 进行推送。当前只是 Android SDK r1.6.0 版本支持 string receiver_value = RegistrationID; /* int msg_type = 1;/1、通知 2、自定义消息(只有 Android 支持) /通过json来推送消息内容。title-标题 content-推送的内容 string Title = 要推送的标题; string Content = 要推送的内容; string msg_content = n_builder_id:00,n_title: + Title + ,n_content: + Content + ;/消息内容 */ /* 当调用参数 msg_type = 1(通知) 时,msg_content JSON 要求: Key名称 是否必须 Value内容说明 n_builder_id 可选 1-1000的数值,不填则默认为 0,使用 极光Push SDK 的默认通知样式。只有 Android 支持这个参数。 n_title 可选 通知标题。不填则默认使用该应用的名称。只有 Android支持这个参数。 n_content 必须 通知内容。 n_extras 可选 通知附加参数。JSON格式。客户端可取得全部内容。 */ int msg_type = 2;/1、通知 2、自定义消息(只有 Android 支持) /通过json来推送消息内容。title-标题 content-推送的内容 string msg_content = message:xxxx12344554;/消息内容 /*当调用参数 msg_type = 2(自定义消息) 时,msg_content JSON 要求:Key名称 是否必须 Value内容说明message 必须 自定义消息的内容。content_type 可选 message 字段里的内容类型。用于特定的 message 内容解析title 可选 消息标题extras 可选 原样返回,JSON 格式的更多的附属信息 */ string platform = android;/目标用户终端手机的平台类型,如: android, ios 多个请使用逗号分隔。 string verification_code = GetMD5Str(sendno.ToString(), receiver_type.ToString(), receiver_value, masterSecret);/验证串,用于校验发送的合法性。MD5 /* string postData = sendno= + sendno; postData += (&app_key= + app_key); postData += (&masterSecret= + masterSecret); postData += (&receiver_type= + receiver_type); postData += (&receiver_value= + receiver_value); postData += (&msg_type= + msg_type); postData += (&msg_content= + msg_content); postData += (&platform= + platform); postData += (&verification_code= + verification_code); */ string postData = sendno= + sendno; postData += (&app_key= + app_key); /postData += (&masterSecret= + masterSecret); postData += (&receiver_type= + receiver_type); postData += (&receiver_value= + receiver_value); postData += (&verification_code= + verification_code); postData += (&msg_type= + msg_type); postData += (&msg_content= + msg_content); postData += (&platform= + platform); /byte data = encoding.GetBytes(postData); byte data = Encoding.UTF8.GetBytes(postData); string resCode = GetPostRequest(data);/调用极光的接口获取返回值 HttpContext.Current.Response.Write(resCode); JpushMsg msg = Newtonsoft.Json.JsonConvert.DeserializeObject(resCode);/定义一个JpushMsg类,包含返回值信息,将返回的json格式字符串转成JpushMsg对象 /* 失败json:sendno:344076014,msg_id:2554996103,errcode:1011,errmsg:cannot find user by this audience 成功json:sendno:480383770,msg_id:847350150,errcode:0,errmsg:Succeed * 发送自定义消息时:sendno:1344179834,errcode:1003,errmsg:msg_content should be JSON format sendno:151526149,msg_id:363593
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2026年幼儿园师德师风学习笔记与心得撰写课件
- 2026年小学教职工师德师风年度总结表彰课件
- 企业新人快速适应岗位能力提升课程
- 2027年伤口换药技术培训
- 树林征收补偿方案范本
- 智能生产线集成调试与运行课件 ABB工业机器人基础认知
- 2026年中秋节假期大学兼职防骗警示课
- 2026 年中秋假期:假期错题复盘巩固学习课件
- 2026 年中秋假期:幼儿园中秋家国团圆主题学习课件
- 临床慢性支气管炎规范化诊疗与预防
- 煤矿一通三防专项培训
- 高速公路护坡劳务合同
- T/CCMA 0137-2022防撞缓冲车
- 企业禁化武管理制度
- B超室管理制度
- 小儿推拿(大全)课件
- 高三物理一轮复习计划:重点与难点分析
- 《混凝土结构设计原理》全套教学课件
- 2024年贵阳市中考语文试题及答案
- (1000题)中级消防设施操作员模拟试题及答案
- 堤防波浪壅高、爬高计算表格
评论
0/150
提交评论