iOS極光推送

来源:http://www.cnblogs.com/leixu/archive/2016/01/27/5163876.html
-Advertisement-
Play Games

昨天花了一下午的時間研究了下極光推送,也前也是沒做過,不知道從何下手!才開始的時候一看官方的SDK感覺好難,不過經過一系列的搗鼓之後,手機收到了推送信息,感覺其實並沒有那麼難! 1.配置開發證書(得有開發者賬號,個人,企業的都可以) 開發環境測試 在對 JPush iOS 開發環境進行測試前,請確保


            昨天花了一下午的時間研究了下極光推送,也前也是沒做過,不知道從何下手!才開始的時候一看官方的SDK感覺好難,不過經過一系列的搗鼓之後,手機收到了推送信息,感覺其實並沒有那麼難!

 

 

1.配置開發證書(得有開發者賬號,個人,企業的都可以)

 

 

 

 

開發環境測試

 

在對 JPush iOS 開發環境進行測試前,請確保 3 個統一:

  • App 是開發環境打包(開發證書 Development)
  • 上傳了開發證書並驗證通過
  • Portal 上的應用設置為開發環境

發佈環境測試

在對 JPush iOS 生產環境進行測試前,請確保 3 個統一:

  • App 是 ad-hoc 打包或者App Store 版本(發佈證書 Production)
  • 上傳了發佈證書並驗證通過
  • Portal 上的應用設置為生產環境

iOS 證書 設置指南

創建應用程式ID

jpush_ios

  • 創建 App ID,如果 ID 已經存在可以直接跳過此步驟

jpush_ios

  • 為 App 開啟 Push Notification 功能。如果是已經創建的 App ID 也可以通過設置開啟 Push Notification 功能。

jpush_ios

根據實際情況完善 App ID 信息並提交,註意此處需要指定具體的 Bundle ID 不要使用通配符。

jpush_ios

配置和下載證書

  • 如果你之前沒有創建過 Push 證書或者是要重新創建一個新的,請在證書列表下麵新建。

  • 新建證書需要註意選擇證書種類(開發證書用於開發和調試使用,生產證書用於 App Store 發佈)

  • 點擊 Continue 後選擇證書對應的應用ID,然後繼續會出現“About Creating a Certificate Signing Request (CSR)”。

  • 根據它的說明創建打開KeychainAccess 創建 Certificate Signing Request。

  • 填寫“User Email Address”和“Common Name” 後選擇 Saved to disk 進行保存 。

  • 繼續返回Apple developer 網站點擊 Continue ,上傳剛剛生成的 .certSigningRequest 文件生成 APNs Push Certificate。
  • 下載並雙擊打開證書,證書打開時會啟動“鑰匙串訪問”工具。
  • 在“鑰匙串訪問”中你的證書會顯示在“我的證書”中,註意選擇“My Certificates” 和"login"

jpush_ios

導出 .p12 證書文件

註意要選“login”和“My Certificates” 導出證書時要選中證書文件,不要展開private key。

jpush_ios

  • 將文件保存為Personal Information Exchange (.p12)格式。

  • 將文件保存為Personal Information Exchange (.p12)格式。

上傳證書

在 JPush 管理 Portal 上,針對某應用程式,上傳上面步驟得到 .p12 證書文件。這是 iOS SDK 能夠接收到 JPush 推送消息的必要步驟。

Provisioning Profile的創建

  • 創建Provisioning Profile的前提,已在Apple Developer網站創建待發佈應用所使用的Bundle ID的App ID,且為該App ID創建了APNs證書,如下圖:

jpush_ios

jpush_ios

  • 選擇此Provisioning Profile的環境後點擊[Continue]:

jpush_ios

  • 選擇要創建Provisioning Profile的App ID後點擊[Continue]:

jpush_ios

  • 選擇所屬的開發者證書,(這裡創建了多個開發者證書,建議只創建一個,方便管理)為了方便,選擇了[Select All],再點擊[Continue]進入下一步:

jpush_ios

  • 為該Provisioning Profile選擇將要安裝的設備(一般選擇[Select All]),點擊[Continue]:

jpush_ios

  • 給該Provisioning Profile填寫Profile Name,點擊[generate]完成創建。

jpush_ios

  • 填寫完Profile Name後點擊[generate]完成創建,之後點擊[DownLoad]下載Provisioning Profile

jpush_ios

  • 雙擊下載下來的Provisioning Profile,添加到xcode。
     

 

2. Xcode的證書配置教程

參照iOS SDK 集成指南集成JPush SDK 和上傳了推送用到的p12證書後在編譯運行前需要先配置一下證書,步驟如下:

  • 打開xxx-info.plist的Bundle identifier項把上傳到JPush 控制台的bundle id填寫進去:

jpush_ios

  • 點擊項目,選擇目標TARGETS後進入Build Setting 界面,搜索“Code signing”,按照下圖配置

jpush_ios

 

 

客戶端設置

開啟Remote notifications

 

需要在Xcode 中修改應用的 Capabilities 開啟Remote notifications,請參考下圖:



 

 

