亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb

首頁 > 系統 > iOS > 正文

iOS實現遠程推送原理及過程

2020-07-26 03:20:43
字體:
來源:轉載
供稿:網友

推送通知,是現在的應用必不可少的功能。那么在 iOS 中,我們是如何實現遠程推送的呢?iOS 的遠程推送原理又是什么呢?在做 iOS 遠程推送時,我們會遇到各種各樣的問題。那么首先讓我們準備一些做推送需要的東西。我們需要一個付費的蘋果開發者賬號(免費的不可以做遠程推送),有了開發者賬號,我們可以去蘋果開發者網站,配置自己所需要的推送的相關證書。然后下載證書,供我們后面使用,詳細的證書配置過程,我們下面再說。

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

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

設備注冊APNs的流程圖

1.2222.png

上圖完成了如下步驟:

1.Device(設備)連接APNs服務器并攜帶設備序列號(UUID)

2.連接成功,APNs經過打包和處理產生devicetoken并返回給注冊的Device(設備)

3.Device(設備)攜帶獲取的devicetoken發送到我們自己的應用服務器

4.完成需要被推送的Device(設備)在APNs服務器和我們自己的應用服務器的注冊

推送過程圖:

1.333.png

推送的過程經過如下步驟

1.首先,我們的設備安裝了具有推送功能的應用(應用程序要用代碼注冊消息推動),我們的 iOS設備在有網絡的情況下會連接APNs推送服務器,連接過程中,APNS 服務器會驗證devicetoken,連接成功后維持一個基于TCP 的長連接;

2.Provider(我們自己的應用服務器)收到需要被推送的消息并結合被推送的 iOS設備的devicetoken一起打包發送給APNS服務器;

3.APNS服務器將推送信息推送給指定devicetoken的iOS設備;

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

比較直觀的流程圖:

1.33.png

信息包結構圖:

1.2323.png

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

Payload(消息體)的結構:

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

這其實就是個JSON結構體,alert標簽的內容就是會顯示在用戶手機上的推送信息,badge顯示的數量(注意是整型)是會在應用Icon右上角顯示的數量,提示有多少條未讀消息等,sound就是當推送信息送達是手機播放的聲音,傳defalut就標明使用系統默認聲音。

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

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

在應用程序里的使用工具中找到鑰匙串訪問,選擇從證書頒發機構請求證書

1.45.png

1.44.png

注意:郵箱地址,填自己的開發者賬號,常用名,隨便填一個記住就行。然后選擇存儲到磁盤。繼續就行。

1.55.png

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

然后點擊完成后我們會在 tingyun 里看到一個CertificateSigningRequest.certSigningRequest的請求文件,也就是我們說的CSR文件。在我們生成CSR文件的同時,會在鑰匙串訪問中生成一對秘鑰,名稱為剛才我們填寫的常用名

2.配置AppID

到蘋果開發者網站https://developer.apple.com

點擊Account 

1.56.png

選擇 Certificates,identifiers&Profiles 

1.78.png

選擇 Identifiers ->App IDs 點擊上方的+號創建一個 App ID.

1.888.png

Name: 填寫 App 的名字就行

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

Bundle ID:填寫自己應用的 Bundle ID 一定要和自己應用的一致.

1.555.png

在下面的 App Services 中選擇自己需要的服務

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

然后點擊continue

1.666.png

3.創建證書

證書需要創建兩種,一種是開發的、一種是發布的,開發的是做測試用的。

選擇Development 點擊右上角的+號,創建證書,我們首先創建開發證書

1.99.png

選擇Apple Push Notification service SSL (Sandbox),創建推送服務證書點擊下一步

1.00.png

這兒的 App ID 選擇我們剛才創建的 App ID

然后點擊下一步,下一步

0.09.png

這兒點擊 Choose File,選擇我們剛才創建的 CSR 文件.

然后點擊生成(Generate)

最后點擊下載,下載證書。將下載的證書,放到指定位置。

0.08.png 

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

0.07.png

0.9888.png

4.添加 Devices:

首先選中你要添加哪種設備,然后在左上角點擊“+”號。

0.006.png 

Name 填寫一個設備名字。

UDID 填寫自己需要加入測試的設備的 UDID。

然后點擊下一步

0.005.png

然后點擊 Register 即可

0.001.png 

點擊Done。

0.002.png 

000.png

5.查找設備的 UDID:

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

在設備摘要處可以看見一個序列號,點擊序列號就會變成 UDID。

0091.png 

6.生成配置文件

