日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

OC 教程 极光推送

發布時間:2023/12/10 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 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:如何使用別名指定推送

使用指定別名推送 可能是后臺做的 因為找不到傳送手機號碼的代碼 我別名發送拿貨的項目是寫手機號碼就可以了,但無發現前端傳送過手機號碼,應該是后臺寫的, 看看下面的代碼行不行 但拿貨的項目沒有寫過這樣的話。
寫在登錄按鍵的地方

// 設置極光推送的標簽和別名(標簽是一個集合可以包含多個關鍵詞 比如:紅的、黃的、綠的)(別名是每個用戶唯一的名稱可以 根據這個別名給唯一的用戶發推送) NSMutableSet *set = [[NSMutableSet alloc] initWithObjects:@"xxx",nil, nil]; // 標簽NSString *registrationIdStr = registrationID; // 別名[JPUSHService setTags:set alias:registrationIdStr callbackSelector:@selector(tagsAliasCallback:tags:alias:) object:self];//寫后接口的時候 調用后臺接口 把registrationIdStr傳給后臺// 極光推送 標簽和別名設置成功回調 - (void)tagsAliasCallback:(int)iResCode tags:(NSSet*)tags alias:(NSString*)alias {NSLog(@"rescode: %d, \ntags: %@, \nalias: %@\n", iResCode, tags , alias); }

手動集成極光推送

手動集成視頻

我已經把極光的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.framework

4.打開對應的功能

5.在info.plist里面進行設置

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

這樣子手動集成就完成了。

極光控制臺上面推送消息

首先先登錄極光官網,賬號密碼在iOS文件里面有,然后按照下面的步驟一步一步來就可以了。






這樣子的話,發送出去,手機就能夠收到消息了。

問題4:如何指定推送

在代碼里面需要在didFinishLaunchingWithOptions調用下面的方法拿到registrationID。

//保存registrationID 登錄成功上存到服務器 [JPUSHService registrationIDCompletionHandler:^(int resCode, NSString *registrationID) {//記錄極光注冊IDNSLog(@"registrationID: %@",registrationID); }];


回到極光的控制臺,把拿到的注冊ID填進去就可以針對用戶推送了。

這樣子也能夠針對個人推送成功的。
我們拿到的這個registrationID需要把它上存到后臺里面的,然后后臺會把我們的用戶信息綁定起來,例如跟手機號碼捆綁在一起的,到時候我們可以通過手機號碼指定推送給用戶,到時候我們用手機號碼推送給用戶的時候需要在下面的框里面去寫


關于別名推送在問題三也有體過的。

總結

以上是生活随笔為你收集整理的OC 教程 极光推送的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。