欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

iOS實(shí)現(xiàn)遠(yuǎn)程推送原理及過(guò)程

 更新時(shí)間:2016年05月12日 15:54:37   作者:紹棠1805095054  
這篇文章主要為大家詳細(xì)介紹了iOS實(shí)現(xiàn)遠(yuǎn)程推送原理及具體過(guò)程,圖文結(jié)合的方式針對(duì)iOS遠(yuǎn)程推送進(jìn)行分析,感興趣的小伙伴們可以參考一下

推送通知,是現(xiàn)在的應(yīng)用必不可少的功能。那么在 iOS 中,我們是如何實(shí)現(xiàn)遠(yuǎn)程推送的呢?iOS 的遠(yuǎn)程推送原理又是什么呢?在做 iOS 遠(yuǎn)程推送時(shí),我們會(huì)遇到各種各樣的問(wèn)題。那么首先讓我們準(zhǔn)備一些做推送需要的東西。我們需要一個(gè)付費(fèi)的蘋果開發(fā)者賬號(hào)(免費(fèi)的不可以做遠(yuǎn)程推送),有了開發(fā)者賬號(hào),我們可以去蘋果開發(fā)者網(wǎng)站,配置自己所需要的推送的相關(guān)證書。然后下載證書,供我們后面使用,詳細(xì)的證書配置過(guò)程,我們下面再說(shuō)。

首先我們要說(shuō)說(shuō)iOS推送通知的基本原理

蘋果的推送服務(wù)通知是由自己專門的推送服務(wù)器APNs (Apple Push Notification service)來(lái)完成的,其過(guò)程是 APNs 接收到我們自己的應(yīng)用服務(wù)器發(fā)出的被推送的消息,將這條消息推送到指定的 iOS 的設(shè)備上,然后再由 iOS設(shè)備通知到我們的應(yīng)用程序,我們將會(huì)以通知或者聲音的形式收到推送回來(lái)的消息。 iOS 遠(yuǎn)程推送的前提是,裝有我們應(yīng)用程序的 iOS 設(shè)備,需要向 APNs 服務(wù)器注冊(cè),注冊(cè)成功后,APNs 服務(wù)器將會(huì)給我們返回一個(gè) devicetoken,我們獲取到這個(gè) token 后會(huì)將這個(gè) token 發(fā)送給我們自己的應(yīng)用服務(wù)器。當(dāng)我們需要推送消息時(shí),我們的應(yīng)用服務(wù)器將消息按照指定的格式進(jìn)行打包,然后結(jié)合 iOS 設(shè)備的 devicetoken 一起發(fā)給 APNs 服務(wù)器。我們的應(yīng)用會(huì)和 APNs 服務(wù)器維持一個(gè)基于 TCP 的長(zhǎng)連接,APNs 服務(wù)器將新消息推送到iOS 設(shè)備上,然后在設(shè)備屏幕上顯示出推送的消息。

設(shè)備注冊(cè)APNs的流程圖

1.2222.png

上圖完成了如下步驟:

1.Device(設(shè)備)連接APNs服務(wù)器并攜帶設(shè)備序列號(hào)(UUID)

2.連接成功,APNs經(jīng)過(guò)打包和處理產(chǎn)生devicetoken并返回給注冊(cè)的Device(設(shè)備)

3.Device(設(shè)備)攜帶獲取的devicetoken發(fā)送到我們自己的應(yīng)用服務(wù)器

4.完成需要被推送的Device(設(shè)備)在APNs服務(wù)器和我們自己的應(yīng)用服務(wù)器的注冊(cè)

推送過(guò)程圖:

1.333.png

推送的過(guò)程經(jīng)過(guò)如下步驟

1.首先,我們的設(shè)備安裝了具有推送功能的應(yīng)用(應(yīng)用程序要用代碼注冊(cè)消息推動(dòng)),我們的 iOS設(shè)備在有網(wǎng)絡(luò)的情況下會(huì)連接APNs推送服務(wù)器,連接過(guò)程中,APNS 服務(wù)器會(huì)驗(yàn)證devicetoken,連接成功后維持一個(gè)基于TCP 的長(zhǎng)連接;