3.SDK集成步驟

 

 

 

集成壓縮包內容

 

包名為JPush-iOS-SDK-{版本號}

  • lib文件夾:包含頭文件 JPUSHService.h,靜態庫文件jpush-ios-x.x.x.a ,支持的iOS版本為 5.0 及以上版本。(請註意:模擬器不支持APNs)
  • pdf文件:集成指南
  • demo文件夾:示例

開發環境

  • 使用Xcode 6及以上版本可以使用新版Push SDK,XCode 5環境下需要運行舊版本SDK(1.7.4)

 

1、在JPush Portal上創建應用

  • 在 JPush的管理Portal 上創建應用並上傳APNs證書。如果對APNs證書不太瞭解 請參考: iOS 證書設置指南

jpush_ios

  • 創建成功後自動生成 AppKey 用以標識該應用。

jpush_ios

2、導入API開發包到應用程式項目

  • 將SDK包解壓,在XCode中選擇“Add files to 'Your project name'...”,將解壓後的lib子文件夾(包含JPUSHService.h、jpush-ios-x.x.x.a)添加到你的工程目錄中。

3、必要的框架

  • CFNetwork.framework
  • CoreFoundation.framework
  • CoreTelephony.framework
  • SystemConfiguration.framework
  • CoreGraphics.framework
  • Foundation.framework
  • UIKit.framework
  • Security.framework
  • Xcode7需要的是libz.tbd;Xcode7以下版本是libz.dylib

4、Build Settings

如果你的工程需要支持小於7.0的iOS系統,請到Build Settings 關閉 bitCode 選項,否則將無法正常編譯通過。

  • 設置 Search Paths 下的 User Header Search Paths 和 Library Search Paths,比如SDK文件夾(預設為lib)與工程文件在同一級目錄下,則都設置為"$(SRCROOT)/{靜態庫所在文件夾名稱}"即可。

5、創建並配置PushConfig.plist文件

 

2.1.0 版本開始,新增了帶參數的setupWithOption初始化方法,可通過此方法等參數傳入AppKey等信息。1.8.8及之前版本的 JPush SDK只能通過PushConfig.plist配置AppKey等信息。

 

 

在你的工程中創建一個新的Property List文件,並將其命名為PushConfig.plist,文件所含欄位如下:

  • CHANNEL
    • 指明應用程式包的下載渠道,為方便分渠道統計,具體值由你自行定義,如:App Store。
  • APP_KEY
    • 填寫管理Portal上創建應用後自動生成的AppKey值。請確保應用內配置的 AppKey 與第1步在 Portal 上創建應用後生成的 AppKey 一致。
  • APS_FOR_PRODUCTION
    • 1.3.1版本新增,用於標識當前應用所使用的APNs證書環境。
    • 0 (預設值)表示採用的是開發證書,1 表示採用生產證書發佈應用。
    • 註:此欄位的值要與Build Settings的Code Signing配置的證書環境一致。
  • 在1.2.2或之前版本的配置文件中,有 TEST_MODE 這個鍵,新版的SDK不再使用,可以將它刪除。

PushConfig.plist文件示例圖:

jpush_ios

6、添加代碼

 

2.1.0版本開始,API類名為JPUSHService,不再使用原先的APService。

 

允許XCode7支持Http傳輸方法

如果用的是Xcode7時,需要在App項目的plist手動加入以下key和值以支持http傳輸:

  <key>NSAppTransportSecurity</key> 
      <dict> 
  <key>NSAllowsArbitraryLoads</key> 
        <true/> 
    </dict>

集成所需API

APIs 主要集中在 JPUSHService 介面類里。

  • 初始化JPush方法分為兩個:

    • 1.8.8及以下版本使用的是已過期的初始化方法。升級到2.1.0的老用戶仍可繼續使用舊的初始化方法。
    • 2.1.0版本開始提供帶appkey等參數的新初始化方法。使用此方法無需再添加PushConfig.plist配置JPush的AppKey等欄位。
 

4.項目代碼:

 

 AppDelegate.h裡面的代碼:

 

#import<UIKit/UIKit.h>

staticNSString *appKey = @"4fd48a0712a3fde75eb1c7423";//申請應用成功以後官方會提供給你

staticNSString *channel = @"Publish channel";

staticBOOL isProduction = FALSE;

 

@interface AppDelegate :UIResponder <UIApplicationDelegate>

 

