当前位置:首页 > 嵌入式 > 嵌入式软件
[导读]1、iOS客户端编程推送通知技术在Mac OS X和iOS系统上都可以运行,我们本章主要介绍iOS客户端编程,推送通知的编程比较简单,编程的关键是获得令牌,这是从APNS返回的,然后

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从苹果公司返回,注册结束后的回调方法代码:

- (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代码:

$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[!--empirenews.page--]

//socket通讯

$fp = stream_socket_client(“ssl://gateway.sandbox.push.apple.com:2195″, $err, $errstr, 60,

STREAM_CLIENT_CONNECT, $ctx); ⑤

if (!$fp) {

echo ”连接失败.”;

return;

}

print ”连接OKn”;

//载荷信息,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文件。

另外一种方法,简单的多,我们不需要安装Apache HTTP服务器,只需要安装了PHP解释器就可以了,我们在终端中运行下面的指令:

$ php -f Pusher.php

连接OK

发送消息:{“aps”:{“alert”:”u65b0u5e74u597d. 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程序,这样就可以在浏览器中发送通知了。

本站声明: 本文章由作者或相关机构授权发布,目的在于传递更多信息,并不代表本站赞同其观点,本站亦不保证或承诺内容真实性等。需要转载请联系该专栏作者,如若文章内容侵犯您的权益,请及时联系本站删除。
换一批
延伸阅读

当地时间周一,埃隆・马斯克旗下人工智能初创公司 xAI 与社交媒体平台 X(原 Twitter)联合发起诉讼,指控苹果与 OpenAI 非法阻碍人工智能领域竞争,核心反对苹果将 ChatGPT 深度集成至 iOS 系统的...

关键字: 马斯克 苹果 OpenAI iOS ChatGPT

从按下快门前就对照片进行即时锐化,到通话过程中实时消除背景噪音,再到离线状态下与人工智能 (AI) 助手互动,端侧 AI 正在重塑移动体验。而 Arm 计算平台正是实现这些无缝交互体验的强劲驱动力。

关键字: 人工智能 iOS 安卓

北京2025年2月28日 /美通社/ -- 日前,《服务器操作系统迁移指南》(以下简称《指南》)经中国电子工业标准化技术协会批准后正式发布,将于3月正式实施。《指南》由浪潮信息牵头,中国电子技术标准化研究院、阿里云、统信...

关键字: 操作系统 编写 CPU 内存

创新能源储存解决方案旨在提升车辆安全性与效率 12V和48V电压架构合同的开创性签署,充分体现了本行业对Clarios先进超级电容器技术的坚定信心 威斯康星州格伦代尔2025年1月7日 /美通社/ --...

关键字: iOS 超级电容器 RIO 电力

北京2025年1月3日 /美通社/ -- 近日,人民日报海外网与中华环保联合会联合主办的第二届中国品牌形象海外传播论坛暨2024中国企业ESG蓝皮书发布会在北京举行。现场发布了《企业ESG蓝皮书:中国企业环境、社会与治理...

关键字: 可持续发展 WIND 智能化 编写

无锡2024年11月14日 /美通社/ -- 布勒集团受苏美达股份有限公司邀请,于2024年11月5日至10日,与线上线下17个国家108家品牌制造商一起,以"联动世界,共赢未来"为主题同台亮相第七届...

关键字: 数字化 HELIO iOS 智能制造

乔和比利从小就是好朋友。两家公司都在食品管理方面开展了各自的业务。乔是一个技术极客,而比利信奉老派风格。然而,在最初的5年里,Joe在食品行业获得了很多声誉,而Billy未能在业务中获得回报,因此计划关闭。

关键字: 物联网 食品工业 Android iOS

php 伪代码是一种非正式的类自然语言代码表示形式,用于描述算法逻辑,不受具体编程语言语法的限制。编写 php 伪代码的步骤包括:选择适当的结构(顺序、选择、循环)使用清晰的语法(关键词、缩进、注释)描述算法逻辑(简要句...

关键字: 伪代码 PHP

AppsFlyer 的最新发布的《2024 电商 App 营销现状报告》显示,建立客户关系、提高用户忠诚度将成为电商 App 销售旺季的制胜关键。 北京2024年8月22日 /美通社/ -- 全球营销衡量与体验管理平台...

关键字: 移动 APPS BSP iOS

实时操作系统是保证在一定时间限制内完成特定功能的操作系统。实时操作系统有硬实时和软实时之分,硬实时要求在规定的时间内必须完成操作,这是在操作系统设计时保证的;软实时则只要按照任务的优先级,尽可能快地完成操作即可。

关键字: OS iOS
关闭