iOS SDK接入
前言
本章節(jié)介紹移動(dòng)用戶反饋 iOS SDK的接入方法。
推薦工程使用cocoapods管理依賴。
當(dāng)前SDK最新版本支持
iOS Deployment Target 7.0
及以上。用戶反饋SDK支持 bitcode(bitcode僅在 Xcode7及以上顯示并默認(rèn)開啟)。
用戶反饋SDK及其依賴庫均使用HTTPS協(xié)議進(jìn)行加密傳輸。
準(zhǔn)備工作
已創(chuàng)建項(xiàng)目和應(yīng)用。具體操作請(qǐng)參見創(chuàng)建項(xiàng)目和應(yīng)用。
第一步 將SDK集成到您的應(yīng)用
我們提供了cocoapods引入依賴和本地依賴兩種集成方式,方便您根據(jù)需要將SDK添加到您的應(yīng)用中。
1. cocoapods引入依賴
1.1 指定Master倉庫和阿里云倉庫
移動(dòng)用戶反饋 iOS SDK和其他EMAS產(chǎn)品的iOS SDK,都是發(fā)布到阿里云EMAS官方維護(hù)的github倉庫中,因此,您需要在您的Podfile文件中包含該倉庫地址。
source 'https://github.com/CocoaPods/Specs.git'
source 'https://github.com/aliyun/aliyun-specs.git'
1.2 添加依賴
為您需要依賴HTTPDNS iOS SDK的target添加如下依賴。
target 'yourProjetName' do
# Comment the next line if you don't want to use dynamic frameworks
use_frameworks!
pod 'AlicloudFeedback', 'x.x.x'
end
示例依賴中的SDK版本號(hào)請(qǐng)以發(fā)布說明文檔中的最新版本號(hào)為準(zhǔn)。
1.3 安裝依賴
在您的Terminal中進(jìn)入Podfile所在目錄,執(zhí)行以下命令安裝依賴。
pod install --repo-update
安裝完成后,注意使用.xcworkspace
文件重新打開工程。
2. 本地手動(dòng)集成依賴
2.1 下載依賴文件
從EMAS SDK列表選擇移動(dòng)用戶反饋 iOS版本進(jìn)行下載,解壓得到多個(gè)framework
文件,如圖示。
2.2 將framework文件添加到工程中
在Finder
中選中上述文件,拖入需要使用移動(dòng)用戶反饋 iOS SDK的target下,并在彈出框中勾選Copy items if needed
。
如果遇到 UTDID 沖突可參考:阿里云-云產(chǎn)品SDK UTDID沖突解決方案。
確認(rèn)目的目錄中包含YWFeedbackBundle.bundle
,以免造成返回箭頭丟失的問題。
2.3 添加系統(tǒng)庫依賴
在工程項(xiàng)目中(Build Phases -> Link Binary With Libraries)添加以下庫依賴。
libz.tbd
libresolv.tbd
libsqlite3.tbd
CoreMotion.framework
CoreTelephony.framework
SystemConfiguration.framework
在Xcode7之前的版本,沒有.tbd
的庫,而是.dylib
。
最終效果如圖示。
2.4 ObjC配置
iOS端集成SDK時(shí)需要做-ObjC
配置,即應(yīng)用的 TARGETS -> Build Settings -> Linking -> Other Linker Flags ,需添加上 -ObjC
這個(gè)屬性,如圖示。
請(qǐng)注意 -ObjC
的大小寫。
第二步 設(shè)置隱私權(quán)限
iOS 10及其以上版本對(duì)隱私權(quán)限更加嚴(yán)格,需要添加權(quán)限說明(privacy description)。如果不做設(shè)置,可能會(huì)導(dǎo)致崩潰、審核不通過等情況。設(shè)置如下:
在info plist中增加字段:
<key>NSCameraUsageDescription</key>
<string>使用相機(jī)</string>
<key>NSPhotoLibraryUsageDescription</key>
<string>使用相冊(cè)</string>
<key>NSMicrophoneUsageDescription</key>
<string>使用麥克風(fēng)</string>
配置完后如圖所示:
上圖中的使用相機(jī)/使用相冊(cè)/使用麥克風(fēng)可修改。
如出現(xiàn)點(diǎn)擊錄音、拍照、相冊(cè)閃退的情況,確認(rèn)是否已添加權(quán)限說明。
第三步 使用SDK
1.初始化SDK
在需要使用移動(dòng)用戶反饋的代碼文件中引入頭文件。
#import <YWFeedbackFMWK/YWFeedbackKit.h>
#import <YWFeedbackFMWK/YWFeedbackViewController.h>
調(diào)用初始化方法:(AppKey和AppSecret請(qǐng)?jiān)诳刂婆_(tái)-應(yīng)用管理頁面獲取)
/// @brief 初始化方法
/// @params anAppKey AppKey
/// @params anAppSecret AppSecret
/// @return YWFeedbackKit實(shí)例
- (instancetype)initWithAppKey:(NSString *)anAppKey appSecret:(NSString *)anAppSecret;
YWFeedbackKit *feedbackKit = [[YWFeedbackKit alloc] initWithAppKey:kAppKey appSecret:kAppSecret];
不要將YWFeedbackKit實(shí)例設(shè)置為局部變量,請(qǐng)持有YWFeedback實(shí)例,以免被提前釋放。
由于YWFeedbackKit是個(gè)宏,實(shí)際上是BCFeedbackKit,所以在Swift中,請(qǐng)使用BCFeedbackKit。
2.打開反饋頁面
調(diào)用 YWFeedbackKit 實(shí)例如下接口創(chuàng)建反饋界面:
/// @brief 創(chuàng)建反饋頁面回調(diào)Block
/// @params viewController 反饋頁面
/// @return error 調(diào)用失敗返回錯(cuò)誤
typedef void (^YWMakeFeedbackViewControllerCompletionBlock) (YWFeedbackViewController * viewController, NSError *error);
/// @brief 創(chuàng)建反饋頁面,默認(rèn)為不顯示彈出錯(cuò)誤信息
- (void)makeFeedbackViewControllerWithCompletionBlock:(YWMakeFeedbackViewControllerCompletionBlock)completionBlock;
創(chuàng)建成功后將會(huì)返回
YWFeedbackViewController
,你可以根據(jù)你App的實(shí)際結(jié)構(gòu),使用Present等不同的方式將其展示。如果不使用系統(tǒng)默認(rèn)alert展示錯(cuò)誤提示,或者想自行進(jìn)行錯(cuò)誤提示的多語言化,可以自定義提示方式,只需要實(shí)現(xiàn)這個(gè)block即可。具體可參考Demo。
/// @brief 反饋頁面對(duì)外拋出Error的回調(diào)block。不設(shè)置此屬性時(shí),將使用默認(rèn)Alert方式進(jìn)行錯(cuò)誤提示
/// @params viewController 反饋頁面
/// @return error 失敗error
@property (nonatomic, copy) void (^YWFeedbackViewControllerErrorBlock) (YWFeedbackViewController *viewController, NSError *error);
3.關(guān)閉用戶反饋頁面
在成功執(zhí)行打開反饋頁面后將獲取到Y(jié)WFeedbackViewController,設(shè)置屬性closeBlock,當(dāng)用戶關(guān)閉用戶反饋,將調(diào)用該block進(jìn)行dismiss或pop。具體可參考 Demo 。
[viewController setCloseBlock:^(UIViewController *aParentController){
// 進(jìn)行 dismiss 或者 pop,以及一些相關(guān)設(shè)置
[aParentController dismissViewControllerAnimated:YES completion:nil];
}];
4.獲取反饋未讀消息數(shù)
調(diào)用如下接口獲取未讀消息數(shù):
/// @brief 反饋未讀消息數(shù)回調(diào)Block
/// @params unreadCount 未讀消息數(shù)
/// @return error 調(diào)用失敗返回錯(cuò)誤
typedef void (^YWGetUnreadCountCompletionBlock) (NSInteger unreadCount, NSError *error);
/// @brief 請(qǐng)求反饋未讀消息數(shù)
- (void)getUnreadCountWithCompletionBlock:(YWGetUnreadCountCompletionBlock)completionBlock;
調(diào)用成功后返回反饋未讀數(shù),如果返回有未讀反饋消息,可在反饋入口添加未讀數(shù)等方式提醒用戶進(jìn)行查看。
5.設(shè)置業(yè)務(wù)方擴(kuò)展的反饋信息和用戶昵稱(可選配置)
移動(dòng)用戶反饋SDK初始化后,可根據(jù)需要設(shè)置業(yè)務(wù)方擴(kuò)展的反饋數(shù)據(jù):
/// 業(yè)務(wù)方擴(kuò)展反饋數(shù)據(jù),可設(shè)置任意字段,在創(chuàng)建反饋頁面前設(shè)置,可在后臺(tái)擴(kuò)展信息中查看
@property (nonatomic, strong, readwrite) NSDictionary *extInfo;
self.feedbackKit.extInfo = @{***:***};
設(shè)置用戶昵稱后,用戶反饋信息時(shí)攜帶該昵稱,最終會(huì)在反饋控制臺(tái)會(huì)話中顯示。
v3.3.5版本及以后可用。
/**
設(shè)置反饋用戶名,請(qǐng)于SDK初始化完成后,在創(chuàng)建反饋頁面前設(shè)置
(該用戶名,可以在移動(dòng)反饋控制臺(tái)反饋會(huì)話中查看,用于標(biāo)識(shí)用戶)
@param nickName 反饋用戶名
*/
- (void)setUserNick:(NSString *)nickName;
[self.feedbackKit setNickName:@"***"];
6.自定義UI
從v3.1.0版本開始增加了自定義UI的接口,包括導(dǎo)航欄字體、導(dǎo)航欄返回按鈕的圖標(biāo)。
修改導(dǎo)航欄字體的API如下:
//YWFeedbackKit.h
/// @brief 如果不設(shè)置,默認(rèn)為:`[UIFont boldSystemFontOfSize:13]`
@property (nonatomic, strong) UIFont *defaultCloseButtonTitleFont;
/// @brief 如果不設(shè)置,默認(rèn)為:`[UIFont boldSystemFontOfSize:13]`
@property (nonatomic, strong) UIFont *defaultRightBarButtonItemTitleFont;
修改導(dǎo)航欄返回按鈕圖標(biāo)的具體方法如下:
如果是手動(dòng)集成,直接修改YWFeedbackBundle.bundle
里的圖片即可,如果是通過CocoaPods方式集成,那么需要將YWFeedbackBundle.bundle
命名為Customized.YWFeedbackBundle.bundle
,并修改Customized.YWFeedbackBundle.bundle
內(nèi)部的圖片,然后拖拽到您自己的工程項(xiàng)目中即可。
SDK Demo
移動(dòng)用戶反饋 iOS SDK接入工程樣例參見Demo
常見錯(cuò)誤碼
錯(cuò)誤碼 | 含義 |
103 | 沒有加-ObjC,Category沒有加載上來。 |