关于推送鼓捣了好长时间,这里不再写helloworld了,只讲里面遇到的问题。

1.关于苹果开发者平台上的注册

网上很多的教程,只要按照步骤来设置就行了,在 iOS证书(.p12)和描述文件(.mobileprovision)申请 这篇文章里面讲的很清楚,文章中也说明了,如果要使用推送功能,那么在申请AppID的时候要选择“Push Notifications”这个选项。这篇文章说的很详细,总结下来有下面几点内容

1.申请苹果AppID,一个App里的证书都基于这个AppID
2.生成证书请求文件,这个文件必须在苹果电脑上生成,文件的后缀是.certSigningRequest,后面要用它来生成证书文件,就是用CertificateSigningRequest.certSigningRequest文件生成ios_development.cer文件
3.生成开发证书,这里就是要生成ios_development.cer文件,然后再那这个文件在苹果电脑上Kenchain Access中导出.p12证书文件
4.添加调试设备,这个主要是把测试收集到UUID添加到开发者平台的Devices列表里面,后面生成证书描述文件的时候用到这些设备
5.申请开发(Development)描述文件,这里要选择前面的AppID,选择添加的设备,最后生成了一个development.mobileprovision文件
6.生成发布证书,这个主要是为了上架,和步骤3唯一区别是选择的类型不一样,前者是Development下面的IOS App Development,后者是Production下的App Store and Ad Hot,同样要选择步骤1生成的AppID,但是这里不用选择设备,都上架了,还选择设备就不对了。

需要说明的是这篇文章写的不严谨,在创建appid的时候“在“Explicit App ID”栏下的“Bundle ID”项中输入App ID(使用反向域名格式字符串,如“io.dcloud.HBuilderApp”):”在“申请开发(Development)证书和描述文件”和“申请发布(Distribution)证书和描述文”的时候楼主写到:“点击“Continue”按钮,打开“App ID”选择页面,选择要使用的“App ID”(如之前创建的“io.dcloud.HBuildApp”),点击“Continue”:” io.dcloud.HBuilderApp 和 io.dcloud.HBuildApp明显不一样,他们是一回事,不要受它蛊惑。

需要说明的是这篇文章只字不提如何生成推送证书,虽然在步骤1生成AppID的时候提示你选择推送功能,但是还需要生成一个推送证书上传到个推平台上,通篇文章都没有提到。

2.生成推送证书

上面的问题可以在个推开发者平台上找到答案,苹果 APNs 配置, 这里也讲到了创建苹果App ID,这个和上面第一布生成的那个App ID是一回事,不要重复生成,也说了要选中Push Notifications,在第二个环节里面讲到了要创建APNs Push证书,这个很关键,他和上面生成发布证书类似,它也要用到CertificateSigningRequest.certSigningRequest文件生成ios_push_development.cer这个文件,再用这个文件导出ios_push_development.p12证书文件,最后把这个证书上传到个推应用平台上。如下图:

注意这篇文章第三个步骤“Provisioning Profile文件的创建”很有蛊惑性,上来就来一句“创建一个 com.igexin.getui.demo AppID,并为此AppID配置 Push Notifications”,不要被它迷惑就是上面的步骤1,剩下的步骤和上面的步骤5:“申请开发(Development)描述文件”没啥区别。总之对一个app来说只要用到AppID,都是同一个。

3.关于平台配置

这里没啥说的,在个推平台上配置一个应用之后把个推的appid,appkey,appsecret填到hbuilder的manifest.json文件中即可。

4.关于clientid

剩下的时候就是去个推平台下载了一个服务端的Demo,我用的是C#版本的,当你实验第一个例子的时候有pushMessageToApp()这么一个方法,这个是发送给某个app,ClientID,注意一定要打包之后获取这个ClientID,不能在调试状态下获取,也就是不能在hbuilder里面这样,然后用console.log打印出来在hbuilder里面复制。

一定要打包出来用alert弹出来,然后一个一个的敲出来放在C#demo程序里。如下:

5.关于发送给特定用户组

