C# 极光推送服务端代码

qq_29506003 2017-03-06 02:00:04




提示1003 参数不合法
...全文
1600 16 打赏 收藏 转发到动态 举报
写回复
用AI写文章
16 条回复
切换为时间正序
请发表友善的回复…
发表回复
海宏AA 2019-10-15
  • 打赏
  • 举报
回复
你好,请问,c#的winform怎么接收极光推送服务器发来的消息? -----------------------
引用 9 楼 娃都会打酱油了 的回复:
    public static class JPushHelper
    {
        private class JPushQueue
        {
            public PushMessageRequestV3 Request { get; set; }
            public LogWriter Log { get; set; }
        }
        private static readonly ConcurrentQueue<JPushQueue> Queue = new ConcurrentQueue<JPushQueue>();
        private static readonly JPushClientV3 Client;
        static JPushHelper()
        {
            bool testEnv;
            bool.TryParse(ConfigurationManager.AppSettings["JPushTestEnvironment"], out testEnv);
            Client = new JPushClientV3(ConfigurationManager.AppSettings[$"JPushAppKey"],
                ConfigurationManager.AppSettings[$"JPushSecretKey"], testEnv);
            Task.Run(() => { Execute(); });
        }
        private static void Execute()
        {
            while (true)
            {
                JPushQueue request;
                if (Queue.TryPeek(out request)
                    && Execute(request))
                {
                    while (!Queue.TryDequeue(out request))
                    {
                        //do nothing
                    }
                    continue;
                }
            }
        }
        private static bool Execute(JPushQueue request)
        {
            try
            {
                var response = Client.SendPushMessage(request.Request);
                if (request.Log != null)
                {
                    request.Log.Info(GetLogInfos(request.Request, response));
                }
                return response.ResponseCode == PushResponseCode.Succeed;
            }
            catch(Exception ex)
            {
                if (request.Log != null)
                {
                    string responseContent = string.Empty;
                    HttpOperationException webEx = ex as HttpOperationException;
                    if (webEx == null)
                    {
                        webEx = ex.InnerException as HttpOperationException;
                    }
                    if (webEx != null)
                    {
                        responseContent = webEx.ExceptionReference.ResponseText;
                    }
                    request.Log.Error($@"Exception:{ex}
ResponseContent:{responseContent}
推送数据:{JsonConvert.SerializeObject(request.Request)}");
                }
                return true;
            }
        }
        private static string GetLogInfos(PushMessageRequestV3 request, PushResponse response)
        {
            StringBuilder tmp = new StringBuilder();
            tmp.AppendLine("***********  Request  ***********");
            tmp.AppendLine(JsonConvert.SerializeObject(request));
            tmp.AppendLine("***********  Response  ***********");
            tmp.AppendLine(JsonConvert.SerializeObject(response));
            return tmp.ToString();
        }

        public static void Push(PushPlatform platform, Audience audience, Notification notification, AppMessage message, LogWriter log = null)
        {
            PushMessageRequestV3 request = new PushMessageRequestV3()
            {
                Platform = platform,
                AppMessage = message,
                Audience = audience,
                Notification = notification
            };
            Queue.Enqueue(new JPushQueue
            {
                Request = request,
                Log = log
            });
        }
    }
就这么简单啊,没啥实例了,这个是已经在线上运行了的
qq_23699085 2019-04-06
  • 打赏
  • 举报
回复
楼主实现没?
CaRrot_Love 2017-03-13
  • 打赏
  • 举报
回复



        /// <summary>
        /// JPushV3
        /// </summary>
        /// <param name="RegistrationID"></param>
        /// <param name="type"></param>
        /// <param name="content"></param>
        /// <param name="isType"></param>
        /// <returns></returns>
        public string JPush(string RegistrationID, string type, string content,int isType)//0默认全体 1个人
        {

            string app_key = string.Empty;
            string masterSecret = string.Empty;

            app_key = "";
            masterSecret = "";

            string postData = string.Empty;
            if (isType == 1)
            {
                postData = "{\"platform\":\"all\",\"audience\":{\"alias\":[" + RegistrationID + "]},\"message\":{\"msg_content\":\"" + content + "\",\"extras\":{\"pushType\":\"" + type + "\"}},\"options\":{\"apns_production\":true},\"notification\":{ \"android\":{\"alert\":\"" + content + "\"},\"ios\":{\"alert\":\"" + content + "\",\"sound\":\"default\",\"badge\":\"+1\"}}}";
            }
            else
            {
                postData = "{\"platform\":\"all\",\"audience\":\"all\",\"message\":{\"msg_content\":\"" + content + "\",\"extras\":{\"pushType\":\"" + type + "\"}},\"options\":{\"apns_production\":true},\"notification\":{ \"android\":{\"alert\":\"" + content + "\"},\"ios\":{\"alert\":\"" + content + "\",\"sound\":\"default\",\"badge\":\"+1\"}}}";
            }

            byte[] data = UTF8Encoding.UTF8.GetBytes(postData);
            HttpWebRequest myRequest = (HttpWebRequest)WebRequest.Create("https://api.jpush.cn/v3/push");

            myRequest.Method = "POST";//极光http请求方式为post  
            myRequest.ContentType = "application/json";//按照极光的要求  
            byte[] base64 = System.Text.Encoding.Default.GetBytes(app_key + ":" + masterSecret);
            myRequest.Headers.Add("Authorization", "Basic " + Convert.ToBase64String(base64));
            myRequest.ContentLength = data.Length;
            //System.GC.Collect();
            //myRequest.KeepAlive = false;
            Stream newStream = myRequest.GetRequestStream();
            // Send the data.  
            newStream.Write(data, 0, data.Length);
            newStream.Close();

            // Get response  
            var response = (HttpWebResponse)myRequest.GetResponse();
            using (var reader = new StreamReader(response.GetResponseStream(), Encoding.GetEncoding("UTF-8")))
            {
                string result = reader.ReadToEnd();
                reader.Close();
                response.Close();
                //myRequest.Abort();
                return result;
            }
        }
蜗牛超车 2017-03-11
  • 打赏
  • 举报
回复
用官方的内裤不是好了,真不知道你作什么
qq_29506003 2017-03-09
  • 打赏
  • 举报
回复
有谁写过调用极光的接口 的呢??、
  • 打赏
  • 举报
回复
类库就是上面4L那个链接啊,你通过nuget安装就行了 然后这个代码是简单的一个内存队列,只发一次,不管发不发成功
qq_29506003 2017-03-09
  • 打赏
  • 举报
回复
引用 9 楼 starfd 的回复:
    public static class JPushHelper
    {
        private class JPushQueue
        {
            public PushMessageRequestV3 Request { get; set; }
            public LogWriter Log { get; set; }
        }
        private static readonly ConcurrentQueue<JPushQueue> Queue = new ConcurrentQueue<JPushQueue>();
        private static readonly JPushClientV3 Client;
        static JPushHelper()
        {
            bool testEnv;
            bool.TryParse(ConfigurationManager.AppSettings["JPushTestEnvironment"], out testEnv);
            Client = new JPushClientV3(ConfigurationManager.AppSettings[$"JPushAppKey"],
                ConfigurationManager.AppSettings[$"JPushSecretKey"], testEnv);
            Task.Run(() => { Execute(); });
        }
        private static void Execute()
        {
            while (true)
            {
                JPushQueue request;
                if (Queue.TryPeek(out request)
                    && Execute(request))
                {
                    while (!Queue.TryDequeue(out request))
                    {
                        //do nothing
                    }
                    continue;
                }
            }
        }
        private static bool Execute(JPushQueue request)
        {
            try
            {
                var response = Client.SendPushMessage(request.Request);
                if (request.Log != null)
                {
                    request.Log.Info(GetLogInfos(request.Request, response));
                }
                return response.ResponseCode == PushResponseCode.Succeed;
            }
            catch(Exception ex)
            {
                if (request.Log != null)
                {
                    string responseContent = string.Empty;
                    HttpOperationException webEx = ex as HttpOperationException;
                    if (webEx == null)
                    {
                        webEx = ex.InnerException as HttpOperationException;
                    }
                    if (webEx != null)
                    {
                        responseContent = webEx.ExceptionReference.ResponseText;
                    }
                    request.Log.Error($@"Exception:{ex}
ResponseContent:{responseContent}
推送数据:{JsonConvert.SerializeObject(request.Request)}");
                }
                return true;
            }
        }
        private static string GetLogInfos(PushMessageRequestV3 request, PushResponse response)
        {
            StringBuilder tmp = new StringBuilder();
            tmp.AppendLine("***********  Request  ***********");
            tmp.AppendLine(JsonConvert.SerializeObject(request));
            tmp.AppendLine("***********  Response  ***********");
            tmp.AppendLine(JsonConvert.SerializeObject(response));
            return tmp.ToString();
        }

        public static void Push(PushPlatform platform, Audience audience, Notification notification, AppMessage message, LogWriter log = null)
        {
            PushMessageRequestV3 request = new PushMessageRequestV3()
            {
                Platform = platform,
                AppMessage = message,
                Audience = audience,
                Notification = notification
            };
            Queue.Enqueue(new JPushQueue
            {
                Request = request,
                Log = log
            });
        }
    }
就这么简单啊,没啥实例了,这个是已经在线上运行了的
应该还有一些类库什么的吧 我这边好多都得定义
  • 打赏
  • 举报
回复
    public static class JPushHelper
    {
        private class JPushQueue
        {
            public PushMessageRequestV3 Request { get; set; }
            public LogWriter Log { get; set; }
        }
        private static readonly ConcurrentQueue<JPushQueue> Queue = new ConcurrentQueue<JPushQueue>();
        private static readonly JPushClientV3 Client;
        static JPushHelper()
        {
            bool testEnv;
            bool.TryParse(ConfigurationManager.AppSettings["JPushTestEnvironment"], out testEnv);
            Client = new JPushClientV3(ConfigurationManager.AppSettings[$"JPushAppKey"],
                ConfigurationManager.AppSettings[$"JPushSecretKey"], testEnv);
            Task.Run(() => { Execute(); });
        }
        private static void Execute()
        {
            while (true)
            {
                JPushQueue request;
                if (Queue.TryPeek(out request)
                    && Execute(request))
                {
                    while (!Queue.TryDequeue(out request))
                    {
                        //do nothing
                    }
                    continue;
                }
            }
        }
        private static bool Execute(JPushQueue request)
        {
            try
            {
                var response = Client.SendPushMessage(request.Request);
                if (request.Log != null)
                {
                    request.Log.Info(GetLogInfos(request.Request, response));
                }
                return response.ResponseCode == PushResponseCode.Succeed;
            }
            catch(Exception ex)
            {
                if (request.Log != null)
                {
                    string responseContent = string.Empty;
                    HttpOperationException webEx = ex as HttpOperationException;
                    if (webEx == null)
                    {
                        webEx = ex.InnerException as HttpOperationException;
                    }
                    if (webEx != null)
                    {
                        responseContent = webEx.ExceptionReference.ResponseText;
                    }
                    request.Log.Error($@"Exception:{ex}
ResponseContent:{responseContent}
推送数据:{JsonConvert.SerializeObject(request.Request)}");
                }
                return true;
            }
        }
        private static string GetLogInfos(PushMessageRequestV3 request, PushResponse response)
        {
            StringBuilder tmp = new StringBuilder();
            tmp.AppendLine("***********  Request  ***********");
            tmp.AppendLine(JsonConvert.SerializeObject(request));
            tmp.AppendLine("***********  Response  ***********");
            tmp.AppendLine(JsonConvert.SerializeObject(response));
            return tmp.ToString();
        }

        public static void Push(PushPlatform platform, Audience audience, Notification notification, AppMessage message, LogWriter log = null)
        {
            PushMessageRequestV3 request = new PushMessageRequestV3()
            {
                Platform = platform,
                AppMessage = message,
                Audience = audience,
                Notification = notification
            };
            Queue.Enqueue(new JPushQueue
            {
                Request = request,
                Log = log
            });
        }
    }
就这么简单啊,没啥实例了,这个是已经在线上运行了的
qq_29506003 2017-03-06
  • 打赏
  • 举报
回复
引用 4 楼 starfd 的回复:
https://www.nuget.org/packages/JPush.NET/ 直接用这个dll就行了,官方的哪种不好用,大致就下面这种写法
            PushMessageRequestV3 request = new PushMessageRequestV3()
            {
                Platform = platform,
                AppMessage = message,
                Audience = audience,
                Notification = notification
            };
Client.SendPushMessage(request)
有具体的实例吗
qq_29506003 2017-03-06
  • 打赏
  • 举报
回复
引用 5 楼 diaodiaop 的回复:
官方不是提供c#的类库吗?为什么还要自己写...
官方给出的 是已经封装好的
qq_29506003 2017-03-06
  • 打赏
  • 举报
回复
引用 5 楼 diaodiaop 的回复:
官方不是提供c#的类库吗?为什么还要自己写...
引用 4 楼 starfd 的回复:
https://www.nuget.org/packages/JPush.NET/ 直接用这个dll就行了,官方的哪种不好用,大致就下面这种写法
            PushMessageRequestV3 request = new PushMessageRequestV3()
            {
                Platform = platform,
                AppMessage = message,
                Audience = audience,
                Notification = notification
            };
Client.SendPushMessage(request)
有没有具体点的案例呢
by_封爱 2017-03-06
  • 打赏
  • 举报
回复
官方不是提供c#的类库吗?为什么还要自己写...
  • 打赏
  • 举报
回复
https://www.nuget.org/packages/JPush.NET/ 直接用这个dll就行了,官方的哪种不好用,大致就下面这种写法
            PushMessageRequestV3 request = new PushMessageRequestV3()
            {
                Platform = platform,
                AppMessage = message,
                Audience = audience,
                Notification = notification
            };
Client.SendPushMessage(request)
qq_29506003 2017-03-06
  • 打赏
  • 举报
回复
引用 1 楼 shingoscar 的回复:
那就改成合法的
关键就是看不出来那边不合法
qq_29506003 2017-03-06
  • 打赏
  • 举报
回复
引用 楼主 qq_29506003 的回复:
提示1003 参数不合法
怎么修改呢 我看了半天没有看出来那边是不合法的
Poopaye 2017-03-06
  • 打赏
  • 举报
回复
那就改成合法的

62,052

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术交流专区
javascript云原生 企业社区
社区管理员
  • ASP.NET
  • .Net开发者社区
  • R小R
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

.NET 社区是一个围绕开源 .NET 的开放、热情、创新、包容的技术社区。社区致力于为广大 .NET 爱好者提供一个良好的知识共享、协同互助的 .NET 技术交流环境。我们尊重不同意见,支持健康理性的辩论和互动,反对歧视和攻击。

希望和大家一起共同营造一个活跃、友好的社区氛围。

试试用AI创作助手写篇文章吧