国产亚洲欧美人成在线,免费视频爱爱太爽了无码,日本免费一区二区三区高清视频 ,国产真实伦对白精彩视频

歡迎您光臨深圳塔燈網(wǎng)絡(luò)科技有限公司!
電話圖標(biāo) 余先生:13699882642

網(wǎng)站百科

為您解碼網(wǎng)站建設(shè)的點(diǎn)點(diǎn)滴滴

IOS推送詳解

發(fā)表日期:2016-07 文章編輯:小燈 瀏覽次數(shù):3581

一.關(guān)于推送通知

推送通知,也被叫做遠(yuǎn)程通知,是在iOS

3.0以后被引入的功能。是當(dāng)程序沒(méi)有啟動(dòng)或不在前臺(tái)運(yùn)行時(shí),告訴用戶有新消息的一種途徑,是從外部服務(wù)器發(fā)送到應(yīng)用程序上的。一般說(shuō)來(lái),當(dāng)要顯示消息或

下載數(shù)據(jù)的時(shí)候,通知是由遠(yuǎn)程服務(wù)器(程序的提供者)發(fā)送,然后通過(guò)蘋果的推送通知服務(wù)(Apple Push Notification

Service,簡(jiǎn)稱apns)推送到設(shè)備的程序上。

送的新消息可能是一條信息、一項(xiàng)即將到期的日程或是一份遠(yuǎn)程服務(wù)器上的新數(shù)據(jù)。在系統(tǒng)上展現(xiàn)的時(shí)候,可以顯示警告信息或在程序icon上顯示數(shù)字,同時(shí),

也可以播放警告音。一旦用戶注意到程序有新的信息、時(shí)間或是數(shù)據(jù),他們可以運(yùn)行程序并訪問(wèn)新的內(nèi)容。也可以選擇忽略通知,這時(shí)程序?qū)⒉粫?huì)被激活。

iPhone, iPad和iPod touch上同一時(shí)刻只有一個(gè)app在前臺(tái)運(yùn)行。大多數(shù)程序在后臺(tái)運(yùn)行的時(shí)候,可以對(duì)某些用戶感興趣的內(nèi)容做出回應(yīng)(定時(shí)、或數(shù)據(jù)等)。推送通知能讓程序在這些事件發(fā)生的時(shí)候通知用戶。

為提供者為程序開(kāi)發(fā)和部署推送通知,必須通過(guò)iOS Developer Program

Portal獲得SSL證書(shū)。每個(gè)證書(shū)限用于一個(gè)程序,使用程序的bundle

ID作為標(biāo)識(shí)。證書(shū)有兩種用途的:一種是針對(duì)sandbox(用于開(kāi)發(fā)和測(cè)試),另外一種針對(duì)發(fā)布產(chǎn)品。這兩種運(yùn)行環(huán)境擁有為各自指定的IP地址并且需要

不同的證書(shū)。還必須為兩種不同的環(huán)境獲取各自的provisioning profiles。

APNS提供了兩項(xiàng)基本的服務(wù):消息推送和反饋服務(wù)。

息推送:使用流式TCP套接字將推送通知作為二進(jìn)制數(shù)據(jù)發(fā)送給APNs。消息推送有分別針對(duì)開(kāi)發(fā)和測(cè)試用的sandbox、發(fā)布產(chǎn)品的兩個(gè)接口,每個(gè)都有

各自的地址和端口。不管用哪個(gè)接口,都需要通過(guò)TLS或SSL,使用SSL證書(shū)來(lái)建立一個(gè)安全的信道。提供者編制通知信息,然后通過(guò)這個(gè)信道將其發(fā)送給

APNs。 注:sandbox:?? gateway.sandbox.push.apple.com:219

產(chǎn)品接口:gateway.push.apple.com:2195

饋服務(wù):可以得到針對(duì)某個(gè)程序的發(fā)送失敗記錄。提供者應(yīng)該使用反饋服務(wù)周期性檢查哪些設(shè)備一直收不到通知,不需要重復(fù)發(fā)送通知到這些設(shè)備,降低推送服務(wù)器

的負(fù)擔(dān)。 注:sandbox:feedback.push.apple.com:2196

產(chǎn)品接口:feedback.sandbox.push.apple.com:2196

