已注销用户
2014-11-19 00:27:14
原精
基于APNS苹果消息推送服务Java端和PHP端实现源代码分享
最近 看了一下苹果消息推送 英文简称:APNS (Apple Push Notification Service)
它实现的原理 我就不BB了 原理就看百度百科吧 比我说的好多了,链接如下:http://baike.baidu.com/view/7087026.htm?fr=aladdin
按照这个原理 我就做了一个特简单的demo 分享出来,希望可以帮到牛牛们!
先上 PHP 端的代码 (php端的 很多地方都有 这里我借花献佛了 ...)
<?php // Put your device token here (without spaces): $deviceToken = '74314cc9e8f747e2fa96c2c1585c830cdf994de6b453ce9fa1c09ba396b2f9e9'; // Put your private key's passphrase here:密语 $passphrase = 'winyi'; // Put your alert message here: $message = '您于2014年11月11日提交的信件已经回复'; //////////////////////////////////////////////////////////////////////////////// $ctx = stream_context_create(); stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem'); stream_context_set_option($ctx, 'ssl', 'passphrase', $passphrase); // Open a connection to the APNS server $fp = stream_socket_client( 'ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT|STREAM_CLIENT_PERSISTENT, $ctx); if (!$fp) exit("Failed to connect: $err $errstr" . PHP_EOL); echo 'Connected to APNS' . PHP_EOL; // Create the payload body $body['aps'] = array( 'alert' => $message, 'sound' => 'default' ); // Encode the payload as JSON $payload = json_encode($body); // Build the binary notification $msg = chr(0) . pack('n', 32) . pack('H*', $deviceToken) . pack('n', strlen($payload)) . $payload; // Send it to the server $result = fwrite($fp, $msg, strlen($msg)); if (!$result) echo 'Message not delivered' . PHP_EOL; else echo 'Message successfully delivered' . PHP_EOL; // Close the connection to the server fclose($fp); ?>
这个源码 我就不多说了 因为我也看的不是很懂
我们主要看一下 里面有 deviceToken 和 passphrase 这两个是我们要关注的
deviceToken :可以理解为是手机设备的唯一识别号
passphrase :私钥
还有一个php 端代码 要的是 XXX.pem 证书 而Java端是 XXX.p12证书
还有一个特点是 php 端的代码 私钥可以为空 而java端是不可以的 这里有待考究 反正我实验的时候是不可以的
关于证书怎么生成的 大家自己百度吧
下来看java端的吧
package com.sdunicom.iphone.apns; import javapns.back.PushNotificationManager; import javapns.back.SSLConnectionHelper; import javapns.data.Device; import javapns.data.PayLoad; public class MainSend { public static void main(String[] args) throws Exception { try { String deviceToken = "189c1558c469d683a516a09be4c7851399f721747b89dc10161b5d9a82d2ee71"; PayLoad payLoad = new PayLoad(); payLoad.addAlert("hello zuidaima"); payLoad.addBadge(4); payLoad.addSound("default"); PushNotificationManager pushManager = PushNotificationManager.getInstance(); pushManager.addDevice("iPhone", deviceToken); //Connect to APNs String host= "gateway.sandbox.push.apple.com"; int port = 2195; String certificatePath= "F:/tinmanpush123.p12"; String certificatePassword= "tinmanpush123"; pushManager.initializeConnection(host,port, certificatePath,certificatePassword, SSLConnectionHelper.KEYSTORE_TYPE_PKCS12); //Send Push Device client = pushManager.getDevice("iPhone"); pushManager.sendNotification(client, payLoad); pushManager.stopConnection(); pushManager.removeDevice("iPhone"); } catch (Exception e) { e.printStackTrace(); } } }
java 端的和 php 端的源码都拷贝出来了
然后在改改 整理成一个方法 就ok了 具体的 需要的 下载我的源码看吧~
下面是项目运行截图
代码虽然简单 但是很实用的哦 有这方面的牛牛 需要就下载
前提是 你要有正确的 证书 和 deviceToken 以及 私钥 不然到时你下载了我的源码说运行不起来 又在骂娘了
好了 我把源码和需要的jar 都放在一起了 有需要的下载吧~
猜你喜欢
- 【小牛分享】- pushlet指定用户推送消息
- DWR反转消息推送技术demo源代码下载
- 【纵横科技】基于dwr框架的reverse ajax消息推送 有图有图!
- java开源Comet框架pushlet将消息从服务器端推送到客户端的Demo
- Java轻量级消息框架和整合平台mule ESB应用实例分享
- java DES3加解密的简单实现(IOS与Java服务端)简单易用
- spring mvc+websocket实现信息推送(包括推送给所用和单独推送)
- SSH消息管理系统
- java HttpURLConnection向目标服务器发送消息、读取响应
- java实现获取微信公众服务号消息
- Netty5.0服务端、客户端收发消息
- nodejs推送push mysql数据更新到前端显示
请下载代码后再发表评论
文件名:iphonePushDemo.rar,文件大小:2309.522K
下载
- /
- /iphonePushDemo
/iphonePushDemo/MainSend.java
- /iphonePushDemo/iphonePush.rar
- /iphonePushDemo/pushMe.php
- /iphonePushDemo
相关代码
最近下载
peng2000 LV12
2021年2月15日
fileToken LV1
2020年5月13日
shuixianzyy LV4
2020年5月7日
最代码酒酒 LV20
2019年4月16日
n0th1n9 LV6
2017年12月8日
lanlanskys LV1
2017年11月12日
sdbrk LV14
2017年10月20日
rabbitlxf LV1
2016年6月23日
thl1229 LV15
2015年6月17日
chiron LV12
2015年2月12日
最近浏览
kkkkioio LV7
2023年7月5日
1441854423 LV2
2023年6月30日
张真狗 LV9
2023年6月9日
wuziayng1232 LV10
2023年6月1日
2410068425 LV23
2023年3月6日
生米的 LV10
2023年3月3日
好的好的 LV8
2022年7月13日
JohnnyZ LV2
2022年5月24日
hshdhdbdb
2022年5月19日
暂无贡献等级
zzz957 LV2
2022年4月26日