你好,歡迎來到IOS教程網

 Ios教程網 >> IOS編程開發 >> IOS開發基礎 >> iOS集成極光推送,繞過一些坑

iOS集成極光推送,繞過一些坑

編輯:IOS開發基礎

最近公司要求把維護期的項目都集成極光推送,集成期間遇到一些小坑,特此在這總結!

極光推送能干嘛?

1.為 JPush Server 上報 Device Token,免除開發者管理 Device Token 的麻煩

2.支持iOS APNs推送

3.前台運行時,可接收由JPush下發的(透傳的)自定義消息

4.靈活管理接收用戶:Tag(標簽分組)、Alias(用戶別名)、RegistrationID(設備注冊ID)

知道能干嘛了那就開始動手集成????

配push證書:

此步驟直接看極光的文檔即可,寫得很詳細。

導入必要的框架

  • CFNetwork.framework

  • CoreFoundation.framework

  • CoreTelephony.framework

  • SystemConfiguration.framework

  • CoreGraphics.framework

  • Foundation.framework

  • UIKit.framework

  • Security.framework

  • Xcode7需要的是libz.tbd;Xcode7以下版本是libz.dylib

創建並配置PushConfig.plist文件

在你的工程中創建一個新的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不再使用,可以將它刪除。

313852-e92dae77c5019e5f.jpg

核心代碼

首先在AppDelegate.m 導入#import "JPUSHService.h"

~didFinishLaunchingWithOptions方法貼上核心代碼:

//極光推送
    if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
        //可以添加自定義categories
        [JPUSHService registerForRemoteNotificationTypes:(UIUserNotificationTypeBadge |
                                                          UIUserNotificationTypeSound |
                                                          UIUserNotificationTypeAlert)
                                              categories:nil];
    } else {
        //categories 必須為nil
        [JPUSHService registerForRemoteNotificationTypes:(UIRemoteNotificationTypeBadge |
                                                          UIRemoteNotificationTypeSound |
                                                          UIRemoteNotificationTypeAlert)
                                              categories:nil];
    }
    //JAppKey : 是你在極光推送申請下來的appKey Jchannel : 可以直接設置默認值即可 Publish channel
    [JPUSHService setupWithOption:launchOptions appKey:JAppKey
                          channel:Jchannel apsForProduction:NO]; //如果是生產環境應該設置為YES

之後還需要加入以下方法:

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {    // Required
    [JPUSHService registerDeviceToken:deviceToken];
}
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{
    NSString *alert = [[userInfo objectForKey:@"aps"] objectForKey:@"alert"];
    if (application.applicationState == UIApplicationStateActive) {
        UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"推送消息"
                                                            message:alert
                                                           delegate:self
                                                  cancelButtonTitle:@"OK"
                                                  otherButtonTitles:nil];
        [alertView show];
    }
    [application setApplicationIconBadgeNumber:0];
    [JPUSHService handleRemoteNotification:userInfo];
}

我們還能監聽極光推送生命周期通知。API裡面提供了下面 5 種類型的通知:

API裡面提供了下面 5 種類型的通知:

extern NSString * const kJPFNetworkDidSetupNotification; // 建立連接
extern NSString * const kJPFNetworkDidCloseNotification; // 關閉連接
extern NSString * const kJPFNetworkDidRegisterNotification; // 注冊成功
extern NSString * const kJPFNetworkDidLoginNotification; // 登錄成功
溫馨提示: 
Registration id 需要在執行到kJPFNetworkDidLoginNotification的方法裡獲取
extern NSString * const kJPFNetworkDidReceiveMessageNotification; // 收到自定義消息(非APNS)
其中,kJPFNetworkDidReceiveMessageNotification傳遞的數據可以通過NSNotification中的userInfo方法獲取,包括標題、內容、extras信息等

使用方法

Tag(標簽分組)& Alias(用戶別名)

//用於綁定Tag的 根據自己想要的Tag加入,值得注意的是這裡Tag需要用到NSSet
[JPUSHService setTags:[NSSet set]callbackSelector:nil object:self];
//用於綁定Alias的  使用NSString 即可
[JPUSHService setAlias:@"" callbackSelector:nil object:self];

如果想要即要綁定Alias也要綁定Tag,必須使用以下方法,已被坑

//用於同時綁定Tag與Alias的
[JPUSHService setTags:[NSSet set] alias:@"" callbackSelector:nil target:self];

一般在項目哪裡綁定呢?

我主要是在項目的登錄成功或者自動登錄後,使用用戶的唯一標示進行綁定,或者根據需求添加一些前綴

去除綁定

用戶進行退出登錄的方法裡添加去除綁定即可,值得注意的是用到即時通訊的話,被擠下線也要去除綁定,已被坑,貼代碼:

//沒有值就代表去除
[JPUSHService setTags:[NSSet set]callbackSelector:nil object:self];
[JPUSHService setAlias:@"" callbackSelector:nil object:self];
[JPUSHService setTags:[NSSet set] alias:@"" callbackSelector:nil target:self];

測試是否集成成功。到極光平台測試推送:

313852-ffaf1b475c5debb7.jpg

只要推送成功,剩下的由後台根據Alias或者Tag來推送就可以了????

JPushSDK資源下載

  1. 上一頁:
  2. 下一頁:
蘋果刷機越獄教程| IOS教程問題解答| IOS技巧綜合| IOS7技巧| IOS8教程
Copyright © Ios教程網 All Rights Reserved