配置文件也有兩種,一種是開發的,一種是發布的,開發的使我們做測試需要的,發布的是我們在 Appstore 上發布時需要的,我們都需要生成。

我們先生成開發配置文件,選擇Provisioning Profiles->Development點擊右上角的+號。

0092.png 

選擇iOS App Development 點擊下一步

0093.png

這兒的 App ID 仍然選擇我們剛才創建的 App ID

0094.png

0095.png 

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

0096.png 

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

0097.png 

0098.png

隨便取個名字即可,然后下載下來

1123.png 

發布配置文件和開發配置文件一樣創建,選擇Distribution->Ad Hoc即可,后面與發布配置文件一樣。

1125.png 

1126.png 

11250.png

證書配置完成,打開我們創建的應用項目

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

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { // Override point for customization after application launch.  /** 消息推送注冊 */ 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 蘋果推送服務器生成的唯一標識/** 接收服務器傳回的設備唯一標識 token */-(void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{  // 第一次運行獲取到DeviceToken時間會比較長! // 將deviceToken轉換成字符串,以便后續使用 NSString *token = [deviceToken description]; NSLog(@"description %@", token);}下面方法是當有消息推送回來時,接收推送消息 /** 設備接收到來自蘋果推送服務器的消息時觸發的,用來顯示推送消息 */-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{ NSLog(@"userInfo == %@",userInfo);}上面方法是當注冊推送服務失敗時,接收錯誤信息/** 注冊推送服務失敗 */-(void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{ NSLog(@"注冊失敗 %@",error);}

服務器端(Java服務器)

服務器端我們需要,一個后綴為. p12的證書,以及需要的 jar 包

服務器端的證書生成方式:

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

0.98888.png 

點擊鼠標右鍵選擇導出

0.998.png 

導出后綴為.p12的文件保存到自己的電腦上,需要輸入一個密碼,在 Java 服務器端要用到

0.9889.png 

Java服務器端需要的 Jar 包

0.87.png

Java 服務器端代碼:

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應用程序標示符      PayLoad payLoad = new PayLoad();    payLoad.addAlert("測試我的push消息");    payLoad.addBadge(1);    payLoad.addSound("default");          PushNotificationManager pushManager = PushNotificationManager.getInstance();    pushManager.addDevice("iphone", deviceToken);           //測試推送服務器地址:gateway.sandbox.push.apple.com /2195    //產品推送服務器地址:gateway.push.apple.com / 2195     String host="gateway.sandbox.push.apple.com"; //測試用的蘋果推送服務器    int port = 2195;    String certificatePath = "/Users/hsw/Desktop/PushTest/PushTest.p12"; //剛才在mac系統下導出的證書        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推送教程》,歡迎大家學習閱讀。

以上就是完整的iOS遠程推送原理及實現過程,希望對大家的學習有所幫助。

發表評論 共有條評論
用戶名: 密碼:
驗證碼: 匿名發表
亚洲香蕉成人av网站在线观看_欧美精品成人91久久久久久久_久久久久久久久久久亚洲_热久久视久久精品18亚洲精品_国产精自产拍久久久久久_亚洲色图国产精品_91精品国产网站_中文字幕欧美日韩精品_国产精品久久久久久亚洲调教_国产精品久久一区_性夜试看影院91社区_97在线观看视频国产_68精品久久久久久欧美_欧美精品在线观看_国产精品一区二区久久精品_欧美老女人bb
欧美色道久久88综合亚洲精品| 日韩男女性生活视频| 欧美午夜精品伦理| 国产精品wwww| 中文字幕在线观看亚洲| 成人天堂噜噜噜| 欧美日韩性视频在线| 欧美一级高清免费播放| 欧美成人免费在线观看| 亚洲性生活视频在线观看| 欧美在线性爱视频| 91精品在线看| 亚洲精品一区二区网址| 亚洲色图欧美制服丝袜另类第一页| 欧美视频在线观看免费| 久久久久久久久亚洲| 91国内揄拍国内精品对白| 国产成人综合精品| 中文字幕亚洲一区| 国产精品老女人视频| 91精品国产91久久| 成人中文字幕+乱码+中文字幕| 国产精品第1页| 国产精品免费观看在线| 中文字幕精品久久久久| 国产精品最新在线观看| 久久影视电视剧免费网站清宫辞电视| 色天天综合狠狠色| 国产精品黄色av| 日韩有码在线视频| 亚洲自拍欧美色图| 色狠狠久久aa北条麻妃| 精品国内产的精品视频在线观看| 欧美日韩国产一区在线| 最近的2019中文字幕免费一页| 久久99亚洲精品| 国产精品自拍偷拍视频| 日韩中文第一页| 国模私拍视频一区| 成人h片在线播放免费网站| 精品福利在线看| 亚洲性xxxx| 亚洲精品有码在线| 亚洲欧美福利视频| 精品五月天久久| 国产精品亚洲欧美导航| 欧美日韩色婷婷| 一区二区三区视频免费在线观看| 中文字幕日本精品| 精品久久久在线观看| 97国产精品视频人人做人人爱| 九九热这里只有精品免费看| 亚洲综合中文字幕68页| 欧美精品成人91久久久久久久| 亚洲jizzjizz日本少妇| 亚洲激情电影中文字幕| 国产精品白丝jk喷水视频一区| 欧美xxxx综合视频| 久久久久亚洲精品| 日本高清+成人网在线观看| 日韩免费观看视频| 欧美午夜片欧美片在线观看| 亚洲国产成人在线视频| 91精品视频一区| 中文字幕日韩欧美在线视频| 欧美xxxx18性欧美| 欧日韩不卡在线视频| 欧美另类暴力丝袜| 国产激情久久久| 久久成人亚洲精品| 欧美日韩中文字幕| 日本在线观看天堂男亚洲| 亚洲精品按摩视频| 日韩中文视频免费在线观看| 在线电影中文日韩| 国产精品美女免费| 中文字幕日韩精品有码视频| 中文字幕自拍vr一区二区三区| 欧美肥婆姓交大片| 亚洲精品网址在线观看| 欧美成人精品h版在线观看| 在线观看日韩www视频免费| 久久天天躁狠狠躁夜夜爽蜜月| 欧美国产精品日韩| 欧美激情亚洲视频| 欧美日韩国产黄| 亚洲福利视频网| 国产精品白丝av嫩草影院| 国产一区二区三区视频在线观看| 热99久久精品| 日韩电影中文字幕一区| 精品久久久一区二区| 国产欧美日韩视频| 57pao国产成人免费| 国产精品99导航| 91精品国产免费久久久久久| 精品丝袜一区二区三区| 成人一区二区电影| 亚洲黄页视频免费观看| 热久久99这里有精品| 中文字幕日韩综合av| 国产精自产拍久久久久久蜜| 久久成人精品一区二区三区| 国产97在线|日韩| 欧美日韩激情小视频| 国产精品欧美在线| 成人免费高清完整版在线观看| 国产69久久精品成人| 亚洲欧美一区二区三区在线| 中文字幕欧美亚洲| 国产成人精品999| 欧美成人亚洲成人日韩成人| 欧美野外wwwxxx| 97香蕉久久夜色精品国产| 精品亚洲一区二区三区在线观看| 亚洲精品98久久久久久中文字幕| 隔壁老王国产在线精品| 高潮白浆女日韩av免费看| 91视频-88av| 久久99国产精品久久久久久久久| 中文字幕av日韩| 久久亚洲私人国产精品va| 在线观看精品国产视频| 在线观看久久av| 亚洲电影av在线| 亚洲成人动漫在线播放| 中日韩美女免费视频网址在线观看| 97超级碰碰人国产在线观看| 精品日韩视频在线观看| 视频在线观看一区二区| 久久精品色欧美aⅴ一区二区| 欧美一级视频在线观看| 国产女精品视频网站免费| 亚洲综合大片69999| 91成人国产在线观看| 精品少妇v888av| 成人免费看黄网站| 国产精品丝袜久久久久久高清| 亚洲国产精品久久久久秋霞蜜臀| 久久久久成人精品| 最近2019免费中文字幕视频三| 久久天堂电影网| 国产精品极品尤物在线观看| 操人视频在线观看欧美| 国产精品久久久久aaaa九色| 国产精品欧美激情在线播放| 欧美成人久久久| 欧美美最猛性xxxxxx| 日韩在线中文视频| 7m第一福利500精品视频| 亚洲a级在线观看| 91精品久久久久久久久久| 欧洲成人免费视频| 夜夜狂射影院欧美极品| 国内精品视频一区| 国产噜噜噜噜噜久久久久久久久| 亚洲精品视频在线播放| 久久久久久有精品国产| 日韩动漫免费观看电视剧高清| 2019av中文字幕| 欧美日韩成人精品| 色综合久久天天综线观看| 亚洲人成在线播放| 欧美性极品少妇精品网站|