推送技術(shù)哪家強驼鹅,還是要去找極光微谓,沒有一點打廣告的意思哦!
接觸蘋果遠程推送功能不是一天二天了输钩,記得上次也就是前年集成推送,當(dāng)時用的是友盟推送仲智,當(dāng)時對于推送各面的理解什么的都需要一定時間买乃,畢竟第一次嘛!
舉幾個例子:
為何說是最快呢钓辆?蔽人不是在夸極光平臺的速度剪验,也不是在說其他平臺速度慢怎么的。
那是因為我集成極光推送功能僅僅用半天就全部搞定前联,曬下成果功戚!
再次感嘆當(dāng)年研究任何一項陌生的技術(shù),最怕什么SDK了或者老板限定時間搞定似嗤!如今呢啸臀,已能做到胸有成竹,什么技術(shù)也不怕烁落,就是這么任性乘粒!
本篇說什么:
一.遠程推送的本質(zhì):
二.集成極光推送的準(zhǔn)備工作
三.集成極光推送的流程
四.梳理集成第三方平臺SDK的步驟:
五.附上學(xué)習(xí)推送的參考資料:
一.遠程推送的本質(zhì):
解釋:我的理解是這樣的:當(dāng)我們的設(shè)備處在聯(lián)網(wǎng)狀態(tài)下,服務(wù)器會把要發(fā)的信息通過APNS(蘋果服務(wù)器)發(fā)送給我們的用戶伤塌,達到通知用戶的目的灯萍!
流程如下:
推送準(zhǔn)備工作:
蘋果手機通過自己的UUID和Bundle ID注冊APNS推送通知 --> APNS把UUID和Bundle ID加密生成deviceToken
真正的推送流程:
蘋果手機 -->自身App服務(wù)器(需要配置APNS證書)-->推送信息時查詢對應(yīng)的deviceToken,并把deviceToken 和要發(fā)的信息 --> APNS 找到合適的 deviceToken每聪,在合適的時機(比如聯(lián)網(wǎng))-->用戶的手機旦棉,完成推送齿风!
二.集成極光推送的準(zhǔn)備工作
1.推送申請證書方面(這里只說注意事項,并沒有把所有流程都說到绑洛,因為網(wǎng)上這樣的教程太多了呢救斑!)
創(chuàng)建AppID:
按照正常的流程創(chuàng)建注意,這里一定要勾選 Push Notifications 選項
創(chuàng)建Certificates:
記得創(chuàng)建的證書如下所示:其他按照正常流程處理
創(chuàng)建成功后诊笤,就雙擊運行到鑰匙串中系谐,然后再從鑰匙串中導(dǎo)出P12文件,后面上傳到極光官方后臺即可讨跟。
創(chuàng)建Provisioning Profiles(描述文件:Xcode調(diào)試纪他,打包到AppStore專用)
上面3個文件的區(qū)別具體可見我另一篇文章的介紹:
蘋果的上線和推送證書的理解:
http://www.reibang.com/p/84f82e6bd527
2.推送平臺創(chuàng)建應(yīng)用
注冊并登錄官網(wǎng) :https://www.jiguang.cn
創(chuàng)建自己的應(yīng)用:
需要準(zhǔn)備項目的Bundle Id 以及上一步驟的開發(fā)和生產(chǎn)推送證書!
三.集成極光推送的流程
1.SDK下載以及對應(yīng)庫的導(dǎo)入
SDK下載網(wǎng)址為:https://www.jiguang.cn/push#B_vid=5497159614553159929
將下載好的SDK中的以下3個文件晾匠,拖拽到您的工程中
在Build Phases選項卡的Link Binary With Libraries中茶袒,增加以下依賴:
CFNetwork.framework
CoreFoundation.framework
CoreTelephony.framework
SystemConfiguration.framework
CoreGraphics.framework
Foundation.framework
UIKit.framework
Security.framework
libz.tbd (Xcode7以下版本是libz.dylib)
AdSupport.framework (獲取IDFA需要;如果不使用IDFA凉馆,請不要添加)
UserNotifications.framework (Xcode8及以上)
libresolv.tbd (JPush 2.2.0及以上版本需要, Xcode7以下版本是libresolv.dylib)
其中對于AdSupport.framework 這個庫薪寓,一定要記得添加,敝人爬的就是這個坑澜共,按照官網(wǎng)的沒添加向叉,就報如下的錯:
2.AppDelegate 中要導(dǎo)入那些東西
導(dǎo)入的頭文件:
// 引入JPush功能所需頭文件
#import "JPUSHService.h"
// iOS10注冊APNs所需頭文件
#ifdef NSFoundationVersionNumber_iOS_9_x_Max
#import <UserNotifications/UserNotifications.h>
#endif
// 如果需要使用idfa功能所需要引入的頭文件(可選)
#import <AdSupport/AdSupport.h>
#define JPushAppKey @"您的極光推送的Appkey"
// 標(biāo)識當(dāng)前應(yīng)用所使用的APNs證書環(huán)境,0 (默認值)表示采用的是開發(fā)證書嗦董,1 表示采用生產(chǎn)證書發(fā)布應(yīng)用
#define isProduction 0
遵循<JPUSHRegisterDelegate>
Code方面
在didFinishLaunchingWithOptions 方法中加入以下代碼
// 初始化APNS
[self initAPNSCode];
// 初始化JPush
[self initJPush:launchOptions];
上面2個方法的實現(xiàn)如下:
// 初始化APNS
-(void)initAPNSCode {
//Required
//notice: 3.0.0及以后版本注冊可以這樣寫母谎,也可以繼續(xù)用之前的注冊方式
JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];
entity.types = JPAuthorizationOptionAlert|JPAuthorizationOptionBadge|JPAuthorizationOptionSound;
if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {
// 可以添加自定義categories
// NSSet<UNNotificationCategory *> *categories for iOS10 or later
// NSSet<UIUserNotificationCategory *> *categories for iOS8 and iOS9
}
[JPUSHService registerForRemoteNotificationConfig:entity delegate:self];
}
// 初始化JPush
-(void)initJPush:(NSDictionary *)launchOptions {
// Optional
// 獲取IDFA
// 如需使用IDFA功能請?zhí)砑哟舜a并在初始化方法的advertisingIdentifier參數(shù)中填寫對應(yīng)值
NSString *advertisingId = [[[ASIdentifierManager sharedManager] advertisingIdentifier] UUIDString];
// Required
// init Push
// notice: 2.1.5版本的SDK新增的注冊方法贡必,改成可上報IDFA歉提,如果沒有使用IDFA直接傳nil
// 如需繼續(xù)使用pushConfig.plist文件聲明appKey等配置內(nèi)容,請依舊使用[JPUSHService setupWithOption:launchOptions]方式初始化峭拘。
[JPUSHService setupWithOption:launchOptions appKey:JPushAppKey
channel:@"App Store"
apsForProduction:isProduction
advertisingIdentifier:nil];
}
添加以下UIApplication 和 JPUSHRegisterDelegate方法的實現(xiàn)
#pragma mark - UIApplication
- (void)application:(UIApplication *)application
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
/// Required - 注冊 DeviceToken
[JPUSHService registerDeviceToken:deviceToken];
}
- (void)application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error {
//Optional
NSLog(@"did Fail To Register For Remote Notifications With Error: %@", error);
}
#pragma mark- JPUSHRegisterDelegate
// iOS 10 Support
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler {
// Required
NSDictionary * userInfo = notification.request.content.userInfo;
if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
[JPUSHService handleRemoteNotification:userInfo];
}
completionHandler(UNNotificationPresentationOptionAlert); // 需要執(zhí)行這個方法匹摇,選擇是否提醒用戶咬扇,有Badge、Sound廊勃、Alert三種類型可以選擇設(shè)置
}
// iOS 10 Support
- (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
// Required
NSDictionary * userInfo = response.notification.request.content.userInfo;
if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {
[JPUSHService handleRemoteNotification:userInfo];
}
completionHandler(); // 系統(tǒng)要求執(zhí)行這個方法
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {
// Required, iOS 7 Support
[JPUSHService handleRemoteNotification:userInfo];
completionHandler(UIBackgroundFetchResultNewData);
}
- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {
// Required,For systems with less than or equal to iOS6
[JPUSHService handleRemoteNotification:userInfo];
}
3.其他注意事項:
Xcode 8之后的添加推送的方法如下圖所示:
另外Xcode 7之后添加info.plist 以下的key以支持http的請求
<key>NSAppTransportSecurity</key>
<dict>
<key>NSAllowsArbitraryLoads</key>
<true/>
</dict>
當(dāng)然您如果用我的空項目
http://www.reibang.com/p/c8b6b8660693
進行集成懈贺,這個支持http的key可以忽略!
4.本人集成過程中唯一爬過的坑分享:
先附上錯誤的圖片:
解決辦法:
被極光所誤供搀,還是要在在Build Phases選項卡的Link Binary With Libraries中添加AdSupport.framework隅居,之后Build ,成功了葛虐!
四.梳理集成第三方平臺SDK的步驟:
1.尋找資料胎源,合適的平臺,以及對應(yīng)的技術(shù)文檔
如申請賬號屿脐,創(chuàng)建應(yīng)用涕蚤,下載SDK等
2.創(chuàng)建自己的項目
導(dǎo)入SDK以及添加系統(tǒng)依賴庫
AppDelegate中導(dǎo)入頭文件加入代碼
具體實現(xiàn)的項目文件中導(dǎo)入頭文件以及加入代碼
3.開始調(diào)試宪卿,有2種方式:
假數(shù)據(jù):如支付技術(shù)
在人家平臺測試:如遠程推送等
4.收尾階段:
遇到的Bug,或者形成自己對這塊技術(shù)的思想精華万栅,并給予分享S蛹亍(特別是對于新手,建議樂于分享才能成長的更快7沉!)
附上自己集成過的技術(shù):(如果您想集成或者集成過程中休溶,遇到任何問題,我樂意給您解答扰她,分享無價嘛J揸)
地圖:百度地圖
支付:微信,支付寶支付
分享:友盟分享徒役,ShareSDK分享(微信孽尽,QQ,微博等分享)
第三方登錄:微信和QQ第三方登錄
聊天忧勿,即時通信:環(huán)信集成
推送:友盟推送杉女,極光推送
語音交流:科大訊飛的語音解析與合成
五.附上學(xué)習(xí)推送的參考資料:
1.極光推送官網(wǎng)
https://www.jiguang.cn
2.極光推送官方文檔
https://docs.jiguang.cn/jpush/client/iOS/ios_guide_new/
3.極光推送集成視頻教程
https://community.jiguang.cn/t/jpush-ios-sdk/4247
4.大牛寫的極光推送大全
http://www.reibang.com/p/53e0244e6081
重點來了:個人極光推送項目地址:
https://github.com/zxwIsCode/TestPushJiGuang
如果有任何問題,歡迎騷擾QQ:1824496534鸳吸,謝謝熏挎!
ps:本篇說的都是推送方面很簡單的問題,新手值的看下晌砾,老鳥可以繞過婆瓜,歡迎吐槽!
下篇會把極光推送方面的核心如Alias 和Tag 分群推送等總結(jié)下贡羔,一并分享!
修改日志:
于20170503修改:添加了Appkey支持項个初,以及原來部分圖片出錯乖寒!