二.Apple Push Notification的工作機(jī)制

自己的客戶端發(fā)送消息到自己應(yīng)用軟件的apns,apns發(fā)送消息到你的手機(jī)。這個(gè)是根據(jù)令牌識(shí)別的。手機(jī)在發(fā)送消息到你的應(yīng)用軟件。

首先是應(yīng)用程序注冊(cè)消息推送。

IOS跟APNS Server要deviceToken。應(yīng)用程序接受deviceToken。

應(yīng)用程序?qū)eviceToken發(fā)送給PUSH服務(wù)端程序(Provider)。

服務(wù)端程序向APNS服務(wù)發(fā)送消息。

APNS服務(wù)將消息發(fā)送給iPhone應(yīng)用程序。

1. Provider是指某個(gè)iPhone軟件的Push服務(wù)器,是我們將要開(kāi)發(fā)的服務(wù)器。

2. APNS 是Apple Push Notification Service(Apple Push服務(wù)器)的縮寫(xiě),是蘋果的服務(wù)器。

上圖可以分為三個(gè)階段:

第一階段:推送服務(wù)器(provider)把要發(fā)送的消息、目的iPhone的標(biāo)識(shí)打包,發(fā)給APNS;

第二階段:APNS在自身的已注冊(cè)Push服務(wù)的iPhone列表中,查找有相應(yīng)標(biāo)識(shí)的iPhone,并把消息發(fā)到iPhone;

第三階段:iPhone把發(fā)來(lái)的消息傳遞給相應(yīng)的應(yīng)用程序,并且按照設(shè)定彈出Push通知。

三 推送之前的配置

在任何iOS應(yīng)用開(kāi)發(fā)里面,開(kāi)發(fā)人員總是在團(tuán)隊(duì)里面扮演某一角色:團(tuán)隊(duì)經(jīng)理,團(tuán)隊(duì)管理員,和團(tuán)隊(duì)成員。iPhone開(kāi)發(fā)證書(shū)和配置文件由不同角色完成。通常團(tuán)隊(duì)經(jīng)理是團(tuán)隊(duì)里面唯一可以創(chuàng)建Development SSL證書(shū)(沙箱環(huán)境)和Distribution SSL證書(shū)(產(chǎn)品環(huán)境)的人。而團(tuán)隊(duì)經(jīng)理和團(tuán)隊(duì)管理員都可以創(chuàng)建Development和Distribution的配置文件。團(tuán)隊(duì)成員只能下載并安裝證書(shū)和配置文件(!這里要區(qū)別好證書(shū)和配置文件的概念:證書(shū),即Certificates,它主要是使用Access Key Chain來(lái)生成的一個(gè)簽名密鑰。而配置文件,即Provisioning profiles,它主要是根據(jù)不同的App來(lái)生成的針對(duì)性的代碼簽名文件。二者區(qū)別是一般一個(gè)開(kāi)發(fā)者賬戶只能有一個(gè)Certificates(而Development一個(gè),Distribtuion一個(gè)),但是可以有多個(gè)Provisioning profiles文件,且這些Provisioning profiles通常創(chuàng)建的時(shí)候都使用同一個(gè)Certrificates)。以下部分詳細(xì)介紹該過(guò)程。

注意:iOS Provisioning Portal給所有iOS開(kāi)發(fā)者。

創(chuàng)建SSL證書(shū)和密鑰

在iOS Dev Center的iOS Provisioning Portal里面,團(tuán)隊(duì)經(jīng)理選中相應(yīng)APNs的AppID。他需要完成以下步驟來(lái)創(chuàng)建SSL證書(shū):

1.

點(diǎn)擊窗口左邊側(cè)邊欄的App IDs。

將會(huì)跳轉(zhuǎn)到一個(gè)顯示當(dāng)前合法應(yīng)用IDs的頁(yè)面。每個(gè)應(yīng)用的ID前面包含了它的Bundle ID,而在Bundle ID之前包含了蘋果生成的十位字符串。團(tuán)隊(duì)管理員必須輸入Bundle ID。對(duì)于每個(gè)證書(shū),它必須匹配某一特定的Bundle ID,你不能使用“wildcart”的應(yīng)用ID。即要使用推送通知的應(yīng)用的Bundle ID不能使用“*”來(lái)創(chuàng)建。