2.Provider(我們自己的應(yīng)用服務(wù)器)收到需要被推送的消息并結(jié)合被推送的 iOS設(shè)備的devicetoken一起打包發(fā)送給APNS服務(wù)器;

3.APNS服務(wù)器將推送信息推送給指定devicetoken的iOS設(shè)備;

4.iOS設(shè)備收到推送消息后通知我們的應(yīng)用程序并顯示和提示用戶(聲音、彈出框)

比較直觀的流程圖:

1.33.png

信息包結(jié)構(gòu)圖:

1.2323.png

上圖顯示的這個(gè)消息體就是我們的應(yīng)用服務(wù)器(Provider)發(fā)送給APNs服務(wù)器的消息結(jié)構(gòu),APNs驗(yàn)證這個(gè)結(jié)構(gòu)正確并提取其中的信息后,再將消息推送到指定的iOS設(shè)備。這個(gè)結(jié)構(gòu)體包括五個(gè)部分,第一個(gè)部分是命令標(biāo)示符,第二個(gè)部分是我們的devicetoken的長(zhǎng)度,第三部分是我們的devicetoken字符串,第四部分是推送消 息體(Payload)的長(zhǎng)度,最后一部分也就是真正的消息內(nèi)容了,里面包含了推送消息的基本信息,比如消息內(nèi)容,應(yīng)用Icon右上角顯示多少數(shù)字以及推送消息到達(dá)時(shí)所播放的聲音等

Payload(消息體)的結(jié)構(gòu):

{
 “aps”:{
 “alert”:“聽云給您發(fā)送了新消息”,
 “badge”:1,
 “sound”:“default”
 },
}

這其實(shí)就是個(gè)JSON結(jié)構(gòu)體,alert標(biāo)簽的內(nèi)容就是會(huì)顯示在用戶手機(jī)上的推送信息,badge顯示的數(shù)量(注意是整型)是會(huì)在應(yīng)用Icon右上角顯示的數(shù)量,提示有多少條未讀消息等,sound就是當(dāng)推送信息送達(dá)是手機(jī)播放的聲音,傳defalut就標(biāo)明使用系統(tǒng)默認(rèn)聲音。

下面就是我們推送通知所需要的證書的推送過(guò)程

1.首先我們要新建一個(gè)Certificate Signing Request(也就是CSR)的請(qǐng)求文件

在應(yīng)用程序里的使用工具中找到鑰匙串訪問(wèn),選擇從證書頒發(fā)機(jī)構(gòu)請(qǐng)求證書

1.45.png

1.44.png

注意:郵箱地址,填自己的開發(fā)者賬號(hào),常用名,隨便填一個(gè)記住就行。然后選擇存儲(chǔ)到磁盤。繼續(xù)就行。

1.55.png

保存位置在 tingyun(指定自己的文件夾,這里我選擇的是我的文件夾),點(diǎn)擊存儲(chǔ)

然后點(diǎn)擊完成后我們會(huì)在 tingyun 里看到一個(gè)CertificateSigningRequest.certSigningRequest的請(qǐng)求文件,也就是我們說(shuō)的CSR文件。在我們生成CSR文件的同時(shí),會(huì)在鑰匙串訪問(wèn)中生成一對(duì)秘鑰,名稱為剛才我們填寫的常用名

2.配置AppID

到蘋果開發(fā)者網(wǎng)站https://developer.apple.com

點(diǎn)擊Account 

1.56.png

選擇 Certificates,identifiers&Profiles 

1.78.png

選擇 Identifiers ->App IDs 點(diǎn)擊上方的+號(hào)創(chuàng)建一個(gè) App ID.

1.888.png

Name: 填寫 App 的名字就行

App ID Suffix 選擇不用通配符的及 Explicit App ID

Bundle ID:填寫自己應(yīng)用的 Bundle ID 一定要和自己應(yīng)用的一致.

1.555.png

在下面的 App Services 中選擇自己需要的服務(wù)

我們需要推送服務(wù),所以在Push Notifications上打勾

然后點(diǎn)擊continue

