日本黄色一级经典视频|伊人久久精品视频|亚洲黄色色周成人视频九九九|av免费网址黄色小短片|黄色Av无码亚洲成年人|亚洲1区2区3区无码|真人黄片免费观看|无码一级小说欧美日免费三级|日韩中文字幕91在线看|精品久久久无码中文字幕边打电话

當(dāng)前位置:首頁 > 嵌入式 > 嵌入式軟件
[導(dǎo)讀]1、iOS客戶端編程推送通知技術(shù)在Mac OS X和iOS系統(tǒng)上都可以運(yùn)行,我們本章主要介紹iOS客戶端編程,推送通知的編程比較簡單,編程的關(guān)鍵是獲得令牌,這是從APNS返回的,然后

1、iOS客戶端編程

推送通知技術(shù)在Mac OS X和iOS系統(tǒng)上都可以運(yùn)行,我們本章主要介紹iOS客戶端編程,推送通知的編程比較簡單,編程的關(guān)鍵是獲得令牌,這是從APNS返回的,然后還有把提交給內(nèi)容提供商。下面我們看看開發(fā)之前的一些準(zhǔn)備工作。

配置Xcode工程

編寫iOS推送應(yīng)用需要在Xcode工程中進(jìn)行一些配置,這些配置是主要是設(shè)置代碼簽名標(biāo)識(shí),代碼簽名標(biāo)識(shí)的前提要有配置概要文件(Provisioning Profiles)。

有了配置概要文件即可以設(shè)置代碼簽名標(biāo)識(shí)了,需要下載概要文件到本地,代碼簽名標(biāo)識(shí)需要選擇這個(gè)配置概要文件。選擇TAGETS→MyNotes→Code Signing Identity,選擇你自己的代碼簽名標(biāo)識(shí)。

設(shè)置完成之后可以開始編碼工作了。

代碼實(shí)現(xiàn)

推送通知的代碼實(shí)現(xiàn)主要分為兩個(gè)步驟,第一步注冊接收通知,第二步接收注冊結(jié)果。這些工作都是在應(yīng)用程序委托對(duì)象AppDelegate中實(shí)現(xiàn)的。

我們先看看注冊部分的代碼:

- (BOOL)application:(UIApplication *)application

didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

//注冊接收通知類型

[[UIApplication sharedApplication] registerForRemoteNotificationTypes:

(UIRemoteNotificationTypeBadge

| UIRemoteNotificationTypeSound

| UIRemoteNotificationTypeAlert)];

//設(shè)置圖標(biāo)標(biāo)記

application.applicationIconBadgeNumber = 1;

return YES;

}

注冊過程比較長,它通過APNS從蘋果公司返回,注冊結(jié)束后的回調(diào)方法代碼:

- (void)application:(UIApplication*)application

didRegisterForRemoteNotificationsWithDeviceToken:(NSData*)deviceToken