2.

找到需要?jiǎng)?chuàng)建SSL證書(shū)的應(yīng)用ID(和Development Provisioning Profile相關(guān)),并單擊Configure按鈕。

你必須確保該App ID下面的蘋果推送通知服務(wù)欄下面顯示“可用”狀態(tài)才能為該應(yīng)用配置APNs證書(shū)。

3.

在App ID配置頁(yè)面,檢查已經(jīng)勾選了“Enable for Apple Push Notification service”復(fù)選框,并點(diǎn)擊下面的“Configure”按鈕。

單擊該按鈕將會(huì)啟動(dòng)APNs助理,它會(huì)通過(guò)一系列步驟來(lái)引導(dǎo)完成操作。

4.

第一步要求你啟動(dòng)Keychain Access應(yīng)用并生成一個(gè)Certificate Signing Request(CSR)文件。

下面的介紹來(lái)自證書(shū)助理。當(dāng)你完成生成CSR后,點(diǎn)擊Keychain Access上面Continue來(lái)返回到APNs Assistant。

當(dāng)你創(chuàng)建一個(gè)CSR時(shí),Keychain Access生成一個(gè)私有和公有的加密密鑰對(duì)。而私有的密鑰會(huì)默認(rèn)被放入你的Login keychain里面。而公有的密鑰包含CSR會(huì)發(fā)送到配置服務(wù)器。當(dāng)配置服務(wù)器把證書(shū)發(fā)回給你的時(shí)候,證書(shū)里面的其中一個(gè)條目將是公有密鑰。

5.

在Submit Certificate Signing Request面板上,單擊Choose File。導(dǎo)航到你之前創(chuàng)建的CSR文件的地方并選中它。

6.

單擊Generate按鈕。

在顯示Generate Your Certificate面板的同時(shí),Assistant會(huì)配置并生成你的客戶端SSL證書(shū)。如果生成成功,它將會(huì)顯示信息“Your APNs Certificate has been generated.”。單擊Continue來(lái)進(jìn)入下一步操作。

7.

在下一個(gè)面板,單擊Download Now按鈕來(lái)下載證書(shū)文件到本地文件夾。找到文件下載的地方并雙擊證書(shū)文件(該證書(shū)文件包含一個(gè).cer的擴(kuò)展名)來(lái)把它安裝到你的keychain里面。當(dāng)完成后,單擊APNs Assistant上面的Done按鈕。

雙擊加載啟動(dòng)Keychain Access。確保你已經(jīng)把剛才的證書(shū)安裝到了你用于開(kāi)發(fā)的電腦的login keychain里面。在Keychain Access里面,確保你的證書(shū)使用的ID匹配你應(yīng)用的Bundle ID。APNs的SSL證書(shū)應(yīng)該安裝到你的通知服務(wù)上面。

當(dāng)你返回到iOS Dev Center Portal的Configure App ID頁(yè)面完成這些步驟后,你的證書(shū)應(yīng)該會(huì)變成綠色,并且顯示“Enabled”。

為了給產(chǎn)品環(huán)境創(chuàng)建一個(gè)證書(shū),重復(fù)上述步驟,但記住選中產(chǎn)品證書(shū)的應(yīng)用ID。

團(tuán)隊(duì)經(jīng)理或團(tuán)隊(duì)管理器接下來(lái)必須創(chuàng)建在服務(wù)器用于遠(yuǎn)程通知開(kāi)發(fā)的配置證書(shū)(Development 或 Distribution)。配置文件就是一個(gè)集合,它囊括了和應(yīng)用相關(guān)的開(kāi)發(fā)者和開(kāi)發(fā)團(tuán)隊(duì)驗(yàn)證過(guò)的設(shè)備并使用這些設(shè)備來(lái)測(cè)試應(yīng)用程序。配置文件包含了證書(shū)、設(shè)備標(biāo)示符、應(yīng)用的Bundle ID、和所有權(quán)利,包括。所有團(tuán)隊(duì)程序需要在運(yùn)行并測(cè)試他們應(yīng)用代碼的設(shè)備上面安裝該配置文件。

注意:關(guān)于創(chuàng)建配置文件的詳細(xì)解析參考編程用戶指南。