在demo的第一个例子中,手贱把pushMessageToApp()方法体中的

这一句注释给打开了,结果死活收不到,注意这个是需要首先用push.setClientTag这个方法设置之后才能按照用户tags来发送,如果用户没有这个tags是不会收到推送的。把这一句注释掉就好了。

6.关于透传消息+apns

ios系统好像只能使用transmissiontemplate模板+apns推送,所以在构建透传消息模板的时候要加上如下一段:

            //APN高级推送 开始
APNPayload apnpayload = new APNPayload();
DictionaryAlertMsg alertMsg = new DictionaryAlertMsg();
alertMsg.Body = "Body";
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 = ;
apnpayload.ContentAvailable = ;
//apnpayload.Category = "";
apnpayload.Sound = "test1.wav";
apnpayload.addCustomMsg("payload", "payload");
template.setAPNInfo(apnpayload);
//APN高级推送 结束

加好之后整个方法长这样子:

        //透传模板动作内容
public static TransmissionTemplate TransmissionTemplateDemo()
{
TransmissionTemplate template = new TransmissionTemplate();
template.AppId = APPID;
template.AppKey = APPKEY;
//应用启动类型,1:强制应用启动 2:等待应用启动
template.TransmissionType = "";
//透传内容
template.TransmissionContent = "透传内容";
//设置通知定时展示时间,结束时间与开始时间相差需大于6分钟,消息推送后,客户端将在指定时间差内展示消息(误差6分钟)
//String begin = "2017-03-13 00:36:10";
//String end = "2017-03-13 23:46:20";
//template.setDuration(begin, end); //APN高级推送 开始
APNPayload apnpayload = new APNPayload();
DictionaryAlertMsg alertMsg = new DictionaryAlertMsg();
alertMsg.Body = "Body";
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 = ;
apnpayload.ContentAvailable = ;
//apnpayload.Category = "";
apnpayload.Sound = "test1.wav";
apnpayload.addCustomMsg("payload", "payload");
template.setAPNInfo(apnpayload);
//APN高级推送 结束 return template;
}

这一点在个推平台上有介绍,但是有点隐秘 C# 推送模板,截图如下:

好了就这么多,各位大神如果看到那里有不对的地方希望指出来。谢谢!

hubilder打包+C#服务端个推服务实现的更多相关文章

  1. 使用SignalR实现服务端消息推送

    概述 这篇文章参考的是Server Broadcast with SignalR 2这篇教程,很不错的一篇教程,如果有兴趣的话可以查看原文,今天记录下来作为一个学习笔记,这样今后翻阅会更方便一点. 这 ...

  2. Asp.net SignalR 实现服务端消息推送到Web端

              之前的文章介绍过Asp.net SignalR,  ASP .NET SignalR是一个ASP .NET 下的类库,可以在ASP .NET 的Web项目中实现实时通信.  今天我 ...

  3. 1.使用SignalR实现页面即时刷新(服务端主动推送)

    模块功能说明: 实现技术:sqlserver,MVC,WebAPI,ADO.NET,SignalR(服务器主动推送) 特殊车辆管理--->移动客户端采集数据存入数据库---->只要数据库数 ...

  4. 使用SignalR实现页面即时刷新(服务端主动推送)

    模块功能说明: 实现技术:sqlserver,MVC,WebAPI,ADO.NET,SignalR(服务器主动推送) 特殊车辆管理--->移动客户端采集数据存入数据库---->只要数据库数 ...

  5. 使用SignalR从服务端主动推送警报日志到各种终端(桌面、移动、网页)

    微信公众号:Dotnet9,网站:Dotnet9,问题或建议:请网站留言, 如果对您有所帮助:欢迎赞赏. 使用SignalR从服务端主动推送警报日志到各种终端(桌面.移动.网页) 阅读导航 本文背景 ...

  6. 服务端增加WCF服务全局异常处理机制

    服务端增加WCF服务全局异常处理机制,任一WCF服务或接口方式出现异常,将统一调用WCF_ExceptionHandler.ProvideFault方法,因此不需要每个方法使用try catch写法. ...

  7. SSE技术详解:使用 HTTP 做服务端数据推送应用的技术

    SSE ( Server-sent Events )是 WebSocket 的一种轻量代替方案,使用 HTTP 协议. 严格地说,HTTP 协议是没有办法做服务器推送的,但是当服务器向客户端声明接下来 ...

  8. SpringCloud系列四:Eureka 服务发现框架(定义 Eureka 服务端、Eureka 服务信息、Eureka 发现管理、Eureka 安全配置、Eureka-HA(高可用) 机制、Eureka 服务打包部署)

    1.概念:Eureka 服务发现框架 2.具体内容 对于服务发现框架可以简单的理解为服务的注册以及使用操作步骤,例如:在 ZooKeeper 组件,这个组件里面已经明确的描述了一个服务的注册以及发现操 ...

  9. Spring mvc服务端消息推送(SSE技术)

    SSE技术是基于单工通信模式,只是单纯的客户端向服务端发送请求,服务端不会主动发送给客户端.服务端采取的策略是抓住这个请求不放,等数据更新的时候才返回给客户端,当客户端接收到消息后,再向服务端发送请求 ...

