真实的国产乱ⅩXXX66竹夫人,五月香六月婷婷激情综合,亚洲日本VA一区二区三区,亚洲精品一区二区三区麻豆

成都創(chuàng)新互聯(lián)網(wǎng)站制作重慶分公司

iOSSDK集成的方法有哪些

這篇文章主要介紹了iOS SDK集成的方法有哪些的相關(guān)知識(shí),內(nèi)容詳細(xì)易懂,操作簡(jiǎn)單快捷,具有一定借鑒價(jià)值,相信大家閱讀完這篇iOS SDK集成的方法有哪些文章都會(huì)有所收獲,下面我們一起來看看吧。

10余年的荔浦網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷型網(wǎng)站建設(shè)的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整荔浦建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)從事“荔浦網(wǎng)站設(shè)計(jì)”,“荔浦網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。

###CocoaPods集成

1.安裝CocoaPods

安裝方式簡(jiǎn)單, Mac 下都自帶 ruby,使用 ruby 的 gem 命令即可下載安裝:

$ sudo gem install cocoapods
$ pod setup

2.準(zhǔn)備Podfile文件

在我們的工程目錄下,新建一個(gè)名為Podfile的文件,如下格式,將依賴的庫名字依次列在文件中即可:

作者這里使用的是標(biāo)準(zhǔn)版本:

target 'GeTuipush' do
    platform :ios, "7.0"
    pod 'GTSDK'
end

target 'NotificationService' do
    platform :ios, "10.0"
    pod 'GTExtensionSDK'
end

3.完成GTSDK導(dǎo)入

在項(xiàng)目根目錄中執(zhí)行如下命令:

$ pod install

執(zhí)行完成后,項(xiàng)目目錄結(jié)構(gòu)如下圖所示:

注意:在pod install之前,首先你的工程必須創(chuàng)建好,并且如果Podfile文件里面如果有target:NotificationService,那在pod install之前需要?jiǎng)?chuàng)建好通知擴(kuò)展的Target。

4.開啟推送功能:既然是推送,當(dāng)然是要開推送功能啦?。?/p>

5.后臺(tái)運(yùn)行權(quán)限設(shè)置:看個(gè)推的官網(wǎng)上面說是為了更好的支持消息推送,提供更多的推送樣式,提高消息到達(dá)率,既然這么說了,那就不管三七二十一先開了再說,如下圖所示:

6.XCode10建議開啟WiFi信息授權(quán):在 Xcode 10.x 以上,找到應(yīng)用Target設(shè)置中的Capabilities -> Access WiFi Information,確認(rèn)開關(guān)已經(jīng)設(shè)為ON狀態(tài)。如下圖所示:

注意:主Target和通知擴(kuò)展的Target都需要打開

7.代碼部分,下來就是我們程序猿最喜歡的部分了,粘貼復(fù)制。由于是第一次集成個(gè)推SDK的代碼,我還是仔細(xì)的研究了下。

####初始化SDK注冊(cè)APNs并獲取CID

1.為AppDelegate增加回調(diào)接口類:

#import
#import

// iOS10 及以上需導(dǎo)入 UserNotifications.framework
#if __IPHONE_OS_VERSION_MAX_ALLOWED >= __IPHONE_10_0
#import
#endif

@interface AppDelegate : UIResponder

@property (strong, nonatomic) UIWindow *window;


@end

2.初始化SDK并注冊(cè)APNs:

#import "AppDelegate.h"

/// 個(gè)推開發(fā)者網(wǎng)站中申請(qǐng)App時(shí),注冊(cè)的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];
    // 注冊(cè) APNs
    [self registerRemoteNotification];
    return YES;
}

注冊(cè)APNs獲取DeviceToken:

/** 注冊(cè) 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];
}

個(gè)推demo里面給開發(fā)者提供演示代碼,根據(jù)APP支持的iOS系統(tǒng)不同,進(jìn)行修改。我們的工程最低支持iOS10。

獲取CID信息:

/** SDK啟動(dòng)成功返回cid */
- (void)GeTuiSdkDidRegisterClient:(NSString *)clientId {
   
    NSLog(@"clientId:%@", clientId);
}

