服务器第三方ios推送方式
来源:互联网 发布:sp版羽毛球拍淘宝店 编辑:程序博客网 时间:2024/06/04 18:19
2、推送服务端编程
内容提供者接收到设备的令牌并保存起来,在有新的内容需要推送的时候,他们将启动一个服务程序逐个设备推送他们的内容。在推送具体的过程中并非直接 由内容提供者,直接发送给用户设备,而是服务程序与APNS通讯建立信任连接,然后把数据推送给APNS,再由APNS利用安全通道推送给用户设备。
如果要编写内容提供者的推送服务程序,我们需要进行SSL认证编程,以及构建APNS数据包,数据包分为3个主要部分:Command(命令)、deviceToken(令牌)和Payload(载荷)。载荷不能超过256字节,是JSON格式,例如:
01
{“aps” : {
02
03
“alert” : ”You got your emails.”,
04
05
“badge” : 9,
06
07
“sound” : ”bingbong.aiff”
08
09
}
10
11
}
作为推出服务程序可以使用很多计算机语言实现,如果从便于管理角度看,使用PHP、Java和.NET,甚至是Note.js都是可以选择的。本书重点介绍PHP和Java编写推送服务程序。
使用PHP实现推送服务
PHP是非常不错的服务器端脚本,这么多年来没有被JavaEE和.NET蚕食掉,说明它有过人之处。PHP编程简单很多人原意使用,实现本章推送服务也很简单。下面代码是实现了推送的PHP代码:
01
<?php
02
03
04
05
$deviceToken= ’1634899aef6c71ed5c0667d6658677a914c5ec3b545887e8173854970dee24db’;
06
07
//推送方式,包含内容和声音
08
09
$body = array(“aps” => array(“alert” => ’新年好. from PHP’,”badge” => 11,”sound”=>’
default
’)); ①
10
11
//创建数据流上下文对象
12
13
$ctx = stream_context_create();
14
15
//设置pem格式文件
16
17
$pem = ”apns-dev.pem”; ②
18
19
//设置数据流上下文的本地认证证书
20
21
stream_context_set_option($ctx,”ssl”,”local_cert”, $pem); ③
22
23
$pass = ”51work6.com”;
24
25
//设置数据流上下文的密码
26
27
stream_context_set_option($ctx, ’ssl’, ’passphrase’, $pass); ④
28
29
//产品发布APNS服务器,gateway.push.apple.com
30
31
//测试APNS服务器,gateway.sandbox.push.apple.com
32
33
//socket通讯
34
35
$fp = stream_socket_client(“ssl:
//gateway.sandbox.push.apple.com:2195″, $err, $errstr, 60,
36
37
STREAM_CLIENT_CONNECT, $ctx); ⑤
38
39
if
(!$fp) {
40
41
echo ”连接失败.”;
42
43
return
;
44
45
}
46
47
print ”连接OK\n”;
48
49
//载荷信息,JSON编码
50
51
$payload = json_encode($body); ⑥
52
53
//构建发送的二进制信息
54
55
$msg = chr(0) . pack(“n”,32) . pack(“H*”, str_replace(‘ ’, ”, $deviceToken))
56
57
. ack(“n”,
strlen
($payload)) . $payload; ⑦
58
59
echo ”发送消息:” . $payload .”\n”;
60
61
fwrite
($fp, $msg);
62
63
fclose
($fp);
64
65
66
67
?>
打开终端窗口执行如下命令:
1
$ openssl pkcs12 -in 证书.p12 -out apns-dev.pem -nodes
2
3
Enter Import Password:
4
5
MAC verified OK
回车后需要输入密码,这个密码是导出“证书.p12”时候设置的密码。
PHP代码编写完成可以运行PHP了,有两种方法可以运行,一种是把这个文件放到Apache HTTP服务器目录下,并保证Apache下安装和 PHP,然后用浏览器运行,在浏览器中输入http://localhost/phpPNs/Pusher.php,这个URL是我自己 Apache HTTP服务器上的PHP文件。
另外一种方法,简单的多,我们不需要安装Apache HTTP服务器,只需要安装了PHP解释器就可以了,我们在终端中运行下面的指令:
$ php -f Pusher.php
连接OK
发送消息:{“aps”:{“alert”:”\u65b0\u5e74\u597d. from PHP”,”badge”:11,”sound”:”default”}}
这样就可以推送通知了,如果一切正常推送成功,用户的设备就可以接收到通知了。
使用Java推送服务
上面我们介绍了PHP实现的推送服务程序,使用其它语言编写基本的过程也一样的,这一节我们就介绍Java推送服务程序。由于具体的流程与PHP一 样,这里我们就不再自己编写Java的实现代码,而是使用别人已经封装好的javapns(http://code.google.com/p /javapns/)类库,它封装了socket实现细节问题,开发起来变的比较简单了。
下面代码是实现了推送的Java代码:
package com._51work6; import javapns.Push;import javapns.notification.PushNotificationPayload; public class Pusher { public static void main(String[] args) {try {PushNotificationPayload payload = new PushNotificationPayload(); ①payload.addCustomAlertBody(“新年好!from Java”); ②payload.addBadge(11); ③payload.addSound(“default”); ④ Push.payload(payload, ”ssl/证书.p12″, ”51work6.com”, false,“1634899aef6c71ed5c0667d6658677a914c5ec3b545887e8173854970dee24db”); ⑤ } catch (Exception e) {e.printStackTrace();}}}
上面的代码还依赖与下面的类库:bcprov-jdk15-146.jar、JavaPNS_2.2.jar和log4j-1.2.15.jar。 其中bcprov-jdk15-146.jar和JavaPNS_2.2.jar可以在http://code.google.com/p /javapns/下载到。log4j-1.2.15.jar到http://logging.apache.org/log4j/1.2 /download.html下载。
这个Java程序的运行我们就不再介绍了,它是一个Java Application可以在有jre环境运行,我们可以把它做成JavaWeb程序,这样就可以在浏览器中发送通知了。
准备工作
1.获取手机注册应用的deviceToken(iphone手机注册应用时返回唯一值deviceToken)
2.获取ck.pem文件(做手机端的给)
3.获取pass phrase(做手机端的给)
testpush.php文件
- <?php
- //手机注册应用返回唯一的deviceToken
- $deviceToken = '6ad7b13f b05e6137 a46a60ea 421e5016 4b701671 cc176f70 33bb9ef4 38a8aef9';
- //ck.pem通关密码
- $pass = 'jetson';
- //消息内容
- $message = 'A test message!';
- //badge我也不知是什么
- $badge = 4;
- //sound我也不知是什么(或许是推送消息到手机时的提示音)
- $sound = 'Duck.wav';
- //建设的通知有效载荷(即通知包含的一些信息)
- $body = array();
- $body['id'] = "4f94d38e7d9704f15c000055";
- $body['aps'] = array('alert' => $message);
- if ($badge)
- $body['aps']['badge'] = $badge;
- if ($sound)
- $body['aps']['sound'] = $sound;
- //把数组数据转换为json数据
- $payload = json_encode($body);
- echo strlen($payload),"\r\n";
- //下边的写法就是死写法了,一般不需要修改,
- //唯一要修改的就是:ssl://gateway.sandbox.push.apple.com:2195这个是沙盒测试地址,ssl://gateway.push.apple.com:2195正式发布地址
- $ctx = stream_context_create();
- stream_context_set_option($ctx, 'ssl', 'local_cert', 'ck.pem');
- stream_context_set_option($ctx, 'ssl', 'passphrase', $pass);
- $fp = stream_socket_client('ssl://gateway.sandbox.push.apple.com:2195', $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx);
- if (!$fp) {
- print "Failed to connect $err $errstr\n";
- return;
- }
- else {
- print "Connection OK\n<br/>";
- }
- // send message
- $msg = chr(0) . pack("n",32) . pack('H*', str_replace(' ', '', $deviceToken)) . pack("n",strlen($payload)) . $payload;
- print "Sending message :" . $payload . "\n";
- fwrite($fp, $msg);
- fclose($fp);
- ?>
- 服务器第三方ios推送方式
- iOS第三方推送(信鸽)
- iOS开发-推送-第三方推送-友盟推送
- C++实现文本消息推送--通过post请求方式访问第三方服务器从电脑向手机进行消息推送
- iOS开发-推送-第三方推送前期准备工作
- 第三方推送-极光推送
- 第三方--极光推送
- Android第三方推送
- 免费iOS第三方推送工具Urban Airship使用教程
- iOS推送所有流程(不使用第三方库)
- iOS第三方集成之jpush极光推送
- iOS入门编程之第三方推送服务的接入
- 友盟第三方推送
- 第三方推送已死
- 第三方推送服务比较
- Android第三方推送坑
- 第三方推送已死
- 使用第三方推送平台 极光推送
- 枚举PEB获取进程模块列表
- js弹出框、对话框、提示框、弹窗总结
- Struts学习(第三篇)——StrutsPrepareAndExecuteFilter拦截器源码
- Linux 系统Trouble shouting及修复FATAL: NO bootale medium found! System halted
- string json 相互转换
- 服务器第三方ios推送方式
- 004_013 Python 获取一个字典的子集
- wustoj1284Gold Medal(三进制思想)
- linux单机上安装hadoop
- 【CQOI2014】危桥
- 只运行一个实例进程的方法
- 微软过桥问题与测试人员素养
- VB获取时间
- Web: html_entity_decode、空格 以及乱码