推送通知iOS客户端编写实现及推送服务器端编写
1、iOS客户端编程
推送通知技术在Mac OS X和iOS系统上都可以运行,我们本章主要介绍iOS客户端编程,推送通知的编程比较简单,编程的关键是获得令牌,这是从APNS返回的,然后还有把提交给内容提供商。下面我们看看开发之前的一些准备工作。
配置Xcode工程
编写iOS推送应用需要在Xcode工程中进行一些配置,这些配置是主要是设置代码签名标识,代码签名标识的前提要有配置概要文件(Provisioning Profiles)。
有了配置概要文件即可以设置代码签名标识了,需要下载概要文件到本地,代码签名标识需要选择这个配置概要文件。选择TAGETS→MyNotes→Code Signing Identity,选择你自己的代码签名标识。

设置完成之后可以开始编码工作了。
代码实现
推送通知的代码实现主要分为两个步骤,第一步注册接收通知,第二步接收注册结果。这些工作都是在应用程序委托对象AppDelegate中实现的。
我们先看看注册部分的代码:
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //注册接收通知类型 [[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)]; //设置图标标记 application.applicationIconBadgeNumber = 1; return YES; }
注册过程比较长,它通过APNS从苹果公司返回,注册结束后的回调方法代码:
2、推送服务端编程
内容提供者接收到设备的令牌并保存起来,在有新的内容需要推送的时候,他们将启动一个服务程序逐个设备推送他们的内容。在推送具体的过程中并非直接 由内容提供者,直接发送给用户设备,而是服务程序与APNS通讯建立信任连接,然后把数据推送给APNS,再由APNS利用安全通道推送给用户设备。
如果要编写内容提供者的推送服务程序,我们需要进行SSL认证编程,以及构建APNS数据包,数据包分为3个主要部分:Command(命令)、deviceToken(令牌)和Payload(载荷)。载荷不能超过256字节,是JSON格式,例如:
{“aps” : { “alert” : ”You got your emails.”, “badge” : 9, “sound” : ”bingbong.aiff” } }
作为推出服务程序可以使用很多计算机语言实现,如果从便于管理角度看,使用PHP、Java和.NET,甚至是Note.js都是可以选择的。本书重点介绍PHP和Java编写推送服务程序。
使用PHP实现推送服务
PHP是非常不错的服务器端脚本,这么多年来没有被JavaEE和.NET蚕食掉,说明它有过人之处。PHP编程简单很多人原意使用,实现本章推送服务也很简单。下面代码是实现了推送的PHP代码:
<?php $deviceToken= ’1634899aef6c71ed5c0667d6658677a914c5ec3b545887e8173854970dee24db’; //推送方式,包含内容和声音 $body = array(“aps” => array(“alert” => ’新年好. from PHP’,”badge” => 11,”sound”=>’default’)); ① //创建数据流上下文对象 $ctx = stream_context_create(); //设置pem格式文件 $pem = ”apns-dev.pem”; ② //设置数据流上下文的本地认证证书 stream_context_set_option($ctx,”ssl”,”local_cert”, $pem); ③ $pass = ”51work6.com”; //设置数据流上下文的密码 stream_context_set_option($ctx, ’ssl’, ’passphrase’, $pass); ④ //产品发布APNS服务器,gateway.push.apple.com //测试APNS服务器,gateway.sandbox.push.apple.com //socket通讯 $fp = stream_socket_client(“ssl://gateway.sandbox.push.apple.com:2195″, $err, $errstr, 60, STREAM_CLIENT_CONNECT, $ctx); ⑤ if (!$fp) { echo ”连接失败.”; return; } print ”连接OK\n”; //载荷信息,JSON编码 $payload = json_encode($body); ⑥ //构建发送的二进制信息 $msg = chr(0) . pack(“n”,32) . pack(“H*”, str_replace(‘ ’, ”, $deviceToken)) . ack(“n”,strlen($payload)) . $payload; ⑦ echo ”发送消息:” . $payload .”\n”; fwrite($fp, $msg); fclose($fp); ?>
打开终端窗口执行如下命令:
$ openssl pkcs12 -in 证书.p12 -out apns-dev.pem -nodes
Enter Import Password:
MAC verified OK
回车后需要输入密码,这个密码是导出“证书.p12”时候设置的密码。
PHP代码编写完成可以运行PHP了,有两种方法可以运行,一种是把这个文件放到Apache HTTP服务器目录下,并保证Apache下安装和 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( /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可以在 /javapns/下载到。log4j-1.2.15.jar到 /download.html下载。
这个Java程序的运行我们就不再介绍了,它是一个Java Application可以在有jre环境运行,我们可以把它做成JavaWeb程序,这样就可以在浏览器中发送通知了。
相关热词:
本站内容来源于网络,如有侵权请与我们联系,我们会及时删除,我们深感抱歉!
注:本站所有信息仅供用于网络技术学习参考,学习中请遵循相关法律法规!
本文地址: https://www.juheyunku.com/jiaob/ios/9923.shtml
热门TAG
命令 权重 外链 企业网站 白帽 php 织梦教程 dedecms修改内容 javascript 织梦 功能 标签 调用 详解 服务器 网站流量 实例解析 Dedecms 织梦cms HTML tags标签 python jquery教程 jquery windows SEO优化 蜘蛛 搜索引擎 网站收录 JSP最新文章
-
使用Vmware虚拟机部署Swif
时间:2020-12-27
-
cocos2d-x3.0游戏开发xcode5环
时间:2020-12-27
-
iOS开发UITabBarController详解
时间:2020-12-27
-
推送通知iOS客户端编写实
时间:2020-12-27
-
(译)快速指南:用UIViewPr
时间:2020-12-27
-
iOS中UIWebView加载网络数据
时间:2020-12-27
-
iOS开发 UIActivityViewControl
时间:2020-12-27
-
iOS开发笔记8:Remote Notif
时间:2020-12-27
热门文章
-
iOS中UIWebView加载网络数据技术分享
时间:2020-12-27
-
推送通知iOS客户端编写实现及推送服务器
时间:2020-12-27
-
iOS开发 UIActivityViewController详解
时间:2020-12-27
-
AppleScript学习笔记(一)初识AppleScript
时间:2020-12-27
-
cocos2d-x3.0游戏开发xcode5环境的搭建以及项
时间:2020-12-27
-
(译)快速指南:用UIViewPropertyAnimator做动画
时间:2020-12-27
-
使用Vmware虚拟机部署Swift开发环境之MacO
时间:2020-12-27
-
iOS开发UITabBarController详解
时间:2020-12-27
-
iOS开发笔记8:Remote Notification远程消息推
时间:2020-12-27
