C# Jpush 极光推送消息推送

Posted dotNET跨平台

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# Jpush 极光推送消息推送相关的知识,希望对你有一定的参考价值。

简介

消息推送(Push)指运营人员通过自己的产品或第三方工具对用户移动设备进行的主动消息推送。用户可以在移动设备锁定屏幕和通知栏看到push消息通知,通知栏点击可唤起APP并去往相应页面。我们平时在锁屏上看到的微信消息等等都属于APP消息推送行列。使用极光推送, C# 服务端推送到 Demo App,android 手机收到推送,整理为十个步骤,使用十分钟左右,完成从注册账号到 Android 手机上的 Demo App 收到推送。

步骤

1.注册极光账号 注册页面:https://www.jiguang.cn/accounts/register/form

2.创建应用 控制台:https://www.jiguang.cn/dev/#/app/list

创建应用:https://www.jiguang.cn/dev/#/app/create

创建之后回到应用管理:https://www.jiguang.cn/dev/#/app/list

3.获取 AppKey 和 Master Secret 点击应用管理界面的应用详情 获取 AppKey 和 Master Secret

4.下载 Demo 在上一步骤的同一界面下载 Demo 点击扫描下载安装包

手机下载安装即可,安装好之后打开 Demo App。

5.下载 jpush-api-csharp-client 项目地址:https://github.com/jpush/jpush-api-csharp-client/releases

  1. VS 打开项目,安装依赖 NuGet 包管理工具会下载 jpush-api-csharp-client 和 Newtonsoft 依赖。

7.替换 AppKey 和 Master Secret

主要方法

添加标签

public Result AddDeviceTags(string userId, HashSet<string> tags)
        
            return SetDeviceTags(userId, tags, Action.AddDeviceTags);
        

移除标签

public Result RemoveDeviceTags(string userId, HashSet<string> tags)
        
            return SetDeviceTags(userId, tags, Action.RemoveDeviceTags);
        

添加别名

public void AddAlias(string registrationId, string alias)
        
            if (string.IsNullOrWhiteSpace(registrationId) || string.IsNullOrWhiteSpace(alias))
                throw new Exception("设备标识和别名不能为空。");
            var result = DeviceClient.UpdateDeviceInfo(registrationId, new DevicePayload  Alias = alias );
            if (result.StatusCode == HttpStatusCode.OK)
                return;
            var errorMsg =
                $"别名添加失败,HTTP 状态码:result.StatusCode" +
                $",返回信息:result.Content" +
                $",别名:alias,设备标识:registrationId";
            WriteErrorLog(errorMsg);
        

生成标签推送信息

private PushPayload PushPayloadForTag()
        
            var notification = GetNotification();
            SetiosSoundSilent(notification);
            if (Audiences.Count > 20)
            
                Audiences.RemoveRange(20, Audiences.Count - 20);
                WriteErrorLog("消息推送标签超过20个,自动取前20个进行推送。");
            
            return new PushPayload
            
                Platform = new List<string>  "android", "ios" ,
                Audience = new  tag = Audiences.ToArray() ,//"all",//
                Notification = notification,
                Options = new Options  TimeToLive = TimeToLive, IsApnsProduction = IsApnsProduction() 
            ;
        

发送消息推送

public bool Send()
        
            PushPayload payload;
            switch (PushType)
            
                case PushType.Tag:
                    if (Audiences == null || Audiences.Count == 0)
                        throw new Exception("推送目标集合不能为空。");
                    payload = PushPayloadForTag();
                    break;

                case PushType.Alias:
                    if (Audiences == null || Audiences.Count == 0)
                        throw new Exception("推送目标集合不能为空。");
                    payload = PushPayloadForAlias();
                    break;

                case PushType.All:
                    // 极光免费版限制了广播次数,每天10次,现改为标签推送代替
                    //payload = PushPayloadForAll();
                    //zsj 2021-01-19 先兼容下之前调用此处代码没给Category赋值的Category== ProgramCategory.None,后续排查完后这段代码这删掉
                    if (Category == ProgramCategory.Basketball || Category == ProgramCategory.None)
                        Audiences = new List<string>  UserBll.BroadcastTagBasketball ;
                    else if (Category == ProgramCategory.Football)
                        Audiences = new List<string>  UserBll.BroadcastTagFootball ;
                    else if (Category == ProgramCategory.ESports)
                        Audiences = new List<string>  UserBll.BroadcastTagESports ;
                    payload = PushPayloadForTag();
                    break;

                default:
                    return false;
            
            try
            
                //zsj 2021-05-31 计算推送前后的时间差
                DateTime dtNow = DateTime.Now;
                //  WriteErrorLog("极光开始推送,JPushClient,推送前时间:" + dtNow + ";ContentId[即AssociateId]=" + ContentId + ";Title=" + Title + ";Message=" + Message + ";ContentTitle=" + ContentTitle, Xmzy.Common.Tools.Log.LogSource.ApiExecute, "极光推送");
                if (payload.Options == null)
                
                    payload.Options = new Options()  TimeToLive = 60 * 60 * 3 ;
                
                else
                
                    payload.Options.TimeToLive = 60 * 60 * 3;
                

                if (isdisand == "0")
                
                    List<string> p = new List<string>();
                    p.Add("ios");
                    //["android", "ios","quickapp"]
                    payload.Platform = p.ToArray();
                    //  "platform": "all",
                

                var result = JPushClient.SendPush(payload);

                DateTime dtNow2 = DateTime.Now;
                TimeSpan ts = dtNow2 - dtNow;
                // WriteErrorLog("极光开始推送,JPushClient,推送后时间:" + dtNow2 + ";间隔相差" + ts.TotalSeconds + "秒" + ";ContentId[即AssociateId]=" + ContentId + ";Title=" + Title + ";Message=" + Message + ";ContentTitle=" + ContentTitle, Xmzy.Common.Tools.Log.LogSource.ApiExecute, "极光推送");

                _Logger.Error("payload------" + JsonConvert.SerializeObject(payload));

                _Logger.Error("result-----------" + JsonConvert.SerializeObject(result));

                if (result.StatusCode != HttpStatusCode.OK)
                
                    WriteErrorLog("消息推送失败,HTTP 状态码:" + result.StatusCode
                        + ",返回信息:" + result.Content + "。");
                
                return true;
            
            catch (Exception e)
            
                WriteErrorLog(e.Message);
                return false;
            
        

以上是关于C# Jpush 极光推送消息推送的主要内容,如果未能解决你的问题,请参考以下文章

APP的消息推送(极光推送)

#yyds干货盘点#手机APP消息推送极光推送jpush-php实例

Ionic下的Jpush消息推送与内容显示

极光推送收不到推送消息

IONIC集成jPush极光推送

极光推送 JPush 简介 集成