這三個(gè)參數(shù)kGtAppId、kGtAppKey、kGtAppSecret是干啥用的,這三個(gè)參數(shù)如何獲取?回頭又看了下個(gè)推的官網(wǎng)才搞明白,正好記錄下如何申請(qǐng)者三個(gè)參數(shù),跟我應(yīng)用的bundleID綁定。

####如何獲取kGtAppId、kGtAppKey、kGtAppSecret

1.創(chuàng)建個(gè)推開發(fā)者賬號(hào)

訪問個(gè)推開發(fā)者中心,申請(qǐng)個(gè)推賬號(hào)

2.登記新應(yīng)用

注意: 登記新應(yīng)用是在應(yīng)用管理頁面而不是消息推送頁面。

在登記應(yīng)用界面填寫應(yīng)用名和應(yīng)用表示,勾選個(gè)推產(chǎn)品,勾選iOS,填寫包名和bundleID,如下圖所示:

這里我有點(diǎn)疑惑。創(chuàng)建應(yīng)用的時(shí)候想勾選iOS,但是看到默認(rèn)選擇了Android平臺(tái),并要填寫Android簽名,這簽名是what,這如何搞?看到跟前有個(gè)提示如何獲取,點(diǎn)了一下,發(fā)現(xiàn)里面有SHA256的簽名,抱著試一試的態(tài)度,直接copy過來,呦呵,能用哦,心里美滋滋。

提交成功后就可以獲取到kGtAppId、kGtAppKey、kGtAppSecret,將三個(gè)參數(shù)填入我們的工程中,然后運(yùn)行工程,在GeTuiSdkDidRegisterClient的回調(diào)方法中獲取到cid了,嗯,看來我們已經(jīng)成功了一一小部分了,距離成功還要繼續(xù)加油。

####注冊(cè)DeviceToken并統(tǒng)計(jì)APNs通知的點(diǎn)擊數(shù)

1.向個(gè)推服務(wù)器注冊(cè)DeviceToken:

/** 遠(yuǎn)程通知注冊(cè)成功委托 */
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
    //向個(gè)推服務(wù)器注冊(cè)deviceToken 為了方便開發(fā)者,建議使用新方法
    NSLog(@"deviceToken:%@",deviceToken);
    [GeTuiSdk registerDeviceTokenData:deviceToken];
}

2.處理APNs通知點(diǎn)擊事件:

因?yàn)槲覀兊墓こ套畹瓦m配到iOS10,這里我就只添加了iOS10及以后版本的通知點(diǎn)擊事件,要是想兼容iOS10以下的,可以在個(gè)推的demo中找到。

iOS 10及以后版本,處理APNs通知點(diǎn)擊事件

//  iOS 10: 點(diǎn)擊通知進(jìn)入App時(shí)觸發(fā),在該方法內(nèi)統(tǒng)計(jì)有效用戶點(diǎn)擊數(shù)
- (void)userNotificationCenter:(UNUserNotificationCenter *)center didReceiveNotificationResponse:(UNNotificationResponse *)response withCompletionHandler:(void (^)())completionHandler {

    NSLog(@"didReceiveNotification:%@", response.notification.request.content.userInfo);

    // [ GTSdk ]:將收到的APNs信息傳給個(gè)推統(tǒng)計(jì)
    [GeTuiSdk handleRemoteNotification:response.notification.request.content.userInfo];

    completionHandler();
}

3.接受個(gè)推通道下發(fā)的透?jìng)飨ⅲ?/p>

/** SDK收到透?jìng)飨⒒卣{(diào) */
- (void)GeTuiSdkDidReceivePayloadData:(NSData *)payloadData andTaskId:(NSString *)taskId andMsgId:(NSString *)msgId andOffLine:(BOOL)offLine fromGtAppId:(NSString *)appId {
    //收到個(gè)推消息
    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);
}

