hbuilder APP服务器端(C#)推送

 实现推送有多种方法和技术手段,我这边是使用三方“个推”去实现对特定用户的推送。我自己是关联业务,对下一步任务代办人进行消息通知。

 

1 、个推账号申请和配置

  1.1、IOS需要推送证书 参考网址:http://www.applicationloader.net/blog/zh/397.html

  1.2 、"Hbuilder”“ 个推”配置参考:http://ask.dcloud.net.cn/article/34

2、代码处理

2.1 C#后端

  

  private static String HOST = "http://sdk.open.api.igexin.com/apiex.htm";
        //https的域名
        //private static String HOST = "https://api.getui.com/apiex.htm";
        private static String APPID = ConfigurationManager.AppSettings["TSAPPID"].ToString();//"djNkkiQUDN7fmNwS0Lhr1";
        private static String APPKEY = ConfigurationManager.AppSettings["TSAPPKEY"].ToString();//"FMxsRBtmx1As7wHtaPeb43";
        private static String MASTERSECRET = ConfigurationManager.AppSettings["TSMASTERSECRET"].ToString();//"3KKqkvwLzW8zrLmCvNC0S7";

        public static void GetClientid(string code, string title, string text)
        {
            WriteLog("*****************************APP信息推送*****************************************");
            WriteLog("用户:" + code);
            WriteLog(title + "内容:" + text);

            using (var db = new DbBase())
            {
                string sql = string.Format("select top 1 code,clientid,billDate,company from SYSTEM_PUSH_ALIAS where code=‘{0}‘  order by billDate desc", code);

                var dt = RepositoryBase.ExecuteDataTable(db, sql);
                if (dt.Rows.Count > 0)
                {
                    foreach (DataRow item in dt.Rows)
                    {
                        PushMessage(item["clientid"].ToString(), title, text);
                    }
                }
                else
                {

                    WriteLog("用户:" + code + " 无对应clientid");
                }
            }
        }

        public static object PushMessage(string CLIENTID, string title, string text)
        {
            return JObject.Parse(PushMessageToSingle(CLIENTID, title, text));
        }

        /// <summary>
        /// 用户对于的 推送CLIENTID
        /// </summary>
        /// <param name="CLIENTID"></param>
        private static string PushMessageToSingle(string CLIENTID, string title, string text)
        {

            IGtPush push = new IGtPush(HOST, APPKEY, MASTERSECRET);

            TransmissionTemplate template = TransmissionTemplateDemo(title, text);

            // 单推消息模型
            SingleMessage message = new SingleMessage();
            message.IsOffline = true;                         // 用户当前不在线时,是否离线存储,可选
            message.OfflineExpireTime = 1000 * 3600 * 12;            // 离线有效时间,单位为毫秒,可选
            message.Data = template;
            //判断是否客户端是否wifi环境下推送,2为4G/3G/2G,1为在WIFI环境下,0为不限制环境
            message.PushNetWorkType = 0;

            com.igetui.api.openservice.igetui.Target target = new com.igetui.api.openservice.igetui.Target();
            target.appId = APPID;
            target.clientId = CLIENTID;
            //target.alias = ALIAS;
            try
            {
                String pushResult = push.pushMessageToSingle(message, target);

                WriteLog("-----------------------------------------------");
                WriteLog("----------------服务端返回结果:" + pushResult);
                return pushResult;
            }
            catch (RequestException e)
            {
                String requestId = e.RequestId;
                //发送失败后的重发
                String pushResult = push.pushMessageToSingle(message, target, requestId);

                WriteLog("-----------------------------------------------");
                WriteLog("----------------服务端返回结果:" + pushResult);
                return pushResult;
            }
        }

        //通知透传模板动作内容
        public static NotificationTemplate NotificationTemplateDemo(string title, string text)
        {

            NotificationTemplate template = new NotificationTemplate();
            template.AppId = APPID;
            template.AppKey = APPKEY;
            //通知栏标题
            template.Title = title;
            //通知栏内容
            template.Text = text;
            //通知栏显示本地图片
            template.Logo = "";
            //通知栏显示网络图标
            template.LogoURL = "";
            //应用启动类型,1:强制应用启动  2:等待应用启动
            template.TransmissionType = "1";
            //透传内容
            template.TransmissionContent = text;
            //接收到消息是否响铃,true:响铃 false:不响铃
            template.IsRing = true;
            //接收到消息是否震动,true:震动 false:不震动
            template.IsVibrate = true;
            //接收到消息是否可清除,true:可清除 false:不可清除
            template.IsClearable = true;

            //APNPayload apnpayload = new APNPayload();
            //SimpleAlertMsg alertMsg = new SimpleAlertMsg(text);
            //apnpayload.AlertMsg = alertMsg;
            //// apnpayload.Badge = 11;
            //apnpayload.ContentAvailable = 1;
            //apnpayload.addCustomMsg("payload", "payload");

            //APN高级推送
            APNPayload apnpayload = new APNPayload();
            DictionaryAlertMsg alertMsg = new DictionaryAlertMsg();
            alertMsg.Body = text;
            alertMsg.ActionLocKey = "ActionLocKey";
            alertMsg.LocKey = "LocKey";
            alertMsg.addLocArg("LocArg");
            alertMsg.LaunchImage = "LaunchImage";
            //iOS8.2支持字段
            alertMsg.Title = title;
            alertMsg.TitleLocKey = "TitleLocKey";
            alertMsg.addTitleLocArg("TitleLocArg");

            apnpayload.AlertMsg = alertMsg;
            //apnpayload.Badge = 10;
            apnpayload.ContentAvailable = 1;
            //apnpayload.Category = "";
            //apnpayload.Sound = "test1.wav";
            apnpayload.addCustomMsg("payload", "payload");

            template.setAPNInfo(apnpayload);

            template.setAPNInfo(apnpayload);
            //设置通知定时展示时间,结束时间与开始时间相差需大于6分钟,消息推送后,客户端将在指定时间差内展示消息(误差6分钟)
            String begin = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            String end = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd HH:mm:ss");
            template.setDuration(begin, end);

            return template;
        }

        //透传模板动作内容
        public static TransmissionTemplate TransmissionTemplateDemo(string title, string text)
        {
            TransmissionTemplate template = new TransmissionTemplate();
            template.AppId = APPID;
            template.AppKey = APPKEY;
            //应用启动类型,1:强制应用启动 2:等待应用启动
            template.TransmissionType = "2";
            //透传内容
            template.TransmissionContent = "{\"title\":\"" + title + "\",\"content\":\"" + text + "\",\"payload\":\"payload\"}";
            //设置通知定时展示时间,结束时间与开始时间相差需大于6分钟,消息推送后,客户端将在指定时间差内展示消息(误差6分钟)
            //设置客户端展示时间

            //iOS简单推送
            APNPayload apnpayload = new APNPayload();
            SimpleAlertMsg alertMsg = new SimpleAlertMsg(text);
            apnpayload.AlertMsg = alertMsg;
            // apnpayload.Badge = 11;
            apnpayload.ContentAvailable = 1;
            //apnpayload.Category = "";
            apnpayload.Sound = "default";
            apnpayload.addCustomMsg("payload", "payload");
            template.setAPNInfo(apnpayload);
            //APN高级推送
            //APNPayload apnpayload = new APNPayload();
            //DictionaryAlertMsg alertMsg = new DictionaryAlertMsg();
            //apnpayload.ContentAvailable = 1;
            //alertMsg.Body = "您有订单需要审核";
            //alertMsg.ActionLocKey = "ActionLocKey";
            //alertMsg.LocKey = "LocKey";
            //alertMsg.addLocArg("LocArg");
            //alertMsg.LaunchImage = "LaunchImage";
            //iOS8.2支持字段
            //alertMsg.Title = "订单提醒";
            //alertMsg.TitleLocKey = "TitleLocKey";
            //alertMsg.addTitleLocArg("TitleLocArg");

            template.setAPNInfo(apnpayload);

            String begin = DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss");
            String end = DateTime.Now.AddDays(1).ToString("yyyy-MM-dd HH:mm:ss");
            template.setDuration(begin, end);

            return template;
        }

        private static void WriteLog(string log)
        {
            CommonHelper.WriteLog(log, "_pushLog.txt");
        }

2.2 hbuilder app端代码:

    登录后必须给每个用户绑定一个“clientId”,此ID要存储在服务器。在服务器给APP推送消息的时候需要更加用户信息找到“clientId”:

      

ClientInfo =plus.push.getClientInfo();
mui.getJSON(Url,{code:user.code,cli:ClientInfo.clientid},function(json){

    });

  

    IOS 应用在前台的时候,在服务器推送消息APP端是没有提示的。需要在代码上做些处理。在登录后的第一个页面添加西门监听事件:

if (mui.os.ios) {
			mui.plusReady(function(){
    			plus.push.addEventListener("receive", function( msg ) {
        			if (msg.payload !=null && msg.payload!="") {
            			plus.push.createMessage(msg.content)
        			}
    			}, false );

			});

		}

  

    

  

原文地址:https://www.cnblogs.com/jiezi/p/9565530.html

时间: 2024-11-07 11:26:27

hbuilder APP服务器端(C#)推送的相关文章

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

APP的消息推送,使用的第三方平台是极光推送 简单案例(以Thinkphp为例): 1.下载下载PHPSDK 2.把PHPSDK目录下的jpush-api-php-client-3.5.1\src\JPush,Jpush下全部文件复制到项目中:ThinkPHP\Library\Org\JPush 3.thinkphp中Org下面的文件会自动加载 $client = new \Org\Push\Client($app_key, $master_secret); $push = $client->p

springboot实现服务器端消息推送(websocket + sockjs + stomp)

服务器端推送技术在web开发中比较常用,可能早期很多人的解决方案是采用ajax向服务器轮询消息,这种方式的轮询频率不好控制,所以大大增加了服务器的压力,后来有了下面的方案:当客户端向服务器发送请求时,服务器端会抓住这个请求不放,等有数据更新的时候才返回给客户端,当客户端接收到数据后再次发送请求,周而复始,这样就大大减少了请求次数,减轻了服务器的压力,当前主要有SSE(Server Send Event 服务器端事件发送)的服务器端推送和基于Servlet3.0+异步方法特性实现的服务器端推送.而

android app 集成 信鸽推送

推送其实挺中意小米推送的,并经用户群占比还是比较大的,奈何拗不过php后端哥们的选型,就只好用信鸽推送了,期间接入过程中也是遇到不少问题,所以记录下来,以后如果还是用信鸽推送的话,估计看看以前的博客,也能少踩点坑. 因为最新版本是2.43,所以按照2.43的引入为准 1,导入jar包和so文件: 文件夹为信鸽推送必须的so文件: 2,针对so文件,gradle文件进行配置,生成第一张图里面的native_libs2的jar文件: 3,AndroidManifest.xml文件的配置,这个基本按照

使用pushmebaby测试app的远程推送功能

什么是远程消息推送功能 苹果给iOS和Mac添加了消息推送的功能,使得我们可以通过后台服务器给应用程序(APP)发送消息,不管APP是否正在使用,比如邮箱的来件提示功能.这项服务被称为Apple Push Notification service(APNs).里面一共涉及到四个角色:APP.设备.APNs和应用后台服务器(Provider),其中APP.后台服务器和APNs之间使用deviceToken唯一的标识一个用户. 推送服务的工作流程: APP向系统注册推送服务. 设备从APNs请求de

技术大佬告诉你:创业型APP如何选择推送平台

对于中小型APP开发团队,特别是创业型的APP开发者来说,选择一款小巧.适时而又能够精准消息推送SDK是一件很麻烦的事儿,相同的内容推送给所有终端用户,担心打扰用户.引起用户方案:而个性化的分类精准推送,又因为自身团队人少,运营负担很大不足以实现.那开发者怎么办? 目前,消息推送服务平台中普遍增加了用户筛选的功能,如个推.极光和刚刚面向开发者放了用户筛选功能的魔推等push服务都加入了精准用户筛选的功能和分类.应该说这几款消息推送服务都能显著的提高APP的用户活跃度,对次日的日活跃度也有积极的影

SpringBoot2.x服务器端主动推送技术

一.服务端推送常用技术介绍 服务端主流推送技术:websocket.SSE等 1.客户端轮询:ajax定时拉取后台数据 js   setInterval定时函数  +  ajax异步加载  定时向服务器发送请求 服务器压力会较大 2.服务端主动推送:websocket<推荐使用> 全双工即双向通讯,本质上是一个额外的TCP连接,建立和关闭时握手使用http协议,其他数据传输不使用http协议,更加复杂一些,适用于需要进行复杂双向数据通讯的场景,支持大部分主流浏览器. 开发成本较高,适用性较好,

服务器端消息推送

在做微信公众开发时,你是否会遇到一种需求,在某一时刻向用户推送消息,比如向用户发送一条消息,通知用户相关信息,微信开发官方文档相对简洁,对于初学者较难理解,最近做开发,遇到了类似的需求,通过各方面的学习研究,写了一些代码,这些代码在项目中正常运行,各位可以参考一下.我提供的代码是基于 PHP 的,仅供参考. 首先,pushMessage 是推送消息的函数,$APPID 是公众平台的APPID,$APPSECRET是公众平台的APPSECRET function pushMessage($tous

Android 退出app,后台推送的服务也停止了,怎么可以做到不停止后台服务呢?

service粘性等的那4种方式试了,三星的可以,小米老款手机可以,新款不行,华为新款也不行,还有魅族什么的,都不行,新款的手机上都有一个安全中心,只有在安全中心里面添加上允许app自启动才可以 怎么破? 1.用jpush的这个问题就没得破了 能做的措施他们都做了 定制的rom会有这个问题 没得破 如果公司有钱可以去找手机厂家商务谈 开通白名单 就不会杀你们了 2.解决思路: 设置权限最高 service设置独立进程 service启动后设置保持前台运行 两个service互发心跳保持不死 利用

.NET手记-友盟消息推送服务器端加密算法的实现

最近为App开发消息推送功能,这里我们采用了友盟的消息推送服务,但其后台简陋,可定制化程度低,所以决定接入服务器端API,在自己的服务器上部署一套推送服务. 其中涉及到很多问题,首先要解决的就是与友盟服务器的加密验证问题. 官方示例 友盟官方的加密算法使用Python实现的,核心是MD5算法,如下: import hashlib import json def md5(s): print s m = hashlib.md5(s) return m.hexdigest() appkey = '你的