OC 教程 极光推送
一直覺得自己寫的不是技術,而是情懷,一個個的教程是自己這一路走來的痕跡。靠專業技能的成功是最具可復制性的,希望我的這條路能讓你們少走彎路,希望我能幫你們抹去知識的蒙塵,希望我能幫你們理清知識的脈絡,希望未來技術之巔上有你們也有我。
說明:今天打算寫一下極光推送的整個過程,在編寫的時候已經錄制了視頻,不過這個視頻是留給未來的我看的,今年準備自學Pyhton,視頻不打算分享,里面涉及項目的隱私資料,我把整個重要的過程用圖片的形式寫出來。
OC 項目底層框架(萬能)
官網極光推送ios開發文檔
視頻位置:
印象筆記
說明一下:測試的時候要用真機測試,不然模擬器無法推送。
馬上開始:
注意:下面講的在蘋果官網上面申請推送證書的時候,App是沒有上架的情況下先配置項目描述文件。如果項目是已經上架了,再去做極光推送功能的話。只要在點擊進項目描述文件把推送功能打開,直接創建開發SSL證書跟生產SSL證書就可以了。
如果App上架打開推送功能 看下面
上線的圖片創建創建開發SSL證書跟生產SSL證書的時候如果沒有需要你上存SCR證書的步驟就需要注意,我在2019年配置的時候在上線的兩張圖片點進去配置發現缺少不需要你上存SCR證書。這個是系統的BUG,SCR證書是一定要上存。如果發現缺少上存SCR證書的時候可以到配置證書哪里配置。詳見下面 問題1 有詳細步驟
重點:極光推送的主要流程
1.上蘋果網站上面創建一個AppID,來綁定你項目里面的BundleID
2.然后在自己的電腦上面生成一個SCR文件
3.上蘋果網站上面創建一張開發推送證書和發布推送證書(這兩張證書在創建的過程中會用到SCR文件)
4.兩張證書完成之后下載下來雙擊安裝。在鑰匙串里面可以看到已經安裝的兩張證書。分別右擊導出p12文件。
5.上極光網站申請當前項目的app應用。把兩張證書填寫進去。就ok了,會生成一個appKey.會用到項目里面去。
6.在項目里面的設置兩個地方,都是打開推送的按鈕。具體看下面。
7.在AppDelegate里面寫代碼.
下面講的就是圍繞上面的7點展開說明:
1.上蘋果網站上面創建一個AppID,來綁定你項目里面的BundleID。
這個就是你得開發者賬號,一般到公司工作,公司都會給你一個開發者賬號的。無就用公司的企業郵箱申請一個。
2.然后在自己的電腦上面生成一個SCR文件
3.上蘋果網站上面創建一張開發推送證書和發布推送證書(這兩張證書在創建的過程中會用到SCR文件)
3.1先申請項目描述文件。
往下拉
步驟2
AppID配置好之后就配置推送證書
4.兩張證書完成之后下載下來雙擊安裝。在鑰匙串里面可以看到已經安裝的兩張證書。分別右擊導出p12文件。
5.上極光網站申請當前項目的app應用。把兩張證書填寫進去。就ok了,會生成一個appKey.會用到項目里面去。
回到項目
6.在項目里面的設置兩個地方,都是打開推送的按鈕。具體看下面。
7.在AppDelegate里面寫代碼.
代碼
// 引入 JPush 功能所需頭文件 #import "JPUSHService.h"//20220110測試過只需要引入這個就可以了 /*iOS10 注冊 APNs 所需頭文件 記得必須添加<UserNotifications/UserNotifications.h>,否則無法監聽APNS 是蘋果內推 極光推送的實際也是最后通過蘋果推送的.當App啟動a拿到deviceToken之后要把deviceToken傳到極光SDK.不然關屏或者前臺無法收到推送消息,因為這個消息是屬于蘋果推送的,*/ #ifdef NSFoundationVersionNumber_iOS_9_x_Max//20220110測試過可以不寫 #import <UserNotifications/UserNotifications.h>//20220110測試過可以不寫 #endif//20220110測試過可以不寫 // /* 好像沒有用 等待驗證IDFA是蘋果官方唯一允許廣告獲取用戶的信息 這個暫時用不上如果需要使用 idfa 功能所需要引入的頭文件(可選)*/ #import <AdSupport/AdSupport.h>//20220110測試過可以不寫<JPUSHRegisterDelegate>didFinishLaunchingWithOptions代理方法寫一下的內容//極光推送 JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];if (@available(iOS 12.0, *)) {entity.types = JPAuthorizationOptionAlert|JPAuthorizationOptionBadge|JPAuthorizationOptionSound|JPAuthorizationOptionProvidesAppNotificationSettings;} else {// Fallback on earlier versions}if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {// 可以添加自定義 categories}[JPUSHService registerForRemoteNotificationConfig:entity delegate:self];//apsForProduction :NO(測試開發環境) YES(生產環境)[JPUSHService setupWithOption:launchOptions appKey:@"000000000000000000" channel:@"AAA channel" apsForProduction:YES];//注冊遠端消息通知獲取device token[application registerForRemoteNotifications];//保存registrationID 登錄成功上存到服務器[JPUSHService registrationIDCompletionHandler:^(int resCode, NSString *registrationID) {//記錄極光注冊ID[LoginUserInfo new].JPUSHRegistID = registrationID;}];/**在applicationWillEnterForeground方法(App即將進入前臺)中將小紅點清除*/ - (void)applicationWillEnterForeground:(UIApplication *)application {NSLog(@"進入前臺");[UIApplication sharedApplication].applicationIconBadgeNumber = 0;[application cancelAllLocalNotifications]; }#pragma mark- JPUSHRegisterDelegate // iOS 12 Support 好像沒有用 等待驗證 - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center openSettingsForNotification:(UNNotification *)notification API_AVAILABLE(ios(10.0)){if (notification && [notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {//從通知界面直接進入應用NSLog(@"從通知界面直接進入應用");}else{//從通知設置界面進入應用NSLog(@"從通知設置界面進入應用");} }// iOS 10 Support 1 當前應用進來 - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center willPresentNotification:(UNNotification *)notification withCompletionHandler:(void (^)(NSInteger))completionHandler API_AVAILABLE(ios(10.0)){// RequiredNSDictionary * userInfo = notification.request.content.userInfo;if([notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {[JPUSHService handleRemoteNotification:userInfo];}[[JPushManager sharedManager] responseResult:userInfo];//全局勾選代理,需要自己子定義的// 需要執行這個方法,選擇是否提醒用戶,有 Badge(標記)、Sound(聲音)、Alert(彈窗現實5秒) 三種類型可以選擇設置completionHandler(UNNotificationPresentationOptionSound);//選擇聲音 因為我用自定義框 如果選擇Alert會重復a彈框 }// iOS 10 Support 2 解鎖屏幕進來 - (void)jpushNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)(void))completionHandler API_AVAILABLE(ios(10.0)){// RequiredNSDictionary * userInfo = response.notification.request.content.userInfo;if([response.notification.request.trigger isKindOfClass:[UNPushNotificationTrigger class]]) {[JPUSHService handleRemoteNotification:userInfo];}completionHandler(); // 系統要求執行這個方法 }- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler {//發送通知 感覺無用的這句話[[NSNotificationCenter defaultCenter] postNotificationName:@"showRedBadge" object:nil userInfo:userInfo];// 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]; }// 將得到的deviceToken傳給SDK /*溫馨提示:JPush 3.0.9 之前的版本,必須調用此接口,注冊 token 之后才可以登錄極光,使用通知和自定義消息功能。從 JPush 3.0.9 版本開始,不調用此方法也可以登錄極光。但是不能使用 APNs 通知功能,只可以使用 JPush 自定義消息。*/ - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{[JPUSHService registerDeviceToken:deviceToken]; }問題1:
2019年新的配置畫面
配置開發證書
問題2:
遇到一個問題。就是測試的能夠推送,正式發布之后收不了推送.
首先說明一下,不管公司當前是正式服還是測試服,凡是通過XCode寫進手機的程序都是屬于開發模式。蘋果用的證書是開發證書
下面一個一個可能進行排除
通過AppStore下載下來的程序,App用的是發布證書.
極光推送分兩種推送的,一種是測試時候用的開發模式(用于測試的推送).另一種是上架AppStore生產模式用的(正式發布),所以上架的時候需要注意下面apsForProduction的參數設置。
//apsForProduction :NO(測試開發環境) YES(生產環境) [JPUSHService setupWithOption:launchOptions appKey:@"000000000000000000000" channel:@"AAAAA channel" apsForProduction:YES]; 造成這次的原因主要是上面的問題,上架的時候記得改為YES。測試可以改為NO。然后用蒲公英測試再打包. 但是改了也是都不行。后來發現缺小了下面的一句話. // 將得到的deviceToken傳給SDK /*溫馨提示:JPush 3.0.9 之前的版本,必須調用此接口,注冊 token 之后才可以登錄極光,使用通知和自定義消息功能。從 JPush 3.0.9 版本開始,不調用此方法也可以登錄極光。但是不能使用 APNs 通知功能,只可以使用 JPush 自定義消息。*/ - (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{[JPUSHService registerDeviceToken:deviceToken]; }然后又改了注冊設置極光的代碼.
//極光推送 JPUSHRegisterEntity * entity = [[JPUSHRegisterEntity alloc] init];if (@available(iOS 12.0, *)) {entity.types = JPAuthorizationOptionAlert|JPAuthorizationOptionBadge|JPAuthorizationOptionSound|JPAuthorizationOptionProvidesAppNotificationSettings;} else {// Fallback on earlier versions}if ([[UIDevice currentDevice].systemVersion floatValue] >= 8.0) {// 可以添加自定義 categories}[JPUSHService registerForRemoteNotificationConfig:entity delegate:self];//apsForProduction :NO(測試開發環境) YES(生產環境)[JPUSHService setupWithOption:launchOptions appKey:@"000000000000000000000000" channel:@"Publish channel" apsForProduction:YES];//注冊遠端消息通知獲取device token[application registerForRemoteNotifications];//保存registrationID 登錄成功上存到服務器[JPUSHService registrationIDCompletionHandler:^(int resCode, NSString *registrationID) {//記錄極光注冊ID[LoginUserInfo new].JPUSHRegistID = registrationID;}];退出極光登錄 用于指定用戶推送的
[JPUSHService deleteAlias:^(NSInteger iResCode, NSString *iAlias, NSInteger seq) {NSLog(@"極光推送別名退出 rescode: %ld, \ntags: %@, \nalias: %@\n", (long)iResCode, @"tag" , iAlias); }然后有升級了極光最新的版本.
pod update
pod install
下面的證書要一一對應
如果有問題可以看看蘋果官網上的項目是否配置證書
項目對應選擇的證書
檢查電腦安裝項目的推送證書并且還沒有過期
極光推動驗證通過
關于網上設置可以訪問http的問題
開啟極光推送
問題3:如何使用別名指定推送
使用指定別名推送 可能是后臺做的 因為找不到傳送手機號碼的代碼 我別名發送拿貨的項目是寫手機號碼就可以了,但無發現前端傳送過手機號碼,應該是后臺寫的, 看看下面的代碼行不行 但拿貨的項目沒有寫過這樣的話。
寫在登錄按鍵的地方
手動集成極光推送
手動集成視頻
我已經把極光的SDK需要的文件已經打包好了,直接下載拖進項目里面就可以了:https://download.csdn.net/download/weixin_38716347/75223834
1.官網的對接網站:https://docs.jiguang.cn/jpush/client/iOS/ios_guide_new/
2.對接之前首先先把SDK下載下來:https://docs.jiguang.cn/jpush/resources/
把它復制出來放到項目里面,例如:看下面的圖片
3.添加添加 Framework
CFNetwork.framework CoreFoundation.framework CoreTelephony.framework SystemConfiguration.framework CoreGraphics.framework Foundation.framework UIKit.framework Security.framework libz.tbd UserNotifications.framework libresolv.tbd WebKit.framework StoreKit.framework4.打開對應的功能
5.在info.plist里面進行設置
這樣子手動集成就完成了。
極光控制臺上面推送消息
首先先登錄極光官網,賬號密碼在iOS文件里面有,然后按照下面的步驟一步一步來就可以了。
這樣子的話,發送出去,手機就能夠收到消息了。
問題4:如何指定推送
在代碼里面需要在didFinishLaunchingWithOptions調用下面的方法拿到registrationID。
//保存registrationID 登錄成功上存到服務器 [JPUSHService registrationIDCompletionHandler:^(int resCode, NSString *registrationID) {//記錄極光注冊IDNSLog(@"registrationID: %@",registrationID); }];
回到極光的控制臺,把拿到的注冊ID填進去就可以針對用戶推送了。
這樣子也能夠針對個人推送成功的。
我們拿到的這個registrationID需要把它上存到后臺里面的,然后后臺會把我們的用戶信息綁定起來,例如跟手機號碼捆綁在一起的,到時候我們可以通過手機號碼指定推送給用戶,到時候我們用手機號碼推送給用戶的時候需要在下面的框里面去寫
關于別名推送在問題三也有體過的。
總結
以上是生活随笔為你收集整理的OC 教程 极光推送的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: Linux 4.15 rc7,Linux
- 下一篇: node --- 游走在客户端和服务器