{

NSLog(@”設(shè)備令牌: %@”, 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(@”發(fā)送給服務(wù)器”);

[request startAsynchronous]; ⑥

}

- (void)application:(UIApplication*)application

didFailToRegisterForRemoteNotificationsWithError:(NSError*)error

{

NSLog(@”獲得令牌失敗: %@”, error);

}

2、推送服務(wù)端編程

內(nèi)容提供者接收到設(shè)備的令牌并保存起來,在有新的內(nèi)容需要推送的時(shí)候,他們將啟動(dòng)一個(gè)服務(wù)程序逐個(gè)設(shè)備推送他們的內(nèi)容。在推送具體的過程中并非直接 由內(nèi)容提供者,直接發(fā)送給用戶設(shè)備,而是服務(wù)程序與APNS通訊建立信任連接,然后把數(shù)據(jù)推送給APNS,再由APNS利用安全通道推送給用戶設(shè)備。

如果要編寫內(nèi)容提供者的推送服務(wù)程序,我們需要進(jìn)行SSL認(rèn)證編程,以及構(gòu)建APNS數(shù)據(jù)包,數(shù)據(jù)包分為3個(gè)主要部分:Command(命令)、deviceToken(令牌)和Payload(載荷)。載荷不能超過256字節(jié),是JSON格式,例如:

{“aps” : {

“alert” : ”You got your emails.”,

“badge” : 9,

“sound” : ”bingbong.aiff”

}

}

作為推出服務(wù)程序可以使用很多計(jì)算機(jī)語言實(shí)現(xiàn),如果從便于管理角度看,使用PHP、Java和.NET,甚至是Note.js都是可以選擇的。本書重點(diǎn)介紹PHP和Java編寫推送服務(wù)程序。

使用PHP實(shí)現(xiàn)推送服務(wù)

PHP是非常不錯(cuò)的服務(wù)器端腳本,這么多年來沒有被JavaEE和.NET蠶食掉,說明它有過人之處。PHP編程簡單很多人原意使用,實(shí)現(xiàn)本章推送服務(wù)也很簡單。下面代碼是實(shí)現(xiàn)了推送的PHP代碼:

$deviceToken= ’1634899aef6c71ed5c0667d6658677a914c5ec3b545887e8173854970dee24db’;

//推送方式,包含內(nèi)容和聲音

$body = array(“aps” => array(“alert” => ’新年好. from PHP’,”badge” => 11,”sound”=>’default’)); ①

//創(chuàng)建數(shù)據(jù)流上下文對(duì)象

$ctx = stream_context_create();

//設(shè)置pem格式文件

$pem = ”apns-dev.pem”; ②

//設(shè)置數(shù)據(jù)流上下文的本地認(rèn)證證書

stream_context_set_option($ctx,”ssl”,”local_cert”, $pem); ③

$pass = ”51work6.com”;

//設(shè)置數(shù)據(jù)流上下文的密碼

stream_context_set_option($ctx, ’ssl’, ’passphrase’, $pass); ④

//產(chǎn)品發(fā)布APNS服務(wù)器,gateway.push.apple.com

//測試APNS服務(wù)器,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); ⑥

//構(gòu)建發(fā)送的二進(jìn)制信息

$msg = chr(0) . pack(“n”,32) . pack(“H*”, str_replace(‘ ’, ”, $deviceToken))

. ack(“n”,strlen($payload)) . $payload; ⑦

echo ”發(fā)送消息:” . $payload .”n”;

fwrite($fp, $msg);

fclose($fp);

?>

打開終端窗口執(zhí)行如下命令:

$ openssl pkcs12 -in 證書.p12 -out apns-dev.pem -nodes

Enter Import Password:

MAC verified OK

回車后需要輸入密碼,這個(gè)密碼是導(dǎo)出“證書.p12”時(shí)候設(shè)置的密碼。

PHP代碼編寫完成可以運(yùn)行PHP了,有兩種方法可以運(yùn)行,一種是把這個(gè)文件放到Apache HTTP服務(wù)器目錄下,并保證Apache下安裝和 PHP,然后用瀏覽器運(yùn)行,在瀏覽器中輸入http://localhost/phpPNs/Pusher.php,這個(gè)URL是我自己 Apache HTTP服務(wù)器上的PHP文件。

另外一種方法,簡單的多,我們不需要安裝Apache HTTP服務(wù)器,只需要安裝了PHP解釋器就可以了,我們在終端中運(yùn)行下面的指令:

$ php -f Pusher.php

連接OK

發(fā)送消息:{“aps”:{“alert”:”u65b0u5e74u597d. from PHP”,”badge”:11,”sound”:”default”}}

這樣就可以推送通知了,如果一切正常推送成功,用戶的設(shè)備就可以接收到通知了。

使用Java推送服務(wù)

上面我們介紹了PHP實(shí)現(xiàn)的推送服務(wù)程序,使用其它語言編寫基本的過程也一樣的,這一節(jié)我們就介紹Java推送服務(wù)程序。由于具體的流程與PHP一 樣,這里我們就不再自己編寫Java的實(shí)現(xiàn)代碼,而是使用別人已經(jīng)封裝好的javapns(http://code.google.com/p /javapns/)類庫,它封裝了socket實(shí)現(xiàn)細(xì)節(jié)問題,開發(fā)起來變的比較簡單了。

下面代碼是實(shí)現(xiàn)了推送的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下載。

這個(gè)Java程序的運(yùn)行我們就不再介紹了,它是一個(gè)Java Application可以在有jre環(huán)境運(yùn)行,我們可以把它做成JavaWeb程序,這樣就可以在瀏覽器中發(fā)送通知了。

本站聲明: 本文章由作者或相關(guān)機(jī)構(gòu)授權(quán)發(fā)布,目的在于傳遞更多信息,并不代表本站贊同其觀點(diǎn),本站亦不保證或承諾內(nèi)容真實(shí)性等。需要轉(zhuǎn)載請(qǐng)聯(lián)系該專欄作者,如若文章內(nèi)容侵犯您的權(quán)益,請(qǐng)及時(shí)聯(lián)系本站刪除。
換一批
延伸閱讀

當(dāng)?shù)貢r(shí)間周一,埃隆?馬斯克旗下人工智能初創(chuàng)公司 xAI 與社交媒體平臺(tái) X(原 Twitter)聯(lián)合發(fā)起訴訟,指控蘋果與 OpenAI 非法阻礙人工智能領(lǐng)域競爭,核心反對(duì)蘋果將 ChatGPT 深度集成至 iOS 系統(tǒng)的...

關(guān)鍵字: 馬斯克 蘋果 OpenAI iOS ChatGPT

從按下快門前就對(duì)照片進(jìn)行即時(shí)銳化,到通話過程中實(shí)時(shí)消除背景噪音,再到離線狀態(tài)下與人工智能 (AI) 助手互動(dòng),端側(cè) AI 正在重塑移動(dòng)體驗(yàn)。而 Arm 計(jì)算平臺(tái)正是實(shí)現(xiàn)這些無縫交互體驗(yàn)的強(qiáng)勁驅(qū)動(dòng)力。

關(guān)鍵字: 人工智能 iOS 安卓

北京2025年2月28日 /美通社/ -- 日前,《服務(wù)器操作系統(tǒng)遷移指南》(以下簡稱《指南》)經(jīng)中國電子工業(yè)標(biāo)準(zhǔn)化技術(shù)協(xié)會(huì)批準(zhǔn)后正式發(fā)布,將于3月正式實(shí)施?!吨改稀酚衫顺毙畔款^,中國電子技術(shù)標(biāo)準(zhǔn)化研究院、阿里云、統(tǒng)信...

關(guān)鍵字: 操作系統(tǒng) 編寫 CPU 內(nèi)存

創(chuàng)新能源儲(chǔ)存解決方案旨在提升車輛安全性與效率 12V和48V電壓架構(gòu)合同的開創(chuàng)性簽署,充分體現(xiàn)了本行業(yè)對(duì)Clarios先進(jìn)超級(jí)電容器技術(shù)的堅(jiān)定信心 威斯康星州格倫代爾2025年1月7日 /美通社/ --...

關(guān)鍵字: iOS 超級(jí)電容器 RIO 電力

北京2025年1月3日 /美通社/ -- 近日,人民日?qǐng)?bào)海外網(wǎng)與中華環(huán)保聯(lián)合會(huì)聯(lián)合主辦的第二屆中國品牌形象海外傳播論壇暨2024中國企業(yè)ESG藍(lán)皮書發(fā)布會(huì)在北京舉行?,F(xiàn)場發(fā)布了《企業(yè)ESG藍(lán)皮書:中國企業(yè)環(huán)境、社會(huì)與治理...

