`
13146489
  • 浏览: 251298 次
  • 性别: Icon_minigender_1
  • 来自: 成都
社区版块
存档分类
最新评论

ios push notifiycation

 
阅读更多
昨天搞了许久的苹果的推送服务,看着文档不是很难。可是很少使用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];很重要。我看到这恍然大悟。。。。哎
分享到:
评论

相关推荐

    php ios push 脚本

    在IT行业中,推送服务是移动应用开发者不可或缺的一部分,特别是对于iOS平台的应用,为了实时通知用户,需要使用苹果的Push Notification Service(简称APNs)。而PHP作为广泛应用的服务器端脚本语言,可以用来创建...

    iOS push notification 文档

    iOS Push Notification文档 iOS Push Notification是Apple提供的一种服务,允许开发者向用户推送信息,从而提高用户体验和应用程序的粘性。本文档将详细介绍如何在iOS应用程序中使用Push Notification,包括工程的...

    ios push 测试工具

    在iOS开发中,苹果推送通知服务(Apple Push Notification service,简称APNs)是苹果公司提供的一项功能,允许应用程序在后台向用户发送提醒。这个服务对于提高用户体验和保持应用活跃度至关重要。"ios push 测试...

    IOS push通知

    在iOS应用开发中,Push Notification是一项重要的功能,它允许应用程序在后台向用户发送消息,即使应用没有运行在前台。本文将深入探讨“iOS Push通知”的实现机制,包括苹果服务器的推送服务、代码实现以及相关环境...

    IOS PUSH DEMO

    【标题】"IOS PUSH DEMO" 是一个关于iOS设备推送通知的示例项目,它主要展示了如何使用Java来实现Apple Push Notification Service (APNS) 的功能。在iOS应用开发中,当用户不在应用中时,如果需要向他们发送消息...

    ios 简单的push service代码

    在iOS开发中,Push Notification Service(简称PNS)是一种苹果提供的服务,允许应用程序在后台接收来自服务器的消息。本文将深入探讨iOS中的简单Push Service代码,包括其工作原理、实现方式以及如何集成到你的应用...

    IOSPush_PHP.zip

    3. **push-developer-nopassword_2nd.pem**:这是一个Apple Push Notification service (APNs)的开发证书,用于在开发阶段向iOS设备发送测试推送通知。 4. **entrust_root_certification_authority.pem**:这是一份...

    php用于测试iospush通知推送的。

    php代码类,用于测试iospush通知的,欢迎大家下载使用,下载后不会使用,请查看我博客 php代码类,测试push通知的,运行直接php+文件路径

    baidu-push-for-ios

    【标题】"baidu-push-for-ios" 涉及的是百度为iOS平台提供的推送服务SDK,主要用于帮助开发者集成百度推送功能到他们的iOS应用中。这个SDK使得应用能够接收到服务器发送的消息通知,即使应用在后台运行或者用户并未...

    ios-push控制器, 当前导航栏隐藏, 下个控制器导航栏显示.zip

    标题"ios-push控制器, 当前导航栏隐藏, 下个控制器导航栏显示.zip"所描述的问题,正是关于这个特定的场景,即如何在push操作中避免导航栏在切换过程中出现闪现的现象。 在描述中提到的"中间push闪现的问题"是指在从...

    ios push java 服务端程序

    在iOS应用开发中,为了实现实时的消息推送功能,开发者通常会使用Apple Push Notification service (APNs)。本文将深入探讨如何使用Java在服务端构建一个与APNs交互的程序,以便向iOS设备发送推送通知。 一、Apple ...

    ios-左滑手势push控制器.zip

    本项目"ios-左滑手势push控制器.zip"主要关注如何通过屏幕左侧滑动手势来推动(push)新的UIViewController,实现一种类似原生iOS应用中的导航效果。这种交互方式常见于许多iOS应用中,例如邮件应用中浏览邮件列表时...

    模拟iOS发送通知,验证push证书

    本文将深入探讨如何模拟iOS发送通知以及验证push证书的有效性,这对于iOS开发者来说是至关重要的。 首先,我们需要理解苹果的Push Notification Service(简称APNs),这是苹果提供的一个服务,用于向用户的iOS设备...

    ios push

    在iOS平台上,推送服务(Push Notification)是一种关键的技术,它允许应用在用户未与应用交互时接收消息。本文将深入探讨iOS Push的相关知识点,并结合后台Server端代码进行讲解。 首先,我们要了解苹果的推送通知...

    Java向IOS设备push消息

    本篇将详细阐述如何使用Java实现这一功能,涉及的主要知识点包括:Java服务器端推送技术、Apple Push Notification Service(APNS)以及iOS设备的Device Token。 首先,理解Apple Push Notification Service (APNS)...

    ios-tabBar 中间突出 push 方式 实现.zip

    在iOS应用开发中,TabBar是用户界面中最常见的组件之一,用于展示多个主要功能模块的入口,用户可以方便地在各个模块之间切换。本示例着重讲解如何在TabBar的中间item实现突出效果,并通过push方式进入子控制器,...

    iOS 自带pushnotification 也就是apns

    **iOS 自带Push Notification服务详解** 苹果公司的iOS操作系统提供了一种强大的推送通知服务,称为Apple Push Notification service(APNs)。这个服务允许应用在用户不直接与应用交互时,也能接收到来自服务器的...

    C++ IOS后台消息PUSH

    在iOS开发中,"PUSH"通常指的是远程通知服务,即Apple Push Notification Service(APNs)。这是一种苹果公司提供的服务,允许应用程序在不打开的情况下接收来自服务器的消息,如新消息、提醒或者更新。本项目“C++ ...

    iPhone的Push(推送通知)功能原理浅析

    iPhone的Push(推送通知)功能是iOS设备上的一项重要特性,它允许应用程序在后台向用户发送提醒,即使应用并未在运行。这一功能依赖于Apple Push Notification Service (APNS) —— 苹果提供的推送服务。下面是Push...

Global site tag (gtag.js) - Google Analytics