`

推送通知iOS客户端编写实现及推送服务器端编写

阅读更多

1、iOS客户端编程

推送通知技术在Mac OS X和iOS系统上都可以运行,我们本章主要介绍iOS客户端编程,推送通知的编程比较简单,编程的关键是获得令牌,这是从APNS返回的,然后还有把提交给内容提供商。下面我们看看开发之前的一些准备工作。

 

配置Xcode工程

编写iOS推送应用需要在Xcode工程中进行一些配置,这些配置是主要是设置代码签名标识,代码签名标识的前提要有配置概要文件(Provisioning Profiles)。

有了配置概要文件即可以设置代码签名标识了,需要下载概要文件到本地,代码签名标识需要选择这个配置概要文件。选择TAGETS→MyNotes→Code Signing Identity,选择你自己的代码签名标识。

20

设置完成之后可以开始编码工作了。

代码实现

推送通知的代码实现主要分为两个步骤,第一步注册接收通知,第二步接收注册结果。这些工作都是在应用程序委托对象AppDelegate中实现的。

我们先看看注册部分的代码:

- (BOOL)application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

//注册接收通知类型

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:

(UIRemoteNotificationTypeBadge

| UIRemoteNotificationTypeSound

| UIRemoteNotificationTypeAlert)];

//设置图标标记

application.applicationIconBadgeNumber = 1;

return YES;

}

 

 

 

注册过程比较长,它通过APNS从苹果公司返回,注册结束后的回调方法代码:

- (void)application:(UIApplication*)application

didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken

{

NSLog(@”设备令牌: %@”, deviceToken); ①

NSString *tokeStr = [NSString stringWithFormat:@"%@",deviceToken];  ②

if ([tokeStr length] == 0) {

return;

}

NSCharacterSet *set = [NSCharacterSet characterSetWithCharactersInString:@"\<\>"];

tokeStr = [tokeStr stringByTrimmingCharactersInSet:set];  ③

tokeStr = [tokeStr stringByReplacingOccurrencesOfString:@" " withString:@""];  ④

NSString *strURL = @”http://192.168.1.103/push_chat_service.php”; ⑤

NSURL *url = [NSURL URLWithString:strURL];

ASIFormDataRequest *request = [ASIFormDataRequest requestWithURL:url];

[request setPostValue:tokeStr forKey:@"token"];

[request setPostValue:@"98Z3R5XU29.com.51work6.PushChat" forKey:@"appid" ];

[request setDelegate:self];

NSLog(@”发送给服务器”);

[request startAsynchronous];  ⑥

}

 

- (void)application:(UIApplication*)application

didFailToRegisterForRemoteNotificationsWithError:(NSError*)error

{

NSLog(@”获得令牌失败: %@”, error);

}

 

 

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,然后用浏览器运行,在浏览器中输入http://localhost/phpPNs/Pusher.php,这个URL是我自己 Apache HTTP服务器上的PHP文件。

21

另外一种方法,简单的多,我们不需要安装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程序,这样就可以在浏览器中发送通知了。

分享到:
评论

相关推荐

    远程推送客户端和服务器测试代码

    总的来说,远程推送客户端和服务器测试代码是iOS应用开发中的关键组成部分,它涉及到客户端的注册、接收和处理通知,以及服务器端的推送生成和测试。理解并掌握这些知识点对于开发出稳定、高效的远程推送系统至关...

    ios移动社交app的客户端+webservice服务器端源码

    - **通知推送**:使用APNs(Apple Push Notification service)发送消息通知,保持用户互动。 4. **ColorsTrip相关**: - ColorsTrip可能是应用的名称,也可能代表某种特定功能,如多彩旅行分享、颜色主题等,...

    ios手机端集成mqtt接受服务器推送消息源码

    在这个项目中,OC被用于编写iOS客户端代码,以接收来自MQTT服务器的推送消息。 3. **服务器端MQTT服务**:服务器端需要部署一个MQTT服务,例如使用Mosquitto、EMQ X Broker等开源MQTT服务器软件。服务器端负责处理...

    U盟消息推送_phpios推送_php安卓推送_thinkphp推送

    开发者需要设置Google API项目,获取服务器密钥和客户端ID,然后在PHP服务器端编写代码来连接FCM服务并发送消息。 最后,"thinkPHP推送"是指使用thinkPHP框架来实现消息推送功能。thinkPHP是中国流行的PHP开发框架...

    iOS实现从后台向手机客户端推送消息的代码[参考].pdf

    在iOS平台上,实现从后台向手机客户端推送消息是通过苹果的Push Notification Service (APNs)完成的。这个过程涉及到客户端的设置、服务器端的配置以及实际的推送代码。以下是一步步详细讲解如何实现这一功能: 1. ...

    IOS推送实例

    本实例将详细讲解如何实现iOS的推送服务,包括设置Apple Push Notification service (APNs)、配置证书、集成第三方库以及编写推送接收代码。 1. **Apple Push Notification Service (APNs)** APNs是Apple提供的...

    swift-基于Golang开发的iOS推送服务

    在iOS应用开发中,推送服务是一项至关重要的功能,它允许应用程序在后台接收并处理服务器发送的通知,从而提高用户体验。本文将深入探讨如何使用Golang语言来构建一个针对iOS设备的推送服务,同时也会涉及到Swift...

    iOS本地推送与远程推送详解

    远程推送的实现比本地推送复杂得多,因为它涉及到服务器端的编程以及与APNs的交互。 ##### 1. 服务器端准备 远程推送的第一步是在服务器端准备好要发送的消息。这通常包括消息内容、目标设备的令牌等信息。 #####...

    苹果推送服务

    为了确保推送通知的交付和接收,苹果推送通知服务还包含了对通知路径的详细说明,这涉及通知从服务器端到客户端设备的传递过程。此外,对于推送通知中的语言偏好,苹果推送通知服务也提供了一种机制,允许提供者向...

    极光推送服务器端代码

    总的来说,理解和掌握极光推送服务器端的代码编写,不仅能够提升移动应用的用户体验,也能帮助开发者更好地控制和优化消息推送的过程,提高消息推送的效率和精准度。通过Eclipse这样的开发工具,结合Java语言,可以...

    ios推送jar包

    - 设备令牌是每个iOS设备独有的,必须由客户端应用获取并发送到服务器端存储。 - 推送通知应尽量简洁,避免包含大量数据,以免超过APNs的限制。 - 为了优化性能,推送库通常会支持批量发送和错误处理机制。 5. *...

    极光推送服务器端

    【极光推送服务器端】是针对移动应用开发者提供的一种服务,旨在帮助他们实现高效、稳定且便捷的消息推送功能。极光推送(JPush)是由极光公司推出的一款专业的推送服务,它支持iOS和Android两大主流操作系统,使得...

    jsp iOS推送的包

    这个包包含了一系列的库文件,用于帮助开发者实现从服务器端向iOS客户端发送Push Notification服务。在iOS应用开发中,Push Notification是一项重要的功能,它允许应用程序在后台时接收服务器的消息,例如新消息提醒...

    IOS消息推送总结

    在iOS平台上,Apple Push ...总之,iOS消息推送涉及多个环节,包括APNs服务的理解、证书的创建与管理,以及客户端代码的编写和服务器端的配合。掌握这些知识点,开发者就能够为iOS用户提供无缝、高效的推送通知体验。

    ASP.NET WEB端消息推送源码

    在这个项目中,ASP.NET被用来处理服务器端逻辑,为Web客户端和移动设备提供数据。 其次,C#是ASP.NET的主要编程语言,它是一种面向对象的、类型安全的语言,设计时考虑了Web开发的需求。在源码中,C#将用于编写业务...

    ziliao.zip_Windows编程_C++_

    4. **推送通知iOS客户端编写实现及推送服务器端编写.doc**:iOS的推送通知服务(APNs)允许开发者在后台向用户的设备发送消息,即使应用没有运行。这份文档可能包含了客户端接收推送通知的配置以及服务器端发送推送...

    推聊是一个基于极光推送 (JPush) 的手机聊天系统。支持群聊与点对点聊天。当前包括 Android客户端、iOS.zip

    为了实现这一点,推聊系统需要在服务器端集成JPush的SDK,设置相应的API密钥,并处理推送事件。 Android客户端的开发通常涉及以下几个关键组件: 1. **消息接收器**:在Android端,推聊需要一个BroadcastReceiver...

    ios推送信息 php语言版

    总结起来,实现iOS推送信息的PHP版本涉及多个步骤,包括在iOS客户端获取deviceToken、在Apple Developer Portal配置推送服务并生成PEM证书,以及在服务端编写PHP代码来构造和发送推送通知。这个过程虽然较为复杂,但...

    云推送Demo

    "云推送Demo"是展示如何使用云推送服务的示例应用,它通常包括客户端集成、服务器端配置、消息推送逻辑以及接收和处理推送通知的代码。 1. **云推送服务**:云推送服务如Firebase Cloud Messaging (FCM)、Apple ...

    客户端与服务器端通讯

    本文将深入探讨客户端与服务器端通讯的原理、常用技术及其实现方法。 一、通讯协议 客户端与服务器间的通信基于各种网络协议,其中最常见的是HTTP(超文本传输协议)和HTTPS(安全版的HTTP)。HTTP用于传输静态内容...

Global site tag (gtag.js) - Google Analytics