中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

iOS SDK集成的方法有哪些

發布時間:2022-01-11 15:07:20 來源:億速云 閱讀:122 作者:iii 欄目:移動開發

這篇文章主要介紹了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

最讓我印象深刻的就是無效的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集成的方法有哪些”知識都有一定的了解,大家如果還想學習更多知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

科尔| 东兰县| 高青县| 左贡县| 潼南县| 沅陵县| 遂川县| 武平县| 布尔津县| 海丰县| 勃利县| 崇信县| 上栗县| 兴海县| 垦利县| 元江| 霍邱县| 乡城县| 黄龙县| 清河县| 随州市| 灌阳县| 渝北区| 拜城县| 新营市| 卢龙县| 河北省| 丰原市| 和政县| 大关县| 安岳县| 西华县| 乌拉特前旗| 峨山| 来宾市| 苍南县| 囊谦县| 泉州市| 观塘区| 滨州市| 黄大仙区|