1.666.png

3.創(chuàng)建證書

證書需要?jiǎng)?chuàng)建兩種,一種是開發(fā)的、一種是發(fā)布的,開發(fā)的是做測(cè)試用的。

選擇Development 點(diǎn)擊右上角的+號(hào),創(chuàng)建證書,我們首先創(chuàng)建開發(fā)證書

1.99.png

選擇Apple Push Notification service SSL (Sandbox),創(chuàng)建推送服務(wù)證書點(diǎn)擊下一步

1.00.png

這兒的 App ID 選擇我們剛才創(chuàng)建的 App ID

然后點(diǎn)擊下一步,下一步

0.09.png

這兒點(diǎn)擊 Choose File,選擇我們剛才創(chuàng)建的 CSR 文件.

然后點(diǎn)擊生成(Generate)

最后點(diǎn)擊下載,下載證書。將下載的證書,放到指定位置。

0.08.png 

發(fā)布證書的創(chuàng)建和開發(fā)證書一樣,選擇Production->Apple Push Notification service SSL (Production)后面和開發(fā)證書一樣

0.07.png

0.9888.png

4.添加 Devices:

首先選中你要添加哪種設(shè)備,然后在左上角點(diǎn)擊“+”號(hào)。

0.006.png 

Name 填寫一個(gè)設(shè)備名字。

UDID 填寫自己需要加入測(cè)試的設(shè)備的 UDID。

然后點(diǎn)擊下一步

0.005.png

然后點(diǎn)擊 Register 即可

0.001.png 

點(diǎn)擊Done。

0.002.png 

000.png

5.查找設(shè)備的 UDID:

用自己的 iOS 設(shè)備連接到電腦上,打開 iTunes。

在設(shè)備摘要處可以看見一個(gè)序列號(hào),點(diǎn)擊序列號(hào)就會(huì)變成 UDID。

0091.png 

6.生成配置文件

配置文件也有兩種,一種是開發(fā)的,一種是發(fā)布的,開發(fā)的使我們做測(cè)試需要的,發(fā)布的是我們?cè)?Appstore 上發(fā)布時(shí)需要的,我們都需要生成。

我們先生成開發(fā)配置文件,選擇Provisioning Profiles->Development點(diǎn)擊右上角的+號(hào)。

0092.png 

選擇iOS App Development 點(diǎn)擊下一步

0093.png

這兒的 App ID 仍然選擇我們剛才創(chuàng)建的 App ID

0094.png

0095.png 

這兒選擇我們開發(fā)者的證書,如果不知道是哪個(gè)選擇全部即可

0096.png 

這兒選擇我們的測(cè)試設(shè)備,如果沒有則在前面的Devices里面添加即可

0097.png 

0098.png

隨便取個(gè)名字即可,然后下載下來(lái)

1123.png 

發(fā)布配置文件和開發(fā)配置文件一樣創(chuàng)建,選擇Distribution->Ad Hoc即可,后面與發(fā)布配置文件一樣。

1125.png 

1126.png 

11250.png

證書配置完成,打開我們創(chuàng)建的應(yīng)用項(xiàng)目

打開AppDelegate.m 文件,在- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions 方法中添加下面代碼,注冊(cè)消息推送

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
 // Override point for customization after application launch.
  /** 消息推送注冊(cè) */
 if ([UIDevice currentDevice].systemVersion.floatValue >= 8.0) {
  
  UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert categories:nil];
  [application registerUserNotificationSettings:settings];
  [application registerForRemoteNotifications];
 }else {
  [application registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound | UIRemoteNotificationTypeAlert)];
 }
 
 return YES;
}
下面方法是返回 ANPs 蘋果推送服務(wù)器生成的唯一標(biāo)識(shí)
/** 接收服務(wù)器傳回的設(shè)備唯一標(biāo)識(shí) token */
-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
 
 // 第一次運(yùn)行獲取到DeviceToken時(shí)間會(huì)比較長(zhǎng)!
 // 將deviceToken轉(zhuǎn)換成字符串,以便后續(xù)使用
 NSString *token = [deviceToken description];
 NSLog(@"description %@", token);
}

