1. 程式人生 > >iOS極光推送的基本使用

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

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

點選上面的推送:

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

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

點選立即傳送:

手機上的顯示:


相關推薦

iOS極光基本使用

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

項目實戰:iOS極光集成(30分鐘搞定)

adg append ati 技術分享 tro markdown ocs sym xcode 推送有非常多,如個推、友盟、融雲和極光等等。在這裏就講下怎樣使用極光推送。主要內容是將官方文檔資料詳細匯總並一步一步集成到項目中,您也能夠直接去官方文檔閱

iOS極光清除角標解決方案

問題描述: 最近在專案中集成了極光推送,接收通知後,發現手機上的app圖示右上角一直有個紅色的數字1無法清除,但是在程式碼中已經設定了使角標清除的方法。 通過測試發現,如果收到通知後點擊通知欄進入app,則角標會清除; 如果收到通知後直接點選app圖示或者設定方法使得接收通知後直

iOS極光整合注意事項

一、別名推送 //設定別名的主要程式碼 [JPUSHService setAlias:string callbackSelector:@selector(tagsAliasCallback:tags:alias:) object:self]; - (void)tagsAliasCa

iOS —— 極光極光IM

前言 (環境:iOS12.0、極光推送SDK3.1.0、極光IM3.7.0) 寫iOS 推送(蘋果原生態)時,筆者就是為研究極光打下基礎。 結果三個月快過去了,筆者猶如鹹魚,一直未開始研究極光,真是墮落啊。 極光推送的坑 大多都是 蘋果原生態的推送的問題。如果你對蘋果原生態推送不瞭解,建議先看上面筆者

ios極光 App收到訊息時,修改BadgeNumber,同時點選狀態列訊息以後跳到指定的頁面和靜默

極光推送生產環境測試需要打包為adhot或者用testflight 在收到遠端推送的訊息的時候,有以下三種情況需要考慮: 1. 程式在後臺執行 2. 程式未執行 3. 程式執行在前臺 原則上,應用在收到推送訊息時,badge的值是由後臺來控制的,但是,目前的大多數公司後端都

iOS 極光接收自定義訊息

//新增監聽者     NSNotificationCenter *defaultCenter = [NSNotificationCenter defaultCenter];     [defaultCenter

解決:IOS極光使用testfligt進行內部測試收不到通知,開發能收到

1、後臺推送程式碼,需要設定為正式環境,預設開發,所以會導致testfligt收不到通知java後臺程式碼下載:https://download.csdn.net/download/myfmyfmyfm

iOS 極光設定別名

//登入  [JPUSHServicesetTags:nilalias:userNmae callbackSelector:@selector(tagsAliasCallback:tags:alias:

ios極光配置應用修改bundleID

極光推送iOS配置鑑權後,本質上BundleID是不允許修改的,但是若必須要修改,則需要給官網傳送郵件([email protected]),清空原有iOSbundleID,然後再重新配置鑑權。 關於清空 iOS BundleID 或 Android 包名的

iOS 極光訊息成功,但是手機收不到的解決方法。

1.確認證書是否與app的Bundle ID是否一致 2. 確認你的推送證書是否已經過期 3.確認你的APP_KEY是否和極光APP_KEY是否一致 4.正確呼叫bindChannel,併成功返回a

iOS極光 點選訊息跳轉頁面

最近在搞極光推送,之前用的百度推送,但是訊息延遲的厲害,就換了極光,換就換吧,無所謂反正我不會,於是就開始看極光推送文件,心裡罵著跟百度的文件詳細程度不能比啊,文件很短一會兒就看完,其實文件的主要程式碼這些推送平臺都一樣,說到這我想吐槽一下,本來以為推送很容易,實際就是容易

iOS 極光接收通知

//通過通知啟動APP NSDictionary *remoteUserInfo = [launchOptions objectForKey:UIApplicationLaunchOptions

iOS 極光開發環境可以收到,生產環境收不到

極光推送開發環境可以收到,生產環境收不到推送 首先闡述一下我遇到的問題 我們專案連通了極光推送,以前寫過的專案也是這樣 在開發環境下測試 好使了 但是打包ADHoc時候 就不好使了,當時也沒在意 因為網上好多人說 只要測試好使了 證書顯示配置成功了(綠燈

極光能獲取 registrationId,但是接收不到通知 - iOS

整合極光推送進行除錯的時候,執行 App 可以正常獲取 registrationId,但是卻遲遲無法收到推送訊息,而Android 端是可以正常收到訊息; 檢查了證書配置和極光的配置一切正常,便開始返回檢視 code 尋找問題. 最終發現如下方法中的 deviceToken 被注掉後導致註冊 i

React Native 極光的實現,支援Android和iOS

在接到需求後對如何實現進行了預研,發現有極光官網維護的 jpush-react-native 和 React Native 中文網維護的 react-native-jpush 供我們使用,我選擇的是 jpush-react-native。 一,相關版本資訊 { "nam

unity接入極光iOS篇)

環境:unity5.2  + eclipse + xcode8;安卓打包模式:eclipse出jar包,unity一鍵打包 提示:安卓無法做到殺掉程序後也接收推送,除非你跟手機系統運營商合作(已經和極光商務確認過),iOS是沒問題的。 (開始之前先在極光後臺建立App,流程簡單,這

iOS整合極光 通知 和 自定義訊息

支援的版本 r1.2.5 以後。 功能說明 只有在前端執行的時候才能收到自定義訊息的推送。 從jpush伺服器獲取使用者推送的自定義訊息的內容、標題、附件欄位等。 實現方法 獲取iOS的推送內容需要在delegate類中註冊通知並實現回撥方法。 1、在方法-

IOS (本地、遠端、三方[極光])

Provider是給你手機應用發出推送訊息的伺服器,而APNS(Apple Push Notification Service)則是蘋果訊息推送伺服器。你本地的伺服器當需要給應用推送一條訊息的時候,先要將訊息發出到蘋果推送伺服器,然後再由蘋果推送伺服器將訊息發到安裝了該應用的手機。 接下來再看一張解釋圖

iOS開發 極光收到通知後跳轉到指定頁面

iOS在開放中,會使用到極光推送,然後收到推送時,往往需要跳轉指定的介面,而跳轉到指定介面時,又分為程式未殺死情況下的跳轉和程式已殺死的跳轉,即離線狀況下的跳轉: 當程式未殺死狀況下的條狀方法很簡單: // iOS 10 Support - (void)jpush