您好,登錄后才能下訂單哦!
這篇文章主要介紹了iOS SDK集成的方法有哪些的相關知識,內容詳細易懂,操作簡單快捷,具有一定借鑒價值,相信大家閱讀完這篇iOS SDK集成的方法有哪些文章都會有所收獲,下面我們一起來看看吧。
###CocoaPods集成
1.安裝CocoaPods
安裝方式簡單, Mac 下都自帶 ruby,使用 ruby 的 gem 命令即可下載安裝:
$ sudo gem install cocoapods
$ pod setup
2.準備Podfile文件
在我們的工程目錄下,新建一個名為Podfile的文件,如下格式,將依賴的庫名字依次列在文件中即可:
作者這里使用的是標準版本:
target 'GeTuipush' do
platform :ios, "7.0"
pod 'GTSDK'
end
target 'NotificationService' do
platform :ios, "10.0"
pod 'GTExtensionSDK'
end
3.完成GTSDK導入
在項目根目錄中執行如下命令:
$ pod install
執行完成后,項目目錄結構如下圖所示:
注意:在pod install之前,首先你的工程必須創建好,并且如果Podfile文件里面如果有target:NotificationService,那在pod install之前需要創建好通知擴展的Target。
4.開啟推送功能:既然是推送,當然是要開推送功能啦!:
5.后臺運行權限設置:看個推的官網上面說是為了更好的支持消息推送,提供更多的推送樣式,提高消息到達率,既然這么說了,那就不管三七二十一先開了再說,如下圖所示:
6.XCode10建議開啟WiFi信息授權:在 Xcode 10.x 以上,找到應用Target設置中的Capabilities -> Access WiFi Information,確認開關已經設為ON狀態。如下圖所示:
注意:主Target和通知擴展的Target都需要打開
7.代碼部分,下來就是我們程序猿最喜歡的部分了,粘貼復制。由于是第一次集成個推SDK的代碼,我還是仔細的研究了下。
####初始化SDK注冊APNs并獲取CID
1.為AppDelegate增加回調接口類:
#import <UIKit/UIKit.h>
#import <GTSDK/GeTuiSdk.h>
// iOS10
及以上需導入 UserNotifications.framework
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
#import <UserNotifications/UserNotifications.h>
#endif
@interface AppDelegate : UIResponder <UIApplicationDelegate, GeTuiSdkDelegate, UNUserNotificationCenterDelegate>
@property (strong, nonatomic) UIWindow *window;
@end
2.初始化SDK并注冊APNs:
#import "AppDelegate.h"
///
個推開發者網站中申請App時,注冊的AppId、AppKey、AppSecret
#define kGtAppId @"GVZZTqh7lu6S4VLMacneZ7"
#define kGtAppKey @"RRYDFjGzO17TJXZfGeTuq3"
#define kGtAppSecret @"7BXDJ0IgWF6a8M0xCgo4G"
@interface AppDelegate ()
@end
@implementation AppDelegate
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
// Override point for customization after application launch.
[GeTuiSdk startSdkWithAppId:kGtAppId appKey:kGtAppKey appSecret:kGtAppSecret delegate:self];
//
注冊 APNs
[self registerRemoteNotification];
return YES;
}
注冊APNs獲取DeviceToken:
/**
注冊 APNs */
- (void)registerRemoteNotification {
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
[center requestAuthorizationWithOptions:(UNAuthorizationOptionBadge | UNAuthorizationOptionSound | UNAuthorizationOptionAlert | UNAuthorizationOptionCarPlay) completionHandler:^(BOOL granted, NSError *_Nullable error) {
if (!error) {
NSLog(@"request authorization succeeded!");
}
}];
[[UIApplication sharedApplication] registerForRemoteNotifications];
}
個推demo里面給開發者提供演示代碼,根據APP支持的iOS系統不同,進行修改。我們的工程最低支持iOS10。
獲取CID信息:
/** SDK啟動成功返回cid */
- (void)GeTuiSdkDidRegisterClient:(NSString *)clientId {
NSLog(@"clientId:%@", clientId);
}
這三個參數kGtAppId、kGtAppKey、kGtAppSecret是干啥用的,這三個參數如何獲取?回頭又看了下個推的官網才搞明白,正好記錄下如何申請者三個參數,跟我應用的bundleID綁定。
####如何獲取kGtAppId、kGtAppKey、kGtAppSecret
1.創建個推開發者賬號
訪問個推開發者中心,申請個推賬號
2.登記新應用
注意: 登記新應用是在應用管理頁面而不是消息推送頁面。
在登記應用界面填寫應用名和應用表示,勾選個推產品,勾選iOS,填寫包名和bundleID,如下圖所示:
這里我有點疑惑。創建應用的時候想勾選iOS,但是看到默認選擇了Android平臺,并要填寫Android簽名,這簽名是what,這如何搞?看到跟前有個提示如何獲取,點了一下,發現里面有SHA256的簽名,抱著試一試的態度,直接copy過來,呦呵,能用哦,心里美滋滋。
提交成功后就可以獲取到kGtAppId、kGtAppKey、kGtAppSecret,將三個參數填入我們的工程中,然后運行工程,在GeTuiSdkDidRegisterClient的回調方法中獲取到cid了,嗯,看來我們已經成功了一一小部分了,距離成功還要繼續加油。
####注冊DeviceToken并統計APNs通知的點擊數
1.向個推服務器注冊DeviceToken:
/**
遠程通知注冊成功委托 */
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
//向個推服務器注冊deviceToken
為了方便開發者,建議使用新方法
NSLog(@"deviceToken:%@",deviceToken);
[GeTuiSdk registerDeviceTokenData:deviceToken];
}
2.處理APNs通知點擊事件:
因為我們的工程最低適配到iOS10,這里我就只添加了iOS10及以后版本的通知點擊事件,要是想兼容iOS10以下的,可以在個推的demo中找到。
iOS 10及以后版本,處理APNs通知點擊事件
// iOS 10:
點擊通知進入App時觸發,在該方法內統計有效用戶點擊數
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {
NSLog(@"didReceiveNotification:%@", response.notification.request.content.userInfo);
// [ GTSdk ]:將收到的APNs信息傳給個推統計
[GeTuiSdk handleRemoteNotification:response.notification.request.content.userInfo];
completionHandler();
}
3.接受個推通道下發的透傳消息:
/** SDK收到透傳消息回調 */
- (void)GeTuiSdkDidReceivePayloadData:(NSData *)payloadData andTaskId:(NSString *)taskId andMsgId:(NSString *)msgId andOffLine:(BOOL)offLine fromGtAppId:(NSString *)appId {
//收到個推消息
NSString *payloadMsg = nil;
if (payloadData) {
payloadMsg = [[NSString alloc] initWithBytes:payloadData.bytes length:payloadData.length encoding:NSUTF8StringEncoding];
}
NSString *msg = [NSString stringWithFormat:@"taskId=%@,messageId:%@,payloadMsg:%@%@",taskId,msgId, payloadMsg,offLine ? @"<離線消息>" : @""];
NSLog(@"\n>>>[GexinSdk ReceivePayload]:%@\n\n", msg);
}
獲取到了透傳消息,但是當應用在后臺或者應用殺死的情況下,我們如何獲取到APNs消息,這里我們就需要在個推平臺用到推送證書,如何獲取推送證書?因為本人也是第一次搞推送這書,而且也踩了不少的坑,為了下次不再踩同樣的坑,所以在這里就對如何制作推送證書進行了一次規整。
####如何制作推送證書?
1.進入蘋果開發者中心,選擇證書選項,如下圖所示:
2.創建推送證書之前必須創建一個APPID,因為推送證書是和APPID綁定在一起的,如下圖所示:
在下面的App Services中選擇允許推送(Push Notifications),如下圖所示:
3.APPID創建好了之后,這個時候需要去創建推送證書,而且還要根據需要的環境選擇對應的推送證書,包括開發環境推送證書和生產環境推送證書,然后還要跟剛才創建好的APPID相關聯,如下圖所示:
這個時候需要上傳CSR文件,我們回到桌面,打開鑰匙串,從頒發機構申請證書并保存到本地磁盤,如下圖所示:
這樣CSR文件就創建好了,我們回到蘋果開發者中心,繼續創建我們的推送證書,選擇保存到本地的CSR文件,如下圖所示:
這樣,我們的推送證書就創建完成了,在本地下載中找到下載的推送證書并雙擊添加到鑰匙串中,然后打開鑰匙串找到創建好的推送證書,右鍵導出P12證書,并輸入證書密碼,如下圖所示:
4.打開我們的個推開發者中心,在個推·消息推送-應用列表-應用配置”中上傳正確的APNs證書,如下圖所示:
接下來最重要的時刻來了,那就是測試了,看看我們的推送能不能成功。
###推送測試
本人是在個推平臺上面進行推送測試的,在應用列表里面點擊之前創建的應用上的創建推送按鈕,如下圖所示:
進入后,我有點懵逼,因為之前沒有了解過個推SDK的邏輯,在詢問了個推技術支持后,技術支持告訴我怎么在個推平臺上面去推,也是自己太粗心了,人家進去第一句話就寫的很清楚,推送通知目前僅支持安卓用戶,iOS請使用透傳消息。尷尬!那就透傳消息頁面試試推。如下圖所示:
透傳消息測試:
APNs消息測試
NICE啊,這下應用在前臺、應用在后臺和應用被殺死的情況下都可以收到推送消息了,爽歪歪啊!看來我們已經成功看了百分之九十了!
###Notification Service Extension
正在沾沾自喜的時候,突然發現個推的官網上面還有多媒體推送,我靠,還有這種操作,好奇心的趨勢下,讓我重新審視如何去做多媒體推送。因為我們之前已經把通知擴展的target創建好了,所以,直接上代碼。
1.Notification Service Extension 添加成功后會在項目中自動生成 NotificationService.h 和 NotificationService.m 兩個類,包含以下兩個方法:
- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent *_Nonnull))contentHandler {
self.contentHandler = contentHandler;
self.bestAttemptContent = [request.content mutableCopy];
// [
測試代碼 ] TODO:用戶可以在這里處理通知樣式的修改,eg:修改標題,開發階段可以用于判斷是否運行通知擴展
//self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [WillIn]", self.bestAttemptContent.title];
// [ GTSDK ]
統計APNs到達情況和多媒體推送支持接口,
建議使用該接口
[GeTuiExtSdk handelNotificationServiceRequest:request withAttachmentsComplete:^(NSArray *attachments, NSArray *errors) {
// self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [Success]", self.bestAttemptContent.title];
self.bestAttemptContent.attachments = attachments; //
設置通知中的多媒體附件
self.contentHandler(self.bestAttemptContent);
}];
}
我們可以在這個方法中處理我們的 APNs 通知,并個性化展示給用戶。APNs 推送的消息送達時會調用這個方法,此時你可以對推送的內容進行處理,然后使用contentHandler方法結束這次處理。但是如果處理時間過長,將會進入serviceExtensionTimeWillExpire方法進行最后的緊急處理。
- (void)serviceExtensionTimeWillExpire {
// [ GTSDK ]
銷毀SDK,釋放資源
[GeTuiExtSdk destory];
//self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [Timeout]", self.bestAttemptContent.title];
self.contentHandler(self.bestAttemptContent);
}
如果didReceiveNotificationRequest方法在限定時間內沒有調用 contentHandler方法結束處理,則會在過期之前進行回調本方法。此時你可以對你的 APNs 消息進行緊急處理后展示,如果沒有處理,則顯示原始 APNs 推送。
接下來就是測試我們的多媒體推送是否成功,我在網上找了個小狗的照片,直接在個推平臺上面推。
多媒體測試
6啊,終于搞定了!棒棒噠~~~
但是,之前的一個老項目說也要集成推送,我透,老項目要用XCode集成,這對于我這種懶人來說,簡直是一種折磨啊,哎,折磨歸折磨,該搞還要搞。但是之前已經用CocoaPods搞過一遍,這次用XCode集成還不是手到擒來。但是為了防止出錯,本人還是先做了個demo,這樣后面在自己項目上面集成的話把握性會更大,踩的坑也就會更少。
###XCode集成
1.導入個推SDK:
2.庫引用檢查:
3.添加系統依賴庫:
libc++.tbd
libz.tbd
libsqlite3.tbd
libresolv.tbd
Security.framework
MobileCoreServices.framework
SystemConfiguration.framework
CoreTelephony.framework
AVFoundation.framework
CoreLocation.framework
UserNotifications.framework (iOS 10
及以上需添加,使用 Optional
方式接入)
AdSupport.framework
(如果使用無IDFA版本SDK,則需刪除該 AdSupport
庫)
幸虧后面的步驟基本上都是一樣的,唯一的欣慰呀!
4.開啟推送功能、后臺運行權限設置、開啟WiFi信息授權
這里跟上面步驟一樣,就不啰嗦了。
5.copy代碼,這是我們程序猿最喜歡的啦,哈哈哈,之前搞過,這里就不累贅了。
6.添加Notification Service Extension
(1).打開XCode,菜單中選擇File->New->Target->Notification Service Extension。如下圖所示:
注意:1.Extension的Bundle Identifier不能和Main Target(也就是自己的App Target)的Bundle Identifier相同,否則會報BundleID重復的錯誤。2.Extension 的 Bundle Identifier 需要在 Main Target 的命名空間下,比如說 Main Target 的 BundleID 為 ent.getui.xxx,那么Extension的BundleID應該類似與ent.getui.xxx.yyy這樣的格式。如果不這么做,會引起命名錯誤。
這個是在個推官網上面看到的,之前自己也踩了這個坑,這里就記錄下來。
添加 Notification Service Extension 后會生成相應的 Target。點Finish按鈕后會彈出是否激活該 Target 對應 scheme 的選項框,選擇 Activate,如果沒有彈出該選項框,需要自行添加相應的 scheme。如下圖所示:
(2).Notification Service Extension 添加成功后會在項目中自動生成 NotificationService.h 和 NotificationService.m 兩個類
這里跟上面一樣,就不累贅了。
(3).添加GtExtensionSdk依賴庫
選擇Notification Service Extension所對應的Target,添加如下依賴庫:
libz.tbd
libsqlite3.tbd
GTExtensionSDK.framework
UserNotifications.framework
(4).XCode10建議開啟WiFi信息授權:在 Xcode 10.x 以上,找到應用Target設置中的Capabilities -> Access WiFi Information,確認開關已經設為ON狀態。如下圖所示:
(5).開啟多媒體地址Http訪問支持:
##集成過程中遇到的問題
最讓我印象深刻的就是無效的deviceToken,在測試APNS推送的時候,詢問過個推那邊的技術支持,他們說可以先在應用配置里面測試一下,然后我就拿著我的deviceToken去測試一下,結果提示我是無效的deviceToken,我暈,然后繼續咨詢個推的技術支持,他們還蠻耐心的,跟我說這個原因有可能是我證書環境的問題。經過一番仔細的檢查之后,發現,我在個推平臺上面上傳的是通用證書,然后我XCode上面的授權證書是開發環境下,這樣一來,拿到的是開發環境下的deviceToken,用測試一下,當然會出錯。 解決的方案有兩種:第一,在個推開發平臺上傳開發環境下的推送證書。第二:將自己的授權證書更換為生產環境。
self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [Success]", self.bestAttemptContent.title];
發現demo里面有這么一行代碼,我把這行代碼打開后,推送一條消息,發現標題沒有變化,我驚呆了!詢問個推技術支持,個推技術支持說,讓我先運行主target,然后再運行通知擴展,運行通知擴展的時候會讓我們去找主targetAPP,選擇主target,然后再推送就會有了,嗯,想了下,這個應該是XCode的bug。
關于“iOS SDK集成的方法有哪些”這篇文章的內容就介紹到這里,感謝各位的閱讀!相信大家對“iOS SDK集成的方法有哪些”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。