為了下載并安裝配置文件,團(tuán)隊(duì)程序必須完成以下步驟:

1.

進(jìn)入iOS Dev Center的Provisioning portal頁(yè)面。

2.

創(chuàng)建一個(gè)新的配置文件,并包含你注冊(cè)用于APNs的App ID。

3.

在你下載這個(gè)新的配置文件之前修改任何已存在的配置文件。

你必須修改配置文件的一些細(xì)微部分(比如切換選項(xiàng))來(lái)生成一個(gè)新的配置文件。如果配置文件并沒(méi)有“受損(dirtied)”,你不應(yīng)該給以該原始配置文件任何推送的權(quán)利。

4.

找到文件的下載目錄,把該配置文件(通常是一個(gè).mobileprovision擴(kuò)展文件)拖拉到Xcode或iTunes應(yīng)用程序的圖標(biāo)上面。

可選的,你也可以把配置文件復(fù)制到~/Library/MobileDevice/Provisioning Profiles目錄。如果當(dāng)前目錄不存在則生成一個(gè)新目錄。

5.

驗(yàn)證該配置文件的權(quán)利是否正確。為此,使用文本編輯器打開(kāi).mobileprovision文件。該文件的內(nèi)容是一個(gè)XML的文本。查看在aps-environment鍵的位置的字典值。對(duì)于一個(gè)開(kāi)發(fā)模式的配置文件,該值應(yīng)該是development;而對(duì)應(yīng)發(fā)布模式的配置文件,該字符值應(yīng)該是production。

6.

在Xcode的Organizer窗口,查看Provisioning Profiles部分,并確認(rèn)證書(shū)已經(jīng)安裝到你的設(shè)備上面。

當(dāng)你編譯該工程的時(shí)候,二進(jìn)制文件現(xiàn)在使用證書(shū)的私有密鑰簽名。

4.2.3

安裝SSL證書(shū)和密鑰到你的服務(wù)器上面

你必須安裝SSL發(fā)布證書(shū)和你之前獲取的私有加密密鑰到需要運(yùn)行提供者代碼的服務(wù)器上,從該服務(wù)器連接到APNs的沙箱或產(chǎn)品環(huán)境。為此,需要完成以下步驟:

1.

打開(kāi)Keychain Access實(shí)體并單擊左邊面板的My Certificates類別。

2.

找到你將要安裝的證書(shū),并打開(kāi)相應(yīng)內(nèi)容。

你將會(huì)看到證書(shū)和私有密鑰。

3.

選中證書(shū)和密鑰,選中File > Export Items,并把它們導(dǎo)出個(gè)人信息交換文件(.p12)。

4.

如果服務(wù)器采用Buby或Perl語(yǔ)言來(lái)實(shí)現(xiàn)的話,那么它們更容易處理個(gè)人信息交換格式的文件。為了把證書(shū)轉(zhuǎn)換為該格式,需要完成以下步驟:

a)

在Keychain Access里面,選中相應(yīng)證書(shū)并選擇File > Export Items。選擇個(gè)人信息交換格式選項(xiàng)(.p12)。選擇一個(gè)保存地址,并單擊Save按鈕。

b)

加載終端應(yīng)用,并輸入如下的命令:

openssl pkcs12 -in CertificateName.p12 -out CertificateName.pem -nodes

5.

拷貝.pem證書(shū)文件到新的電腦并安裝它到合適的地方。

這次準(zhǔn)備工作已經(jīng)完成了。

下面是客戶端的步驟了

一個(gè)應(yīng)用程序必須在設(shè)備(iOS設(shè)備或Mac電腦)上面注冊(cè)了蘋果推送通知服務(wù)才能接收來(lái)自程序提供者的遠(yuǎn)程通知。

注冊(cè)過(guò)程包含以下三個(gè)步驟:

一個(gè)應(yīng)用程序必須在設(shè)備(iOS設(shè)備或Mac電腦)上面注冊(cè)了蘋果推送通知服務(wù)才能接收來(lái)自程序提供者的遠(yuǎn)程通知。

注冊(cè)過(guò)程包含以下三個(gè)步驟:

1.

程序調(diào)用registerForRemoteNotificationTypes:方法。

2.

