APNS IOS 消息推送
一.Apns简介:
Apns是苹果推送通知服务。
二.原理:
APNs会对用户进行物理连接认证,和设备令牌认证(简言之就是苹果的服务器检查设备里的证书以确定其为苹果设备);
然后,将服务器的信息接收并且保存在APNs当中,APNs从其中注册的列表中查找该IOS设备(设备可以为iPhone、iPad、iPod Touch,版本是iOS3.0及以上)并将信息发送到该设备;

Provider与APNS之间要建立连接,APNS和Device之间也要建立连接,这两个连接都是加密的,采用的TLS的方式,加密用的证书需要生成的,这个证书分两种,一种是“开发者证书”,使用开发者证书的APP可以发布在APPSTORE上面,另一种是“企业证书”,使用企业证书的APP只能发在企业内部市场,不能发在APPSTORE上。
三.使用.NET开源类库PushSharp向苹果APNS服务推送消息。
下载PushSharp开源项目编译 https://github.com/Redth/PushSharp
编译成功后进行APNS推送需要使用 Newtonsoft.Json.dll ,PushSharp.Apple.dll ,PushSharp.Core.dll 三个程序集库文件
然后需要ios端提供 .p12的证书文件以及证书文件的加密密码
准备好这些后新建控制台程序引用上面的库文件,将证书复制到根目录改变属性输出到复制目录为始终复制
class Program
{
static ApnsConfiguration config;
static ApnsServiceBroker apnsBroker;
static void Main(string[] args)
{
config = new ApnsConfiguration(ApnsConfiguration.ApnsServerEnvironment.Sandbox, "证书.p12", "证书加密密码");
apnsBroker = new ApnsServiceBroker(config);
//推送异常
apnsBroker.OnNotificationFailed += (notification, aggregateEx) =>
{
aggregateEx.Handle(ex =>
{
//判断例外,进行诊断
if (ex is ApnsNotificationException)
{
var notificationException = (ApnsNotificationException)ex;
//处理失败的通知
var apnsNotification = notificationException.Notification;
var statusCode = notificationException.ErrorStatusCode;
Console.WriteLine("Apple Notification Failed: ID={apnsNotification.Identifier}, Code={statusCode}" + notification.DeviceToken);
}
else
{
//内部异常
Console.WriteLine("Apple Notification Failed for some unknown reason : {ex.InnerException}" + notification.DeviceToken);
}
// 标记为处理
return true;
});
};
//推送成功
apnsBroker.OnNotificationSucceeded += (notification) =>
{
Console.WriteLine("Apple Notification Sent ! "+notification.DeviceToken);
};
//启动代理
apnsBroker.Start();
} /// <summary>
/// 推送消息
/// </summary>
public static void SendMsg()
{
List<string> MY_DEVICE_TOKENS = new List<string>() {
"1f6f37acad29348c6a5957529c9fa61ad69766ec9c7367948745899cbccdfd51",
"1f6f37acad29348c6a5957529c9fa61ad69766ec9c7367948745899cbccdfd51"
}; foreach (var deviceToken in MY_DEVICE_TOKENS)
{
// 队列发送一个通知
apnsBroker.QueueNotification(new ApnsNotification
{
DeviceToken = deviceToken,//这里的deviceToken是ios端获取后传递到数据库统一记录管理的,有效的Token才能保证推送成功
Payload = JObject.Parse("{\"aps\":{\"sound\":\"default\",\"badge\":\"1\",\"alert\":\"这是一条群发广告消息推送的测试消息\"}}")
});
} //停止代理
apnsBroker.Stop();
Console.Read();
}
}
上面实现了.NET向APNS苹果消息推送通知的功能,这只是一个例子,在实际项目开发中,需要同IOS端进行交流,例如用户下载IOS应用后的token什么时候记录到数据库,如何进行管理,如何向所有用户和单个用户进行消息推送和避免消息的重复推送,可以开发成一个代理服务,实现相应的接口给推送方调用,类似激光推送的接口调用,做到统一化管理。
吐槽一下向Android设备推送消息,Android不像苹果APNS的推送有着统一的通道,也没有向APNS服务统一管理着设备的Token,一些Android手机系统的开发商,例如小米和华为会有自己开发的统一通道进行推送管理,类似苹果的APNS推送服务,三星有些手机走的是Google推送,但是如果要自己的应用能够在所有Android设备上收到推送到消息,不使用第三方推送去自己开发一个推送服务,就需要你的推送代理服务一直与该设备保持长链接,这些链接的管理是非常头疼的一件事,例如在wifi局域网和234G网络下的出现的掉线重连等等,以及如何使用消耗最少的流量保持设备和推送代理的长连接,都是高难度的挑战。在做好通道建立和管理后才是消息的推送和管理。
APNS IOS 消息推送的更多相关文章
- APNS IOS 消息推送处理失效的Token
在开发苹果推送服务时候,要合理的控制ios设备的Token,而这个Token是由苹果服务器Apns产生的,就是每次app问Apns要Token,由苹果服务器产生的Token会记录到Apns里面,我们需 ...
- APNS IOS 消息推送沙盒模式和发布模式
在做.NET向IOS设备的App进行消息推送时候,采用的是PushSharp开源类库进行消息的推送,而在开发过程中,采用的是测试版本的app,使用的是测试的p12证书采用的是ApnsConfigura ...
- APNS IOS 消息推送JSON格式介绍
在开发向苹果Apns推送消息服务功能,我们需要根据Apns接受的数据格式进行推送.下面积累了我在进行apns推送时候总结的 apns服务接受的Json数据格式 示例 1: 以下负载包含哦一个简单的 a ...
- iOS 消息推送(APNs) 傻瓜式教程
也可以去我的简书页面查看这篇文章 首先: 1.做iOS消息推送需要真机测试 2.做iOS消息推送需要有付费的开发者账号 是否继续看帖? 先学习一下相关的知识吧! 因为中途可能会遇到一些问题,这篇文章或 ...
- Ios 消息推送
手把手教你做iOS推送 http://www.cocoachina.com/industry/20130321/5862.html http://www.cnblogs.com/cdts_change ...
- .NET向APNS苹果消息推送通知
一.Apns简介: Apns是苹果推送通知服务. 二.原理: APNs会对用户进行物理连接认证,和设备令牌认证(简言之就是苹果的服务器检查设备里的证书以确定其为苹果设备):然后,将服务器的信息接收并且 ...
- ios 消息推送流程 转载
iOS开发:推送通知简述及开发实践热度 1已有 706 次阅读 2013-10-15 09:23 |个人分类:经验之谈|系统分类:ios| IOS, 推送一.关于推送通知 推送通知,也被叫做远程通知, ...
- (转)iOS消息推送机制的实现
原:http://www.cnblogs.com/qq78292959/archive/2012/07/16/2593651.html iOS消息推送机制的实现 iOS消息推送的工作机制可以简单的用下 ...
- 【iOS】iOS消息推送机制的实现
iOS消息推送的工作机制可以简单的用下图来概括: Provider是指某个iPhone软件的Push服务器,APNS是Apple Push Notification Service的缩写,是苹果的服务 ...
随机推荐
- #pragma预处理命令
#pragma comment(lib,"XXX.lib") 表示链接XXX.lib这个库,和在工程设置里写上XXX.lib的效果一样. #pragma comment(linke ...
- 【转载】什么是Windows USB设备路径,它是如何格式化的?
http://blog.csdn.net/kingmax54212008/article/details/77837210 用于接口的复合USB设备路径格式 \?usb#vid_ vvvv&p ...
- POJ - 2492 种类并查集
思路:保存每个点与其父节点的关系,注意合并和路径压缩即可. AC代码 #include <cstdio> #include <cmath> #include <cctyp ...
- java.net.UnknownHostException
java.net.UnknownHostException 错误解决方向 查看 测试真机或者模拟机是否连上了网络. 如果不是第一步错误的话,一般就是测试机没有链接上网络,可以打开个网页或者其他 ...
- 转:彻底搞清referrer和origin
在http协议中有这两个字段,之前一直隐隐约约的觉得是,一种标记请求来源的方法(的确是),但是更细致的对这两个字段的比较却没有一个清楚的认识. referrer 到底是referer还是referre ...
- Android开发——fragment中数据传递与刷新UI(更改控件)
数据传递: 1.通过数据库进行数据的传递 如在fragment中将数据保存在数据库中,之后其他的fragment或者activity直接读取数据库中的数据,数据库使用还算简单,这里就不多说,建议使用l ...
- 深度学习菜鸟的信仰地︱Supervessel超能云服务器、深度学习环境全配置
并非广告~实在是太良心了,所以费时间给他们点赞一下~ SuperVessel云平台是IBM中国研究院和中国系统与技术中心基于POWER架构和OpenStack技术共同构建的, 支持开发者远程开发的免费 ...
- 迁移学习︱艺术风格转化:Artistic style-transfer+ubuntu14.0+caffe(only CPU)
说起来这门技术大多是秀的成分高于实际,但是呢,其也可以作为图像增强的工具,看到一些比赛拿他作训练集扩充,还是一个比较好的思路.如何在caffe上面实现简单的风格转化呢? 好像网上的博文都没有说清楚,而 ...
- FFMpeg.H264解码win开发环境搭建
开发环境: vc6.0 + sp5 + vcpp5,注意vcpp5在vc6+sp6上会安装失败. 源码: ff_264_dec_vc,可用vc进行编译调试,但编译环境限定如上. 声明:该工程是ffmp ...
- mysql常用基础操作语法(十二)~~常用数值函数【命令行模式】
数值函数是常用函数之一,也是学习mysql必会的,常用的有如下一些: 1.ceil:返回大于某个数的最小整数值: 2.floor:和上一个相反,返回小于某个数的最大整数值: 3.round:返回某个数 ...