獲取到了透?jìng)飨?,但是?dāng)應(yīng)用在后臺(tái)或者應(yīng)用殺死的情況下,我們?nèi)绾潍@取到APNs消息,這里我們就需要在個(gè)推平臺(tái)用到推送證書,如何獲取推送證書?因?yàn)楸救艘彩堑谝淮胃阃扑瓦@書,而且也踩了不少的坑,為了下次不再踩同樣的坑,所以在這里就對(duì)如何制作推送證書進(jìn)行了一次規(guī)整。

####如何制作推送證書?

1.進(jìn)入蘋果開發(fā)者中心,選擇證書選項(xiàng),如下圖所示:

2.創(chuàng)建推送證書之前必須創(chuàng)建一個(gè)APPID,因?yàn)橥扑妥C書是和APPID綁定在一起的,如下圖所示:

在下面的App Services中選擇允許推送(Push Notifications),如下圖所示:

3.APPID創(chuàng)建好了之后,這個(gè)時(shí)候需要去創(chuàng)建推送證書,而且還要根據(jù)需要的環(huán)境選擇對(duì)應(yīng)的推送證書,包括開發(fā)環(huán)境推送證書和生產(chǎn)環(huán)境推送證書,然后還要跟剛才創(chuàng)建好的APPID相關(guān)聯(lián),如下圖所示:

這個(gè)時(shí)候需要上傳CSR文件,我們回到桌面,打開鑰匙串,從頒發(fā)機(jī)構(gòu)申請(qǐng)證書并保存到本地磁盤,如下圖所示:

這樣CSR文件就創(chuàng)建好了,我們回到蘋果開發(fā)者中心,繼續(xù)創(chuàng)建我們的推送證書,選擇保存到本地的CSR文件,如下圖所示:

這樣,我們的推送證書就創(chuàng)建完成了,在本地下載中找到下載的推送證書并雙擊添加到鑰匙串中,然后打開鑰匙串找到創(chuàng)建好的推送證書,右鍵導(dǎo)出P12證書,并輸入證書密碼,如下圖所示:

4.打開我們的個(gè)推開發(fā)者中心,在個(gè)推·消息推送-應(yīng)用列表-應(yīng)用配置”中上傳正確的APNs證書,如下圖所示:

接下來最重要的時(shí)刻來了,那就是測(cè)試了,看看我們的推送能不能成功。

###推送測(cè)試

本人是在個(gè)推平臺(tái)上面進(jìn)行推送測(cè)試的,在應(yīng)用列表里面點(diǎn)擊之前創(chuàng)建的應(yīng)用上的創(chuàng)建推送按鈕,如下圖所示:

進(jìn)入后,我有點(diǎn)懵逼,因?yàn)橹皼]有了解過個(gè)推SDK的邏輯,在詢問了個(gè)推技術(shù)支持后,技術(shù)支持告訴我怎么在個(gè)推平臺(tái)上面去推,也是自己太粗心了,人家進(jìn)去第一句話就寫的很清楚,推送通知目前僅支持安卓用戶,iOS請(qǐng)使用透?jìng)飨?。尷尬!那就透?jìng)飨㈨撁嬖囋囃啤H缦聢D所示:

透?jìng)飨y(cè)試:

APNs消息測(cè)試

NICE啊,這下應(yīng)用在前臺(tái)、應(yīng)用在后臺(tái)和應(yīng)用被殺死的情況下都可以收到推送消息了,爽歪歪?。】磥砦覀円呀?jīng)成功看了百分之九十了!

###Notification Service Extension

正在沾沾自喜的時(shí)候,突然發(fā)現(xiàn)個(gè)推的官網(wǎng)上面還有多媒體推送,我靠,還有這種操作,好奇心的趨勢(shì)下,讓我重新審視如何去做多媒體推送。因?yàn)槲覀冎耙呀?jīng)把通知擴(kuò)展的target創(chuàng)建好了,所以,直接上代碼。

1.Notification Service Extension 添加成功后會(huì)在項(xiàng)目中自動(dòng)生成 NotificationService.h 和 NotificationService.m 兩個(gè)類,包含以下兩個(gè)方法:

- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent *_Nonnull))contentHandler {
    self.contentHandler = contentHandler;
    self.bestAttemptContent = [request.content mutableCopy];

    // [ 測(cè)試代碼 ] TODO:用戶可以在這里處理通知樣式的修改,eg:修改標(biāo)題,開發(fā)階段可以用于判斷是否運(yùn)行通知擴(kuò)展
    //self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [WillIn]", self.bestAttemptContent.title];

    // [ GTSDK ] 統(tǒng)計(jì)APNs到達(dá)情況和多媒體推送支持接口, 建議使用該接口
    [GeTuiExtSdk handelNotificationServiceRequest:request withAttachmentsComplete:^(NSArray *attachments, NSArray *errors) {
       
        // self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [Success]", self.bestAttemptContent.title];
       
        self.bestAttemptContent.attachments = attachments;      // 設(shè)置通知中的多媒體附件
        self.contentHandler(self.bestAttemptContent);          
    }];
}

我們可以在這個(gè)方法中處理我們的 APNs 通知,并個(gè)性化展示給用戶。APNs 推送的消息送達(dá)時(shí)會(huì)調(diào)用這個(gè)方法,此時(shí)你可以對(duì)推送的內(nèi)容進(jìn)行處理,然后使用contentHandler方法結(jié)束這次處理。但是如果處理時(shí)間過長(zhǎng),將會(huì)進(jìn)入serviceExtensionTimeWillExpire方法進(jìn)行最后的緊急處理。

- (void)serviceExtensionTimeWillExpire {
 // [ GTSDK ] 銷毀SDK,釋放資源
    [GeTuiExtSdk destory];
   
    //self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [Timeout]", self.bestAttemptContent.title];
   
    self.contentHandler(self.bestAttemptContent);
}

如果didReceiveNotificationRequest方法在限定時(shí)間內(nèi)沒有調(diào)用 contentHandler方法結(jié)束處理,則會(huì)在過期之前進(jìn)行回調(diào)本方法。此時(shí)你可以對(duì)你的 APNs 消息進(jìn)行緊急處理后展示,如果沒有處理,則顯示原始 APNs 推送。

接下來就是測(cè)試我們的多媒體推送是否成功,我在網(wǎng)上找了個(gè)小狗的照片,直接在個(gè)推平臺(tái)上面推。

多媒體測(cè)試

6啊,終于搞定了!棒棒噠~~~

但是,之前的一個(gè)老項(xiàng)目說也要集成推送,我透,老項(xiàng)目要用XCode集成,這對(duì)于我這種懶人來說,簡(jiǎn)直是一種折磨啊,哎,折磨歸折磨,該搞還要搞。但是之前已經(jīng)用CocoaPods搞過一遍,這次用XCode集成還不是手到擒來。但是為了防止出錯(cuò),本人還是先做了個(gè)demo,這樣后面在自己項(xiàng)目上面集成的話把握性會(huì)更大,踩的坑也就會(huì)更少。

###XCode集成

1.導(dǎo)入個(gè)推SDK:

2.庫引用檢查:

3.添加系統(tǒng)依賴庫:

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.開啟推送功能、后臺(tái)運(yùn)行權(quán)限設(shè)置、開啟WiFi信息授權(quán)

這里跟上面步驟一樣,就不啰嗦了。

5.copy代碼,這是我們程序猿最喜歡的啦,哈哈哈,之前搞過,這里就不累贅了。

6.添加Notification Service Extension

(1).打開XCode,菜單中選擇File->New->Target->Notification Service Extension。如下圖所示:

注意:1.Extension的Bundle Identifier不能和Main Target(也就是自己的App Target)的Bundle Identifier相同,否則會(huì)報(bào)BundleID重復(fù)的錯(cuò)誤。2.Extension 的 Bundle Identifier 需要在 Main Target 的命名空間下,比如說 Main Target 的 BundleID 為 ent.getui.xxx,那么Extension的BundleID應(yīng)該類似與ent.getui.xxx.yyy這樣的格式。如果不這么做,會(huì)引起命名錯(cuò)誤。