随机推荐

  1. 从完整备份恢复单个innodb表

    现在大多数同学在线上采取的备份策略都是xtrabackup全备+binlog备份,那么当某天某张表意外的删除那么如何从xtrabackup全备中恢复呢?从mysql 5.6版本开始,支持可移动表空间( ...

  2. bash中通过设置PS1变量改变提示符颜色

    参考 <Prompt Magic> ubuntu初始时bash提示符的颜色同程序输出的颜色相同,当大量有输出时,找到输出信息开始的地方往往很费劲.如果把提示符的颜色变成更为醒目的颜色,那么 ...

  3. ProxySQL 配置详解及读写分离(+GTID)等功能说明 (完整篇)

    ProxySQL是灵活强大的MySQL代理层, 是一个能实实在在用在生产环境的MySQL中间件,可以实现读写分离,支持 Query 路由功能,支持动态指定某个 SQL 进行 cache,支持动态加载配 ...

  4. MySQL 解压缩版安装 2017-12-02(完整版,包括异常处理)

    一.安装 1.到mysql官网 http://dev.mysql.com/downloads/mysql/ 下载mysql 注:msi的是安装版     zip是压缩版 2.解压 解压到想安装的目录下 ...

  5. SpringMVC教程4

    SpringMVC教程3 一.数据回写 数据回写:在做数据更新的时候服务端查询的数据自动填充到表单中. 1.1默认方式 通过前面讲解的 Map Mode ModelMap绑定数据 @RequestMa ...

  6. Jmeter接口测试——跨线程组调用参数(token为例)

    昨天学会了动态获取token,今天测试接口时希望能够实现跨线程调用token值. 实现原理: jmeter本身的“__setProperty”函数可以把某参数的值设置成jmeter本身的内置属性,而j ...

  7. Object与Class的区别

    1.在Scala中声明private变量,Scala编译器会自动生成get,set方法 2.在Scala中变量需要初始化 3.在Scala中没有静态修饰符,在object下的成员全部都是静态的,如果在 ...

  8. Web前端基础——jQuery(一)

    前几天回老家呆了几天,几乎没有怎么学习新的知识,这期间一直有断断续续的看<Java编程思想>,还刷了一些前沿消息,也算没闲着.今天开始学习jQuery啦,继续前进. 在网上查了,买了这本书 ...

  9. elasticsearch6.7 05. Document APIs(7)Update By Query API

    6.Update By Query API _update_by_query 接口可以在不改变 source 的情况下对 index 中的每个文档进行更新.这对于获取新属性或其他联机映射更改很有用.以 ...

  10. HDU5887(SummerTrainingDay01-D)

    Herbs Gathering Time Limit: 3000/1000 MS (Java/Others)    Memory Limit: 32768/32768 K (Java/Others)T ...