昨天搞了许久的苹果的推送服务,看着文档不是很难。可是很少使用socket发送拼接字节一类的数据。后来找到了javapns,很方便。直接就推送成功了。
本来是想用netty做的,但是没有成功,我觉得是bytes的发送格式不对,特别是字节数。
主页:
http://code.google.com/p/javapns/
使用的前提:
http://code.google.com/p/javapns/wiki/GeneralRequirements
推送的简单例子:
http://code.google.com/p/javapns/wiki/PushNotificationBasic
主页的wiki里面有不少例子和文档。使用推送的前提是要生成证书和要推送的设备令牌。
设备令牌是客户端程序第一次安装时生成的,apple的文档中有很详细的图,并提交给自己的push server。
apple的文档有c代码的例子,下面是一段从javapns截取的推送代码。
KeyStore ts = KeyStore.getInstance("PKCS12");
ts.load(new FileInputStream("d:/spncert.p12"), "123456".toCharArray());
KeyManagerFactory tmf = KeyManagerFactory.getInstance("SunX509");
tmf.init(ts, "123456".toCharArray());
SSLContext sslContext = SSLContext.getInstance("TLS");
sslContext.init(tmf.getKeyManagers(), null, null);
SSLSocketFactory factory = sslContext.getSocketFactory();
SSLSocket socket = (SSLSocket) factory.createSocket(host, port);
String[] suites = socket.getSupportedCipherSuites();
socket.setEnabledCipherSuites(suites);
// start handshake
socket.startHandshake();
char[] t = token.toCharArray();
byte[] b = Arrays.toString(t).getBytes();
OutputStream outputstream = socket.getOutputStream();
byte[] deviceTokenAsBytes = new byte[token.length() / 2];
token = token.toUpperCase();
int j = 0;
try {
for (int i = 0; i < token.length(); i += 2) {
String tt = token.substring(i, i + 2);
int tmp = Integer.parseInt(tt, 16);
deviceTokenAsBytes[j++] = (byte) tmp;
}
} catch (NumberFormatException e1) {
throw new InvalidDeviceTokenFormatException(token, e1.getMessage());
}
// Create the ByteArrayOutputStream which will contain the raw interface
byte[] payloadAsBytes = payload.getBytes();
int size = (Byte.SIZE / Byte.SIZE) + (Character.SIZE / Byte.SIZE)
+ deviceTokenAsBytes.length + (Character.SIZE / Byte.SIZE)
+ payloadAsBytes.length;
ByteArrayOutputStream bao = new ByteArrayOutputStream(size);
// Write command to ByteArrayOutputStream
// 0 = simple
// 1 = enhanced
byte zeron = 0;
bao.write(zeron);
// Write the TokenLength as a 16bits unsigned int, in big endian
int tl = deviceTokenAsBytes.length;
bao.write(intTo2ByteArray(tl));
// Write the Token in bytes
bao.write(deviceTokenAsBytes);
// Write the PayloadLength as a 16bits unsigned int, in big endian
int pl = payloadAsBytes.length;
bao.write(intTo2ByteArray(pl));
// Finally write the Payload
bao.write(payloadAsBytes);
bao.flush();
outputstream.write(bao.toByteArray());
outputstream.flush();
outputstream.close();
}
static final byte[] intTo2ByteArray(int value) {
int s1 = (value & 0xFF00) >> 8;
int s2 = value & 0xFF;
return new byte[] { (byte) s1, (byte) s2 };
}
上面代码中的:
byte[] deviceTokenAsBytes = new byte[token.length() / 2];很重要。我看到这恍然大悟。。。。哎
分享到:
相关推荐
在IT行业中,推送服务是移动应用开发者不可或缺的一部分,特别是对于iOS平台的应用,为了实时通知用户,需要使用苹果的Push Notification Service(简称APNs)。而PHP作为广泛应用的服务器端脚本语言,可以用来创建...
iOS Push Notification文档 iOS Push Notification是Apple提供的一种服务,允许开发者向用户推送信息,从而提高用户体验和应用程序的粘性。本文档将详细介绍如何在iOS应用程序中使用Push Notification,包括工程的...
在iOS开发中,苹果推送通知服务(Apple Push Notification service,简称APNs)是苹果公司提供的一项功能,允许应用程序在后台向用户发送提醒。这个服务对于提高用户体验和保持应用活跃度至关重要。"ios push 测试...
在iOS应用开发中,Push Notification是一项重要的功能,它允许应用程序在后台向用户发送消息,即使应用没有运行在前台。本文将深入探讨“iOS Push通知”的实现机制,包括苹果服务器的推送服务、代码实现以及相关环境...
【标题】"IOS PUSH DEMO" 是一个关于iOS设备推送通知的示例项目,它主要展示了如何使用Java来实现Apple Push Notification Service (APNS) 的功能。在iOS应用开发中,当用户不在应用中时,如果需要向他们发送消息...
在iOS开发中,Push Notification Service(简称PNS)是一种苹果提供的服务,允许应用程序在后台接收来自服务器的消息。本文将深入探讨iOS中的简单Push Service代码,包括其工作原理、实现方式以及如何集成到你的应用...
3. **push-developer-nopassword_2nd.pem**:这是一个Apple Push Notification service (APNs)的开发证书,用于在开发阶段向iOS设备发送测试推送通知。 4. **entrust_root_certification_authority.pem**:这是一份...
php代码类,用于测试iospush通知的,欢迎大家下载使用,下载后不会使用,请查看我博客 php代码类,测试push通知的,运行直接php+文件路径
【标题】"baidu-push-for-ios" 涉及的是百度为iOS平台提供的推送服务SDK,主要用于帮助开发者集成百度推送功能到他们的iOS应用中。这个SDK使得应用能够接收到服务器发送的消息通知,即使应用在后台运行或者用户并未...
标题"ios-push控制器, 当前导航栏隐藏, 下个控制器导航栏显示.zip"所描述的问题,正是关于这个特定的场景,即如何在push操作中避免导航栏在切换过程中出现闪现的现象。 在描述中提到的"中间push闪现的问题"是指在从...
在iOS应用开发中,为了实现实时的消息推送功能,开发者通常会使用Apple Push Notification service (APNs)。本文将深入探讨如何使用Java在服务端构建一个与APNs交互的程序,以便向iOS设备发送推送通知。 一、Apple ...
本项目"ios-左滑手势push控制器.zip"主要关注如何通过屏幕左侧滑动手势来推动(push)新的UIViewController,实现一种类似原生iOS应用中的导航效果。这种交互方式常见于许多iOS应用中,例如邮件应用中浏览邮件列表时...
本文将深入探讨如何模拟iOS发送通知以及验证push证书的有效性,这对于iOS开发者来说是至关重要的。 首先,我们需要理解苹果的Push Notification Service(简称APNs),这是苹果提供的一个服务,用于向用户的iOS设备...
在iOS平台上,推送服务(Push Notification)是一种关键的技术,它允许应用在用户未与应用交互时接收消息。本文将深入探讨iOS Push的相关知识点,并结合后台Server端代码进行讲解。 首先,我们要了解苹果的推送通知...
本篇将详细阐述如何使用Java实现这一功能,涉及的主要知识点包括:Java服务器端推送技术、Apple Push Notification Service(APNS)以及iOS设备的Device Token。 首先,理解Apple Push Notification Service (APNS)...
在iOS应用开发中,TabBar是用户界面中最常见的组件之一,用于展示多个主要功能模块的入口,用户可以方便地在各个模块之间切换。本示例着重讲解如何在TabBar的中间item实现突出效果,并通过push方式进入子控制器,...
**iOS 自带Push Notification服务详解** 苹果公司的iOS操作系统提供了一种强大的推送通知服务,称为Apple Push Notification service(APNs)。这个服务允许应用在用户不直接与应用交互时,也能接收到来自服务器的...
在iOS开发中,"PUSH"通常指的是远程通知服务,即Apple Push Notification Service(APNs)。这是一种苹果公司提供的服务,允许应用程序在不打开的情况下接收来自服务器的消息,如新消息、提醒或者更新。本项目“C++ ...
iPhone的Push(推送通知)功能是iOS设备上的一项重要特性,它允许应用程序在后台向用户发送提醒,即使应用并未在运行。这一功能依赖于Apple Push Notification Service (APNS) —— 苹果提供的推送服务。下面是Push...