|
@@ -2,323 +2,60 @@
|
|
|
using System.Collections.Generic;
|
|
|
using System.Linq;
|
|
|
using System.Web;
|
|
|
-using Aliyun.Acs.Push.Model.V20160801;
|
|
|
-using Aliyun.Acs.Push.Transform.V20160801;
|
|
|
-using Aliyun.Acs.Core;
|
|
|
-using Aliyun.Acs.Core.Exceptions;
|
|
|
-using Aliyun.Acs.Core.Profile;
|
|
|
-//using MySystem.Models;
|
|
|
using Library;
|
|
|
+using Tea;
|
|
|
+using Tea.Utils;
|
|
|
|
|
|
namespace MySystem
|
|
|
{
|
|
|
public class AliyunPush
|
|
|
{
|
|
|
- private string AccessKeyID = "LTAImYRe25JQ5nr8";
|
|
|
- private string AccessKeySecret = "znOWxVGLnKl8KHlPSIKruYC3C1HYIy";
|
|
|
-
|
|
|
- public void PushMessageToAndroid()
|
|
|
- {
|
|
|
- IClientProfile clientProfile = DefaultProfile.GetProfile("cn-hangzhou", AccessKeyID, AccessKeySecret);
|
|
|
- DefaultAcsClient client = new DefaultAcsClient(clientProfile);
|
|
|
- PushMessageToAndroidRequest request = new PushMessageToAndroidRequest();
|
|
|
- request.AppKey = 24566887;
|
|
|
- request.Target = "ALL";//推送目标: DEVICE:按设备推送 ALIAS : 按别名推送 ACCOUNT:按帐号推送 TAG:按标签推送; ALL: 广播推送
|
|
|
- request.TargetValue = "All";////根据Target来设定,如Target=DEVICE, 则对应的值为 设备id1,设备id2. 多个值使用逗号分隔.(帐号与设备一次最多100)
|
|
|
- request.Title = "android title";
|
|
|
- request.Body = "android body";
|
|
|
- try
|
|
|
- {
|
|
|
- PushMessageToAndroidResponse response = client.GetAcsResponse(request);
|
|
|
- Console.WriteLine("RequestId:" + response.RequestId);
|
|
|
- Console.WriteLine("ResponseId:" + response.MessageId);
|
|
|
- Console.ReadLine();
|
|
|
- }
|
|
|
- catch (ServerException e)
|
|
|
- {
|
|
|
- Console.WriteLine(e.ErrorCode);
|
|
|
- Console.WriteLine(e.ErrorMessage);
|
|
|
- Console.ReadLine();
|
|
|
- }
|
|
|
- catch (ClientException e)
|
|
|
- {
|
|
|
- Console.WriteLine(e.ErrorCode);
|
|
|
- Console.WriteLine(e.ErrorMessage);
|
|
|
- Console.ReadLine();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void PushMessageToiOS()
|
|
|
- {
|
|
|
- IClientProfile clientProfile = DefaultProfile.GetProfile("cn-hangzhou", AccessKeyID, AccessKeySecret);
|
|
|
- DefaultAcsClient client = new DefaultAcsClient(clientProfile);
|
|
|
- PushMessageToiOSRequest request = new PushMessageToiOSRequest();
|
|
|
- request.AppKey = 24566887;
|
|
|
- request.Target = "ALL";//推送目标: DEVICE:按设备推送 ALIAS : 按别名推送 ACCOUNT:按帐号推送 TAG:按标签推送; ALL: 广播推送
|
|
|
- request.TargetValue = "All";//根据Target来设定,如Target=DEVICE, 则对应的值为 设备id1,设备id2. 多个值使用逗号分隔.(帐号与设备一次最多100个)
|
|
|
- request.Title = "iOS Title";
|
|
|
- request.Body = "iOS Body";
|
|
|
- try
|
|
|
- {
|
|
|
- PushMessageToiOSResponse response = client.GetAcsResponse(request);
|
|
|
- Console.WriteLine("RequestId:" + response.RequestId);
|
|
|
- Console.WriteLine("ResponseId:" + response.MessageId);
|
|
|
- Console.ReadLine();
|
|
|
- }
|
|
|
- catch (ServerException e)
|
|
|
- {
|
|
|
- Console.WriteLine(e.ErrorCode);
|
|
|
- Console.WriteLine(e.ErrorMessage);
|
|
|
- Console.ReadLine();
|
|
|
- }
|
|
|
- catch (ClientException e)
|
|
|
- {
|
|
|
- Console.WriteLine(e.ErrorCode);
|
|
|
- Console.WriteLine(e.ErrorMessage);
|
|
|
- Console.ReadLine();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void PushNoticeToAndroid()
|
|
|
- {
|
|
|
- IClientProfile clientProfile = DefaultProfile.GetProfile("cn-hangzhou", AccessKeyID, AccessKeySecret);
|
|
|
- DefaultAcsClient client = new DefaultAcsClient(clientProfile);
|
|
|
- PushNoticeToAndroidRequest request = new PushNoticeToAndroidRequest();
|
|
|
- request.AppKey = 24566887;
|
|
|
- request.Target = "ALL";//推送目标: DEVICE:按设备推送 ALIAS : 按别名推送 ACCOUNT:按帐号推送 TAG:按标签推送; ALL: 广播推送
|
|
|
- request.TargetValue = "all";//根据Target来设定,如Target=DEVICE, 则对应的值为 设备id1,设备id2. 多个值使用逗号分隔.(帐号与设备一次最多100个)
|
|
|
- request.Title = "android notice title";
|
|
|
- request.Body = "android notice body";
|
|
|
- request.ExtParameters = "{\"Url\":\"http://www.yunmuit.com/\"}";
|
|
|
- try
|
|
|
- {
|
|
|
- PushNoticeToAndroidResponse response = client.GetAcsResponse(request);
|
|
|
- Console.WriteLine("RequestId:" + response.RequestId);
|
|
|
- Console.WriteLine("ResponseId:" + response.MessageId);
|
|
|
- Console.ReadLine();
|
|
|
- }
|
|
|
- catch (ServerException e)
|
|
|
- {
|
|
|
- Console.WriteLine(e.ErrorCode);
|
|
|
- Console.WriteLine(e.ErrorMessage);
|
|
|
- Console.ReadLine();
|
|
|
- }
|
|
|
- catch (ClientException e)
|
|
|
- {
|
|
|
- Console.WriteLine(e.ErrorCode);
|
|
|
- Console.WriteLine(e.ErrorMessage);
|
|
|
- Console.ReadLine();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public void PushNoticeToiOS()
|
|
|
- {
|
|
|
- IClientProfile clientProfile = DefaultProfile.GetProfile("cn-hangzhou", AccessKeyID, AccessKeySecret);
|
|
|
- DefaultAcsClient client = new DefaultAcsClient(clientProfile);
|
|
|
- PushNoticeToiOSRequest request = new PushNoticeToiOSRequest();
|
|
|
- request.AppKey = 24566887;
|
|
|
- // iOS的通知是通过APNS中心来发送的,需要填写对应的环境信息. DEV:表示开发环境, PRODUCT: 表示生产环境
|
|
|
- request.ApnsEnv = "DEV";
|
|
|
- request.Target = "ALL";
|
|
|
- request.TargetValue = "ALL";
|
|
|
- request.Title = "test";
|
|
|
- request.Body = "testg";
|
|
|
- request.ExtParameters = "{\"Url\":\"http://www.yunmuit.com/\"}";
|
|
|
- try
|
|
|
- {
|
|
|
- PushNoticeToiOSResponse response = client.GetAcsResponse(request);
|
|
|
- Console.WriteLine("RequestId:" + response.RequestId);
|
|
|
- Console.WriteLine("ResponseId:" + response.MessageId);
|
|
|
- Console.ReadLine();
|
|
|
- }
|
|
|
- catch (ServerException e)
|
|
|
- {
|
|
|
- Console.WriteLine(e.ErrorCode);
|
|
|
- Console.WriteLine(e.ErrorMessage);
|
|
|
- Console.ReadLine();
|
|
|
- }
|
|
|
- catch (ClientException e)
|
|
|
- {
|
|
|
- Console.WriteLine(e.ErrorCode);
|
|
|
- Console.WriteLine(e.ErrorMessage);
|
|
|
- Console.ReadLine();
|
|
|
- }
|
|
|
- }
|
|
|
-
|
|
|
- public string Push(string Title, string Body, string Url, string PushType = "NOTICE", string DeviceType = "ALL", string DeviceList = "", bool Silent = false, String pushTime = "")
|
|
|
+ private static string AccessKeyID = "LTAImYRe25JQ5nr8";
|
|
|
+ private static string AccessKeySecret = "znOWxVGLnKl8KHlPSIKruYC3C1HYIy";
|
|
|
+
|
|
|
+ /**
|
|
|
+ * 使用AK&SK初始化账号Client
|
|
|
+ * @return Client
|
|
|
+ * @throws Exception
|
|
|
+ */
|
|
|
+ public static AlibabaCloud.SDK.Push20160801.Client CreateClient()
|
|
|
{
|
|
|
- IClientProfile clientProfile = DefaultProfile.GetProfile("cn-hangzhou", AccessKeyID, AccessKeySecret);
|
|
|
- DefaultAcsClient client = new DefaultAcsClient(clientProfile);
|
|
|
- PushRequest request = new PushRequest();
|
|
|
-
|
|
|
- // 推送目标
|
|
|
- if (DeviceType == "ANDROID")
|
|
|
- {
|
|
|
- request.AppKey = 27532904;
|
|
|
- }
|
|
|
- else if (DeviceType == "iOS")
|
|
|
- {
|
|
|
- request.AppKey = 27536906;
|
|
|
- }
|
|
|
- if (string.IsNullOrEmpty(DeviceList))
|
|
|
- {
|
|
|
- //推送目标: DEVICE:按设备推送 ALIAS : 按别名推送 ACCOUNT:按帐号推送 TAG:按标签推送; ALL: 广播推送
|
|
|
- request.Target = "ALL";
|
|
|
- //根据Target来设定,如Target=DEVICE, 则对应的值为 设备id1,设备id2. 多个值使用逗号分隔.(帐号与设备有一次最多100个的限制)
|
|
|
- request.TargetValue = "All";
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- request.Target = "DEVICE";
|
|
|
- request.TargetValue = DeviceList;
|
|
|
- }
|
|
|
- //消息类型 MESSAGE NOTICE
|
|
|
- request.PushType = PushType;
|
|
|
- //设备类型 ANDROID iOS ALL.
|
|
|
- request.DeviceType = DeviceType;
|
|
|
- // 消息的标题
|
|
|
- request.Title = Title;
|
|
|
- // 消息的内容
|
|
|
- request.Body = Body;
|
|
|
-
|
|
|
- // 推送配置: iOS
|
|
|
- // iOS应用图标右上角角标
|
|
|
- //request.IOSBadge = 50;
|
|
|
- //开启静默通知
|
|
|
- request.IOSSilentNotification = Silent;
|
|
|
- // iOS通知声音
|
|
|
- if (Silent)
|
|
|
- {
|
|
|
- request.IOSMusic = "";
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- request.IOSMusic = "default";
|
|
|
- }
|
|
|
- //iOS10通知副标题的内容
|
|
|
- request.IOSSubtitle = "";
|
|
|
- //指定iOS10通知Category
|
|
|
- request.IOSNotificationCategory = "iOS10 Notification Category";
|
|
|
- //是否允许扩展iOS通知内容
|
|
|
- request.IOSMutableContent = true;
|
|
|
- //iOS的通知是通过APNs中心来发送的,需要填写对应的环境信息。"DEV" : 表示开发环境 "PRODUCT" : 表示生产环境
|
|
|
- request.IOSApnsEnv = "PRODUCT";
|
|
|
- //消息推送时设备不在线(既与移动推送的服务端的长连接通道不通),则这条推送会做为通知,通过苹果的APNs通道送达一次。注意:离线消息转通知仅适用于生产环境
|
|
|
- request.IOSRemind = true;
|
|
|
- //iOS消息转通知时使用的iOS通知内容,仅当iOSApnsEnv=PRODUCT && iOSRemind为true时有效
|
|
|
- request.IOSRemindBody = Body;
|
|
|
- //自定义的kv结构,开发者扩展用 针对iOS设备
|
|
|
- string PageId = Url;
|
|
|
- string Params = "";
|
|
|
- if (Url.Contains("?"))
|
|
|
- {
|
|
|
- Params = Url.Split("?")[1];
|
|
|
- PageId = Url.Split("?")[0];
|
|
|
- }
|
|
|
- request.IOSExtParameters = "{\"Url\":\"" + PageId + "\",\"Params\":\"" + Params + "\",\"SoundType\":\"0\"}";
|
|
|
-
|
|
|
- // 推送配置: Android
|
|
|
- // 通知的提醒方式 "VIBRATE" : 震动 "SOUND" : 声音 "BOTH" : 声音和震动 NONE : 静音
|
|
|
- if (Silent)
|
|
|
- {
|
|
|
- request.AndroidNotifyType = "NONE";
|
|
|
- }
|
|
|
- else
|
|
|
- {
|
|
|
- request.AndroidNotifyType = "SOUND";
|
|
|
- }
|
|
|
- //通知栏自定义样式0-100
|
|
|
- request.AndroidNotificationBarType = 3;
|
|
|
- //通知栏显示优先级
|
|
|
- request.AndroidNotificationBarPriority = 0;
|
|
|
- //点击通知后动作 "APPLICATION" : 打开应用 "ACTIVITY" : 打开AndroidActivity "URL" : 打开URL "NONE" : 无跳转
|
|
|
- request.AndroidOpenType = "APPLICATION";
|
|
|
- //Android收到推送后打开对应的url,仅当AndroidOpenType="URL"有效
|
|
|
- //request.AndroidOpenUrl = "http://www.baidu.com";
|
|
|
- //设定通知打开的activity,仅当AndroidOpenType="Activity"有效
|
|
|
- //request.AndroidActivity = "com.alibaba.push2.demo.XiaoMiPushActivity";
|
|
|
-
|
|
|
- request.AndroidRemind = true;
|
|
|
- request.AndroidPopupActivity = "com.yunmuapp.yunmuapp.activity.WaitActivity";
|
|
|
- request.AndroidPopupTitle = "客小爽";
|
|
|
- request.AndroidPopupBody = Body;
|
|
|
- request.AndroidNotificationChannel = "1";
|
|
|
-
|
|
|
- //Android通知音乐
|
|
|
- request.AndroidMusic = "default";
|
|
|
- //设置该参数后启动小米托管弹窗功能,此处指定通知点击后跳转的Activity(托管弹窗的前提条件:1. 继承小米辅助通道;2. storeOffline设为true)
|
|
|
- request.AndroidXiaoMiActivity = "com.yunmuapp.yunmuapp.activity.WaitActivity";
|
|
|
- //小米弹窗标题
|
|
|
- request.AndroidXiaoMiNotifyTitle = "客小爽";
|
|
|
- //小米弹窗内容
|
|
|
- request.AndroidXiaoMiNotifyBody = Body;
|
|
|
- // 设定android类型设备通知的扩展属性
|
|
|
- request.AndroidExtParameters = "{\"Url\":\"" + PageId + "\",\"Params\":\"" + Params + "\",\"SoundType\":\"0\"}";
|
|
|
-
|
|
|
- // 推送控制
|
|
|
- //String pushTime = DateTime.UtcNow.AddSeconds(3).ToString("yyyy-MM-ddTHH\\:mm\\:ssZ");
|
|
|
- if (!string.IsNullOrEmpty(pushTime))
|
|
|
- {
|
|
|
- TimeSpan ts = DateTime.Parse(pushTime) - DateTime.Now;
|
|
|
- request.PushTime = DateTime.UtcNow.Add(ts).ToString("yyyy-MM-ddTHH\\:mm\\:ssZ");//延迟3秒发送
|
|
|
- }
|
|
|
- String expireTime = DateTime.UtcNow.AddDays(1).ToString("yyyy-MM-ddTHH\\:mm\\:ssZ");
|
|
|
- request.ExpireTime = expireTime;//设置过期时间为2天
|
|
|
- request.StoreOffline = true;
|
|
|
-
|
|
|
- string result = "";
|
|
|
- try
|
|
|
- {
|
|
|
- PushResponse response = client.GetAcsResponse(request);
|
|
|
- Console.WriteLine("RequestId:" + response.RequestId);
|
|
|
- Console.WriteLine("ResponseId:" + response.MessageId);
|
|
|
- Console.ReadLine();
|
|
|
- result = "1|" + response.MessageId;
|
|
|
- }
|
|
|
- catch (ServerException e)
|
|
|
- {
|
|
|
- Console.WriteLine(e.ErrorCode);
|
|
|
- Console.WriteLine(e.ErrorMessage);
|
|
|
- Console.ReadLine();
|
|
|
- function.WriteLog(e.ErrorCode, "阿里云推送异常");
|
|
|
- function.WriteLog(e.ErrorMessage, "阿里云推送异常");
|
|
|
- }
|
|
|
- catch (ClientException e)
|
|
|
- {
|
|
|
- Console.WriteLine(e.ErrorCode);
|
|
|
- Console.WriteLine(e.ErrorMessage);
|
|
|
- Console.ReadLine();
|
|
|
- function.WriteLog(e.ErrorCode, "阿里云推送异常");
|
|
|
- function.WriteLog(e.ErrorMessage, "阿里云推送异常");
|
|
|
- }
|
|
|
- return result;
|
|
|
+ // 工程代码泄露可能会导致 AccessKey 泄露,并威胁账号下所有资源的安全性。以下代码示例仅供参考。
|
|
|
+ // 建议使用更安全的 STS 方式,更多鉴权访问方式请参见:https://help.aliyun.com/document_detail/378671.html。
|
|
|
+ AlibabaCloud.OpenApiClient.Models.Config config = new AlibabaCloud.OpenApiClient.Models.Config
|
|
|
+ {
|
|
|
+ // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_ID。
|
|
|
+ AccessKeyId = Environment.GetEnvironmentVariable(AccessKeyID),
|
|
|
+ // 必填,请确保代码运行环境设置了环境变量 ALIBABA_CLOUD_ACCESS_KEY_SECRET。
|
|
|
+ AccessKeySecret = Environment.GetEnvironmentVariable(AccessKeySecret),
|
|
|
+ };
|
|
|
+ // Endpoint 请参考 https://api.aliyun.com/product/Push
|
|
|
+ config.Endpoint = "cloudpush.aliyuncs.com";
|
|
|
+ return new AlibabaCloud.SDK.Push20160801.Client(config);
|
|
|
}
|
|
|
|
|
|
- public void CancelPush(string msgid)
|
|
|
+ public static string Push(string Title, string Body)
|
|
|
{
|
|
|
- IClientProfile clientProfile = DefaultProfile.GetProfile("cn-hangzhou", AccessKeyID, AccessKeySecret);
|
|
|
- DefaultAcsClient client = new DefaultAcsClient(clientProfile);
|
|
|
- CancelPushRequest request = new CancelPushRequest();
|
|
|
- request.AppKey = 24566887;
|
|
|
- request.MessageId = msgid;
|
|
|
- try
|
|
|
- {
|
|
|
- CancelPushResponse response = client.GetAcsResponse(request);
|
|
|
- Console.WriteLine("RequestId:" + response.RequestId);
|
|
|
- Console.ReadLine();
|
|
|
- }
|
|
|
- catch (ServerException e)
|
|
|
- {
|
|
|
- Console.WriteLine(e.ErrorCode);
|
|
|
- Console.WriteLine(e.ErrorMessage);
|
|
|
- Console.ReadLine();
|
|
|
- }
|
|
|
- catch (ClientException e)
|
|
|
- {
|
|
|
- Console.WriteLine(e.ErrorCode);
|
|
|
- Console.WriteLine(e.ErrorMessage);
|
|
|
- Console.ReadLine();
|
|
|
- }
|
|
|
+ AlibabaCloud.SDK.Push20160801.Client client = CreateClient();
|
|
|
+ AlibabaCloud.SDK.Push20160801.Models.PushRequest request = new AlibabaCloud.SDK.Push20160801.Models.PushRequest
|
|
|
+ {
|
|
|
+ AppKey = 333673923,
|
|
|
+ PushType = "NOTICE",
|
|
|
+ DeviceType = "ANDROID",
|
|
|
+ StoreOffline = true,
|
|
|
+ IOSRemind = true,
|
|
|
+ AndroidRemind = true,
|
|
|
+ Target = "ACCOUNT",
|
|
|
+ TargetValue = "14781419364",
|
|
|
+ Title = Title,
|
|
|
+ Body = Body,
|
|
|
+ IOSRemindBody = Body,
|
|
|
+ AndroidPopupTitle = Title,
|
|
|
+ AndroidPopupBody = Body,
|
|
|
+ AndroidNotificationChannel = "1",
|
|
|
+ };
|
|
|
+ AlibabaCloud.SDK.Push20160801.Models.PushResponse response = client.Push(request);
|
|
|
+ return AlibabaCloud.TeaUtil.Common.ToJSONString(response.Body.ToMap());
|
|
|
}
|
|
|
}
|
|
|
}
|