這個(gè)是在個(gè)推官網(wǎng)上面看到的,之前自己也踩了這個(gè)坑,這里就記錄下來。

添加 Notification Service Extension 后會(huì)生成相應(yīng)的 Target。點(diǎn)Finish按鈕后會(huì)彈出是否激活該 Target 對(duì)應(yīng) scheme 的選項(xiàng)框,選擇 Activate,如果沒有彈出該選項(xiàng)框,需要自行添加相應(yīng)的 scheme。如下圖所示:

(2).Notification Service Extension 添加成功后會(huì)在項(xiàng)目中自動(dòng)生成 NotificationService.h 和 NotificationService.m 兩個(gè)類

這里跟上面一樣,就不累贅了。

(3).添加GtExtensionSdk依賴庫

選擇Notification Service Extension所對(duì)應(yīng)的Target,添加如下依賴庫:

libz.tbd
libsqlite3.tbd
GTExtensionSDK.framework
UserNotifications.framework

(4).XCode10建議開啟WiFi信息授權(quán):在 Xcode 10.x 以上,找到應(yīng)用Target設(shè)置中的Capabilities -> Access WiFi Information,確認(rèn)開關(guān)已經(jīng)設(shè)為ON狀態(tài)。如下圖所示:

(5).開啟多媒體地址Http訪問支持:

##集成過程中遇到的問題

無效的deviceToken

最讓我印象深刻的就是無效的deviceToken,在測(cè)試APNS推送的時(shí)候,詢問過個(gè)推那邊的技術(shù)支持,他們說可以先在應(yīng)用配置里面測(cè)試一下,然后我就拿著我的deviceToken去測(cè)試一下,結(jié)果提示我是無效的deviceToken,我暈,然后繼續(xù)咨詢個(gè)推的技術(shù)支持,他們還蠻耐心的,跟我說這個(gè)原因有可能是我證書環(huán)境的問題。經(jīng)過一番仔細(xì)的檢查之后,發(fā)現(xiàn),我在個(gè)推平臺(tái)上面上傳的是通用證書,然后我XCode上面的授權(quán)證書是開發(fā)環(huán)境下,這樣一來,拿到的是開發(fā)環(huán)境下的deviceToken,用測(cè)試一下,當(dāng)然會(huì)出錯(cuò)。 解決的方案有兩種:第一,在個(gè)推開發(fā)平臺(tái)上傳開發(fā)環(huán)境下的推送證書。第二:將自己的授權(quán)證書更換為生產(chǎn)環(huán)境。

通知擴(kuò)展里面修改標(biāo)題的代碼不生效

self.bestAttemptContent.title = [NSString stringWithFormat:@"%@ [Success]", self.bestAttemptContent.title];

發(fā)現(xiàn)demo里面有這么一行代碼,我把這行代碼打開后,推送一條消息,發(fā)現(xiàn)標(biāo)題沒有變化,我驚呆了!詢問個(gè)推技術(shù)支持,個(gè)推技術(shù)支持說,讓我先運(yùn)行主target,然后再運(yùn)行通知擴(kuò)展,運(yùn)行通知擴(kuò)展的時(shí)候會(huì)讓我們?nèi)フ抑鱰argetAPP,選擇主target,然后再推送就會(huì)有了,嗯,想了下,這個(gè)應(yīng)該是XCode的bug。

關(guān)于“iOS SDK集成的方法有哪些”這篇文章的內(nèi)容就介紹到這里,感謝各位的閱讀!相信大家對(duì)“iOS SDK集成的方法有哪些”知識(shí)都有一定的了解,大家如果還想學(xué)習(xí)更多知識(shí),歡迎關(guān)注創(chuàng)新互聯(lián)行業(yè)資訊頻道。


本文題目:iOSSDK集成的方法有哪些
標(biāo)題網(wǎng)址:http://weahome.cn/article/pooeii.html

其他資訊

在線咨詢

微信咨詢

電話咨詢

028-86922220(工作日)

18980820575(7×24)

提交需求

返回頂部