委托實(shí)現(xiàn)application:didRegisterForRemoteNotificationsWithDeviceToken:方法來(lái)接收設(shè)備令牌。

3.

把設(shè)備令牌作為非對(duì)象(二進(jìn)制值)傳遞給程序提供者。

1.

程序調(diào)用registerForRemoteNotificationTypes:方法。

2.

委托實(shí)現(xiàn)application:didRegisterForRemoteNotificationsWithDeviceToken:方法來(lái)接收設(shè)備令牌。

3.

把設(shè)備令牌作為非對(duì)象(二進(jìn)制值)傳遞給程序提供者。

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions

{

self.window = [[[UIWindow alloc] initWithFrame:[[UIScreen mainScreen] bounds]] autorelease];

// Override point for customization after application launch.

self.viewController = [[[ViewController alloc] init] autorelease];

self.window.rootViewController = self.viewController;

[self.window setBackgroundColor:[UIColor colorWithPatternImage:[UIImage imageNamed:@"background.png"]]];

[self.window makeKeyAndVisible];

/** 注冊(cè)推送通知功能, */

[[UIApplication sharedApplication]

registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert |

UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];

//判斷程序是不是由推送服務(wù)完成的

if(launchOptions) {

NSDictionary* pushNotificationKey = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

if(pushNotificationKey) {

UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"推送通知"

message:@"這是通過(guò)推送窗口啟動(dòng)的程序,你可以在這里處理推送內(nèi)容"

delegate:nil

cancelButtonTitle:@"知道了"

otherButtonTitles:nil, nil];

[alert show];

[alert release];

}

}

returnYES;

}

- (void)application:(UIApplication *)app didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

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

NSLog(@"apns -> 生成的devToken:%@", token);

//把deviceToken發(fā)送到我們的推送服務(wù)器

DeviceSender* sender = [[[DeviceSender alloc]initWithDelegate:self ]autorelease];

[sender sendDeviceToPushServer:token ];

}

- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err {

NSLog(@"apns -> 注冊(cè)推送功能時(shí)發(fā)生錯(cuò)誤, 錯(cuò)誤信息:\n %@", err);

}

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo

{

NSLog(@"\napns -> didReceiveRemoteNotification,Receive Data:\n%@", userInfo);

//把icon上的標(biāo)記數(shù)字設(shè)置為0,

application.applicationIconBadgeNumber = 0;

if([[userInfo objectForKey:@"aps"] objectForKey:@"alert"]!=NULL) {

UIAlertView* alert = [[UIAlertView alloc] initWithTitle:@"**推送消息**"

message:[[userInfo objectForKey:@"aps"] objectForKey:@"alert"]

delegate:self

cancelButtonTitle:@"關(guān)閉"

otherButtonTitles:@"處理推送內(nèi)容",nil];

alert.tag = alert_tag_push;

[alert show];

}

}

至此已經(jīng)可以了,如果沒(méi)有服務(wù)器端可以參考pushMebaby


本頁(yè)內(nèi)容由塔燈網(wǎng)絡(luò)科技有限公司通過(guò)網(wǎng)絡(luò)收集編輯所得,所有資料僅供用戶學(xué)習(xí)參考,本站不擁有所有權(quán),如您認(rèn)為本網(wǎng)頁(yè)中由涉嫌抄襲的內(nèi)容,請(qǐng)及時(shí)與我們聯(lián)系,并提供相關(guān)證據(jù),工作人員會(huì)在5工作日內(nèi)聯(lián)系您,一經(jīng)查實(shí),本站立刻刪除侵權(quán)內(nèi)容。本文鏈接:http://jstctz.cn/20511.html
相關(guān)開(kāi)發(fā)語(yǔ)言
 八年  行業(yè)經(jīng)驗(yàn)

多一份參考,總有益處

聯(lián)系深圳網(wǎng)站公司塔燈網(wǎng)絡(luò),免費(fèi)獲得網(wǎng)站建設(shè)方案及報(bào)價(jià)

咨詢相關(guān)問(wèn)題或預(yù)約面談,可以通過(guò)以下方式與我們聯(lián)系

業(yè)務(wù)熱線:余經(jīng)理:13699882642

Copyright ? 2013-2018 Tadeng NetWork Technology Co., LTD. All Rights Reserved.