關(guān)鍵字: 可持續(xù)發(fā)展 WIND 智能化 編寫

無錫2024年11月14日 /美通社/ -- 布勒集團(tuán)受蘇美達(dá)股份有限公司邀請(qǐng),于2024年11月5日至10日,與線上線下17個(gè)國家108家品牌制造商一起,以"聯(lián)動(dòng)世界,共贏未來"為主題同臺(tái)亮相第七屆...

關(guān)鍵字: 數(shù)字化 HELIO iOS 智能制造

喬和比利從小就是好朋友。兩家公司都在食品管理方面開展了各自的業(yè)務(wù)。喬是一個(gè)技術(shù)極客,而比利信奉老派風(fēng)格。然而,在最初的5年里,Joe在食品行業(yè)獲得了很多聲譽(yù),而Billy未能在業(yè)務(wù)中獲得回報(bào),因此計(jì)劃關(guān)閉。

關(guān)鍵字: 物聯(lián)網(wǎng) 食品工業(yè) Android iOS

php 偽代碼是一種非正式的類自然語言代碼表示形式,用于描述算法邏輯,不受具體編程語言語法的限制。編寫 php 偽代碼的步驟包括:選擇適當(dāng)?shù)慕Y(jié)構(gòu)(順序、選擇、循環(huán))使用清晰的語法(關(guān)鍵詞、縮進(jìn)、注釋)描述算法邏輯(簡要句...

關(guān)鍵字: 偽代碼 PHP

AppsFlyer 的最新發(fā)布的《2024 電商?App 營銷現(xiàn)狀報(bào)告》顯示,建立客戶關(guān)系、提高用戶忠誠度將成為電商?App 銷售旺季的制勝關(guān)鍵。 北京2024年8月22日 /美通社/ -- 全球營銷衡量與體驗(yàn)管理平臺(tái)...

關(guān)鍵字: 移動(dòng) APPS BSP iOS

實(shí)時(shí)操作系統(tǒng)是保證在一定時(shí)間限制內(nèi)完成特定功能的操作系統(tǒng)。實(shí)時(shí)操作系統(tǒng)有硬實(shí)時(shí)和軟實(shí)時(shí)之分,硬實(shí)時(shí)要求在規(guī)定的時(shí)間內(nèi)必須完成操作,這是在操作系統(tǒng)設(shè)計(jì)時(shí)保證的;軟實(shí)時(shí)則只要按照任務(wù)的優(yōu)先級(jí),盡可能快地完成操作即可。

關(guān)鍵字: OS iOS
關(guān)閉