下面方法是當(dāng)有消息推送回來(lái)時(shí),接收推送消息 
/** 設(shè)備接收到來(lái)自蘋果推送服務(wù)器的消息時(shí)觸發(fā)的,用來(lái)顯示推送消息 */

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

 NSLog(@"userInfo == %@",userInfo);
}

上面方法是當(dāng)注冊(cè)推送服務(wù)失敗時(shí),接收錯(cuò)誤信息
/** 注冊(cè)推送服務(wù)失敗 */
-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{
 NSLog(@"注冊(cè)失敗 %@",error);
}

服務(wù)器端(Java服務(wù)器)

服務(wù)器端我們需要,一個(gè)后綴為. p12的證書,以及需要的 jar 包

服務(wù)器端的證書生成方式:

打開我們前面下載的證書,在鑰匙串中找到它

0.98888.png 

點(diǎn)擊鼠標(biāo)右鍵選擇導(dǎo)出

0.998.png 

導(dǎo)出后綴為.p12的文件保存到自己的電腦上,需要輸入一個(gè)密碼,在 Java 服務(wù)器端要用到

0.9889.png 

Java服務(wù)器端需要的 Jar 包

0.87.png

Java 服務(wù)器端代碼:

import javapns.back.PushNotificationManager;
import javapns.back.SSLConnectionHelper;
import javapns.data.Device;
import javapns.data.PayLoad;
public class pushService {
 public static void main(String[] args) {
  
  
 try {
    String deviceToken = "eab6df47eb4f81e0aaa93bb208cffd7dc3884fd346ea0743fcf93288018cfcb6";
    //被推送的iphone應(yīng)用程序標(biāo)示符  
    PayLoad payLoad = new PayLoad();
    payLoad.addAlert("測(cè)試我的push消息");
    payLoad.addBadge(1);
    payLoad.addSound("default");
      
    PushNotificationManager pushManager = PushNotificationManager.getInstance();
    pushManager.addDevice("iphone", deviceToken);
    
       //測(cè)試推送服務(wù)器地址:gateway.sandbox.push.apple.com /2195 
   //產(chǎn)品推送服務(wù)器地址:gateway.push.apple.com / 2195 
    String host="gateway.sandbox.push.apple.com"; //測(cè)試用的蘋果推送服務(wù)器
    int port = 2195;
    String certificatePath = "/Users/hsw/Desktop/PushTest/PushTest.p12"; //剛才在mac系統(tǒng)下導(dǎo)出的證書
    
    String certificatePassword= "123456";
   
    pushManager.initializeConnection(host, port, certificatePath,certificatePassword, SSLConnectionHelper.KEYSTORE_TYPE_PKCS12);
      
    //Send Push
    Device client = pushManager.getDevice("iphone");
    pushManager.sendNotification(client, payLoad); //推送消息
    pushManager.stopConnection();
    pushManager.removeDevice("iphone");
   }
   catch (Exception e) {
    e.printStackTrace();
    System.out.println("push faild!");
    return;
   }
   System.out.println("push succeed!");
   }

}

本文已被整理到了《iOS推送教程》,歡迎大家學(xué)習(xí)閱讀。

以上就是完整的iOS遠(yuǎn)程推送原理及實(shí)現(xiàn)過(guò)程,希望對(duì)大家的學(xué)習(xí)有所幫助。