@property (strong,nonatomicUIWindow *window;

 

@end

 

 

 

#import"AppDelegate.m"中的代碼

 

 

#import "AppDelegate.h"

#import "JPUSHService.h"

 

@interface AppDelegate ()

 

@end

 

@implementation AppDelegate

 

 

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

    // Override point for customization after application launch.

    

    self.window.backgroundColor = [UIColorwhiteColor];

    [self.windowmakeKeyAndVisible];

    if ([[UIDevicecurrentDevice].systemVersionfloatValue] >= 8.0) {

        //可以添加自定義categories

        [JPUSHServiceregisterForRemoteNotificationTypes:(UIUserNotificationTypeBadge |

                                                         UIUserNotificationTypeSound |

                                                         UIUserNotificationTypeAlert)

                                              categories:nil];

    } else {

        //categories 必須為nil

        [JPUSHServiceregisterForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |

                                                         UIRemoteNotificationTypeSound |

                                                         UIRemoteNotificationTypeAlert)

                                              categories:nil];

        

    }

    [JPUSHServicesetupWithOption:launchOptions appKey:appKey

                          channel:channelapsForProduction:NO];

    returnYES;

}

 

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

    

    // Required

    [JPUSHServiceregisterDeviceToken:deviceToken];

}

 

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

    

    // Required,For systems with less than or equal to iOS6

    [JPUSHServicehandleRemoteNotification:userInfo];

}

 

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {

    

    // IOS 7 Support Required

    [JPUSHServicehandleRemoteNotification:userInfo];

    completionHandler(UIBackgroundFetchResultNewData);

}

 

- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {

    

    //Optional

    NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error);

}

 

 

 

 

 

- (void)applicationWillResignActive:(UIApplication *)application {

    // Sent when the application is about to move from active to inactive state. This can occur for certain types of temporary interruptions (such as an incoming phone call or SMS message) or when the user quits the application and it begins the transition to the background state.

    // Use this method to pause ongoing tasks, disable timers, and throttle down OpenGL ES frame rates. Games should use this method to pause the game.

}

 

- (void)applicationDidEnterBackground:(UIApplication *)application {

    // Use this method to release shared resources, save user data, invalidate timers, and store enough application state information to restore your application to its current state in case it is terminated later.

    // If your application supports background execution, this method is called instead of applicationWillTerminate: when the user quits.

}

 

- (void)applicationWillEnterForeground:(UIApplication *)application {

    // Called as part of the transition from the background to the inactive state; here you can undo many of the changes made on entering the background.

}

 

- (void)applicationDidBecomeActive:(UIApplication *)application {

    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.

}

 

- (void)applicationWillTerminate:(UIApplication *)application {

    // Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:.

}

 

@end

 

 

 

4.真機測試:

  登陸到極光推送官網:       點擊控制台:  

 

選擇應用,也就是你創建測試的項目:我的項目是aa.TestPush

 

選中以後點擊進入到下麵這裡:

 

點擊上面的推送:

 

 

點擊左邊的發送通知,也可以選擇自定義消息(這裡我選擇的發送通知):

 

這裡我隨便寫點什麼用我手機測試:

 

 

 

點擊立即發送:

 

 

 

 

 

手機上的顯示:

 


 

 
您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 如何使用jQuery獲取滑鼠指針的當前坐標:在實際應用中,可能需要獲取當前滑鼠的坐標,下麵就來簡單介紹一下如何實現此功能。當然例子非常簡單,大家可以根據實際需要靈活的應用和擴展。代碼實例如下: <!DOCTYPE html> <html> <head> <meta charset=" utf-8">
  • css預重置樣式代碼:預重置css樣式代碼幾乎在每一個稍有經驗編寫的css文件中都有應用,這足以說明它的有點,關於它到底有哪些好處這裡就不多介紹了,大家可以自行查閱,下麵直接分享此代碼。代碼如下: body,div,dl,dt,dd,ul,ol,li,h1,h2,h3,h4,h5,h6,pre,fo
  • 手風琴方式展開和摺疊導航菜單效果:本章節分享一段代碼實例,它實現了手風琴方式展開和摺疊導航菜單效果。代碼實例如下: <!DOCTYPE html> <html> <head> <meta charset="gb2312"> <meta name="author" content="http://ww
  • 當系統版本號高於iOS7.0,那麼原來的隱藏狀態欄方式就可能不好使了. 因為你要是用修改plist的方法實現的隱藏方法,還是管用的. plist方法: key:Status bar is initially hidden value : YES 自從開啟程式,狀態欄就被隱藏了 key:View co
  • adapter.notifyDataSetChanged();
  • 最近做android開發遇到無法通過usb鏈接設備的情況,通過wifi連接設備調試也頗為方便 1、android 要root , 下載終端app 比如 BetterTerminal 2、通過以下命令開啟adbd su //如果前面顯示的符號是$ ,則運行此命令切換到root。如果是# ,可以不用此命
  • 有些項目用xcode7打開運行,打包安裝到iOS9設備上程式會閃退。如果用xcode7以下編譯,然後打包到iOS9的設備上就是正常的。這是為什麼,關鍵是,怎麼解決? 答:iOS9發佈之後,有些app在新的系統下會經常出現閃退的情況,而官方也給了許多的適配與改變。以使用戶體驗更好。所以做為開發者怎樣為
  • 一、前言 android客戶端開發進入尾聲,負責SEO同事突然發給我一個涉及45個發佈渠道的噩耗,之前只發佈自有渠道的工作方式已經不滿足需求,所以引入最近比較流行的gradle打包技術。 gradle基於groovy語言,引入的原因也方便了以後從現在使用的eclipse開發環境遷移到Android
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...