Browse Source

封装阿里云消息推送

lcl 9 months ago
parent
commit
2c86946d48
5 changed files with 94 additions and 8 deletions
  1. 1 0
      AppStart/StartHelper.cs
  2. 1 1
      Controllers/HomeController.cs
  3. 1 1
      Startup.cs
  4. 23 6
      Util/Aliyun/AliyunPush.cs
  5. 68 0
      Util/Queue/AliyunPushHelper.cs

+ 1 - 0
AppStart/StartHelper.cs

@@ -15,6 +15,7 @@
                 SourceHelper.Instance.Start(); //获取原始数据队列
                 PushHelper.Instance.Start(); //推送队列
                 RePushHelper.Instance.Start(); //重新推送队列
+                AliyunPushHelper.Instance.Start(); //阿里云消息推送
 
                 // DefaultHelper.Instance.Start(); //队列程序
                 // ......其他队列程序

+ 1 - 1
Controllers/HomeController.cs

@@ -149,7 +149,7 @@ namespace MySystem.Controllers
 
         public string push()
         {
-            AliyunPush.Push("测试测试", "哇哈哈哈哈哈哈");
+            AliyunPush.Push("推送消息", "客小爽推送功能即将上线");
             return "ok";
         }
     }

+ 1 - 1
Startup.cs

@@ -100,7 +100,7 @@ namespace MySystem
                     pattern: "{controller=Home}/{action=Index}/{Id?}");
             });
 
-            // StartHelper.Instance.Start(); //开启线程
+            StartHelper.Instance.Start(); //开启线程
         }
         
     }

+ 23 - 6
Util/Aliyun/AliyunPush.cs

@@ -10,8 +10,8 @@ namespace MySystem
 {
     public class AliyunPush
     {
-        private static string AccessKeyID = "LTAImYRe25JQ5nr8";
-        private static string AccessKeySecret = "znOWxVGLnKl8KHlPSIKruYC3C1HYIy";
+        private static string AccessKeyID = "LTAI5tGH621tQ3FVd3jXYUEx";
+        private static string AccessKeySecret = "SDjL74Lk9FUp8VPKl4YYcsbY7MIkRr";
 
         /**
          * 使用AK&SK初始化账号Client
@@ -25,16 +25,16 @@ namespace MySystem
             AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
             {
                 // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
-                AccessKeyId = Environment.GetEnvironmentVariable(AccessKeyID),
+                AccessKeyId = AccessKeyID, //Environment.GetEnvironmentVariable(AccessKeyID),
                 // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
-                AccessKeySecret = Environment.GetEnvironmentVariable(AccessKeySecret),
+                AccessKeySecret = AccessKeySecret, //Environment.GetEnvironmentVariable(AccessKeySecret),
             };
             // Endpoint 请参考 https://api.aliyun.com/product/Push
             config.Endpoint = "cloudpush.aliyuncs.com";
             return new AlibabaCloud.SDK.Push20160801.Client(config);
         }
 
-        public static string Push(string Title, string Body)
+        public static string Push(string Account, string Title, string Body)
         {
             AlibabaCloud.SDK.Push20160801.Client client = CreateClient();
             AlibabaCloud.SDK.Push20160801.Models.PushRequest request = new AlibabaCloud.SDK.Push20160801.Models.PushRequest
@@ -46,7 +46,7 @@ namespace MySystem
                 IOSRemind = true,
                 AndroidRemind = true,
                 Target = "ACCOUNT",
-                TargetValue = "14781419364",
+                TargetValue = Account,
                 Title = Title,
                 Body = Body,
                 IOSRemindBody = Body,
@@ -57,5 +57,22 @@ namespace MySystem
             AlibabaCloud.SDK.Push20160801.Models.PushResponse response = client.Push(request);
             return AlibabaCloud.TeaUtil.Common.ToJSONString(response.Body.ToMap());
         }
+
+
+        public static string IosPush(string Account, string Title, string Body)
+        {
+            AlibabaCloud.SDK.Push20160801.Client client = CreateClient();
+            AlibabaCloud.SDK.Push20160801.Models.PushNoticeToiOSRequest request = new AlibabaCloud.SDK.Push20160801.Models.PushNoticeToiOSRequest
+            {
+                AppKey = 333673916,
+                Target = "ACCOUNT",
+                TargetValue = Account,
+                Title = Title,
+                Body = Body,
+                ApnsEnv = Library.ConfigurationManager.EnvironmentFlag == 2 ? "DEV" : "PRODUCTION",
+            };
+            AlibabaCloud.SDK.Push20160801.Models.PushNoticeToiOSResponse response = client.PushNoticeToiOS(request);
+            return AlibabaCloud.TeaUtil.Common.ToJSONString(response.Body.ToMap());
+        }
     }
 }

+ 68 - 0
Util/Queue/AliyunPushHelper.cs

@@ -0,0 +1,68 @@
+using System;
+using System.Linq;
+using System.Data;
+using System.Threading;
+using Library;
+using LitJson;
+using MySystem.Models.Push;
+using System.Collections.Generic;
+
+namespace MySystem
+{   
+    public class AliyunPushHelper
+    {
+        public readonly static AliyunPushHelper Instance = new AliyunPushHelper();
+        private AliyunPushHelper()
+        {
+        }
+
+        public void Start()//启动
+        {
+            Thread thread = new Thread(threadStart);
+            thread.IsBackground = true;
+            thread.Start();
+        }
+
+        private void threadStart()
+        {
+            while (true)
+            {
+                string content = RedisDbconn.Instance.RPop<string>("AliyunPushQueue");
+                if (!string.IsNullOrEmpty(content))
+                {
+                    try
+                    {
+                        DoSomeThing(content);
+                    }
+                    catch (Exception ex)
+                    {
+                        LogHelper.Instance.WriteLog(DateTime.Now.ToString() + "\n" + content + "\n" + ex, "SLS日志异常");
+                    }
+                }
+                else
+                {
+                    Thread.Sleep(5000);
+                }
+            }
+        }
+
+        //要执行的方法
+        public void DoSomeThing(string content)
+        {
+            JsonData data = JsonMapper.ToObject(content);
+            string Account = data["Account"].ToString();
+            string Device = data["Device"].ToString();
+            string Title = data["Title"].ToString();
+            string Body = data["Body"].ToString();
+            if(Device == "IOS")
+            {
+                AliyunPush.IosPush(Account, Title, Body);
+            }
+            else
+            {
+                AliyunPush.Push(Account, Title, Body);
+            }
+        }
+        
+    }
+}