相關(guān)文章

  • 淺析iOS中的淺拷貝和深拷貝(copy和mutableCopy)

    淺析iOS中的淺拷貝和深拷貝(copy和mutableCopy)

    ios提供了copy和mutablecopy方法,顧名思義,copy就是復(fù)制了一個(gè)imutable的對(duì)象,而mutablecopy就是復(fù)制了一個(gè)mutable的對(duì)象。本文給大家介紹iOS中的淺拷貝和深拷貝(copy和mutableCopy) ,感興趣的朋友一起看看吧
    2016-04-04
  • iOS開發(fā)之觸摸事件

    iOS開發(fā)之觸摸事件

    iOS設(shè)備都是可以多點(diǎn)觸摸的,是指手指放在iOS設(shè)備的屏幕上從屏幕上拖動(dòng)或抬起。系統(tǒng)當(dāng)前視圖響應(yīng)觸摸事件,若無(wú)響應(yīng)則向上層傳遞,構(gòu)成響應(yīng)者鏈。觸摸事件的函數(shù)有4個(gè)。
    2016-04-04
  • 詳解Swift 之clipped是什么如何用

    詳解Swift 之clipped是什么如何用

    這篇文章主要介紹了詳解Swift 之clipped是什么如何用,文中通過(guò)示例代碼介紹的非常詳細(xì),對(duì)大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來(lái)一起學(xué)習(xí)學(xué)習(xí)吧
    2020-01-01
  • iOS之點(diǎn)擊通知欄的通知進(jìn)入程序的觸發(fā)事件

    iOS之點(diǎn)擊通知欄的通知進(jìn)入程序的觸發(fā)事件

    本文主要介紹了iOS中點(diǎn)擊通知欄的通知進(jìn)入程序的觸發(fā)事件的相關(guān)知識(shí),具有很好的參考價(jià)值,下面跟著小編一起來(lái)看下吧
    2017-02-02
  • iOS實(shí)現(xiàn)壓縮圖片上傳功能

    iOS實(shí)現(xiàn)壓縮圖片上傳功能

    這篇文章主要介紹了iOS實(shí)現(xiàn)壓縮圖片上傳功能,iOS中常常需要打開相機(jī),選擇圖片上傳或者拍照上傳,如何實(shí)現(xiàn)壓縮圖片并上傳圖片,想要了解的朋友可以參考一下
    2016-04-04
  • iOS?UITextView?實(shí)現(xiàn)類似微博的話題、提及用戶效果

    iOS?UITextView?實(shí)現(xiàn)類似微博的話題、提及用戶效果

    這篇文章主要介紹了iOS?UITextView?實(shí)現(xiàn)類似微博的話題、提及功能,基本思路是使用正則匹配出成對(duì)的#,再利用UITextView的富文本實(shí)現(xiàn)高亮效果,需要的朋友可以參考下
    2022-06-06
  • iOS 10撥打系統(tǒng)電話彈出框延遲出現(xiàn)問(wèn)題的解決

    iOS 10撥打系統(tǒng)電話彈出框延遲出現(xiàn)問(wèn)題的解決

    iOS10的到來(lái),帶來(lái)了條幅和鎖屏界面的重新設(shè)計(jì),美觀又好看,再加上抬腕喚醒功能,查看需要的信息確實(shí)更便捷了,還能快捷回復(fù)一些通知,十分輕松,但同樣有問(wèn)題,下面這篇文章主要給大家介紹了關(guān)于iOS 10撥打系統(tǒng)電話彈出框延遲出現(xiàn)問(wèn)題的解決方法,需要的朋友可以參考下。
    2017-10-10
  • IOS 中runtime使用方法整理

    IOS 中runtime使用方法整理

    這篇文章主要介紹了IOS 中runtime使用方法整理的相關(guān)資料,需要的朋友可以參考下
    2017-03-03
  • iOS中解決Xcode 8控制臺(tái)亂碼的方式

    iOS中解決Xcode 8控制臺(tái)亂碼的方式

    這篇文章給大家介紹了iOS中解決Xcode 8控制臺(tái)亂碼的方式,文中給出了詳細(xì)解決步驟,相信對(duì)大家的理解和學(xué)習(xí)很有幫助,有需要的朋友們下面來(lái)一起看看吧。
    2016-10-10
  • IOS10 配置權(quán)限詳細(xì)介紹

    IOS10 配置權(quán)限詳細(xì)介紹

    這篇文章主要介紹了IOS10 配置權(quán)限詳細(xì)介紹的相關(guān)資料,訪問(wèn)相機(jī)、相冊(cè)、麥克風(fēng)、通訊錄等等權(quán)限,都需要進(jìn)行相關(guān)的配置,不然會(huì)直接crash,需要的朋友可以參考下
    2016-12-12

最新評(píng)論