Android SDK接入
1 SDK下載
如果使用Maven庫(kù)方式不需要下載,方法見2.1中Maven庫(kù)快速集成(遠(yuǎn)程同步)
如果要手動(dòng)集成,進(jìn)入EMAS控制臺(tái)下載SDK。
2 準(zhǔn)備工作
2.1 Android Studio開發(fā)
1、Maven庫(kù)快速集成(遠(yuǎn)程同步)(推薦方式)
在Project
根目錄下build.gradle
文件中配置Maven庫(kù)URL:
allprojects {
repositories {
jcenter()
maven {
url 'https://maven.aliyun.com/nexus/content/repositories/releases/'
}
}
}
在對(duì)應(yīng)的module
下的build.gradle
文件中添加對(duì)應(yīng)依賴:
dependencies {
......
compile 'com.aliyun.ams:alicloud-android-feedback:3.4.2'
......
}
如果編譯不通過(guò),需要在gradle.properties 中新增android:allowBackup="false",android.enableJetifier=true 。
2、手動(dòng)集成
復(fù)制下載SDK文件夾下的.aar
和.jar
到libs目錄下,在build.gradle
文件中添加如下配置:
repositories {
flatDir {
dirs 'libs'
}
}
添加本地依賴:
dependencies {
implementation(name: 'alicloud-android-feedback-3.4.2', ext: 'aar')
implementation(name: 'alicloud-android-rest-1.7.3-open-release', ext: 'aar')
implementation(name: 'alicloud-android-sender-1.1.5', ext: 'aar')
implementation(name: 'alicloud-android-logger-1.2.0', ext: 'aar')
implementation files('libs/alicloud-android-utdid-2.6.0.jar')
implementation files('libs/alicloud-android-beacon-1.0.7.jar')
implementation files('libs/alicloud-android-crashdefend-0.0.6.jar')
implementation files('libs/alicloud-android-tool-1.0.1.jar')
//自行依賴support-v4
}
切記添加support-v4的依賴。
如果遇到UTDID沖突可參考:《阿里云-移動(dòng)云產(chǎn)品SDK UTDID沖突解決方案》。
2.2 權(quán)限
需要相冊(cè)、相機(jī)和錄音的權(quán)限。
Android 6.0需要開發(fā)者自己的方式實(shí)現(xiàn)權(quán)限獲取,更低版本的使用聲明即可。
如果用戶進(jìn)行需要權(quán)限的操作時(shí),用戶還未授權(quán)應(yīng)用相關(guān)權(quán)限,SDK會(huì)直接向用戶申請(qǐng)相關(guān)權(quán)限。應(yīng)用可以通過(guò)如下方式,注冊(cè)回調(diào)監(jiān)聽,在SDK申請(qǐng)權(quán)限之前,彈出提示窗,說(shuō)明權(quán)限用途。
// 監(jiān)聽拍照操作 權(quán)限申請(qǐng)
FeedbackAPI.setPermissionInterrupt(FeedbackAPI.ACTION_CAMERA, new IPermissionRequestInterrupt() {
@Override
public void interrupt(Context context, String action, String[] permissions, InterruptCallback callback) {
showDialog(context,"相機(jī)", "拍照問(wèn)題進(jìn)行反饋", callback);
}
});
// 監(jiān)聽相冊(cè)讀取操作 權(quán)限申請(qǐng)
FeedbackAPI.setPermissionInterrupt(FeedbackAPI.ACTION_ALBUM, new IPermissionRequestInterrupt() {
@Override
public void interrupt(Context context, String action, String[] permissions, InterruptCallback callback) {
showDialog(context, "相冊(cè)", "選擇問(wèn)題照片進(jìn)行反饋", callback);
}
});
// 監(jiān)聽錄音操作 權(quán)限申請(qǐng)
FeedbackAPI.setPermissionInterrupt(FeedbackAPI.ACTION_AUDIO, new IPermissionRequestInterrupt() {
@Override
public void interrupt(Context context, String action, String[] permissions, InterruptCallback callback) {
showDialog(context, "錄音", "錄制語(yǔ)音描述進(jìn)行反饋", callback);
}
});
// 這里是示意代碼,具體請(qǐng)?zhí)鎿Q為應(yīng)用統(tǒng)一的權(quán)限說(shuō)明樣式
private void showDialog(Context context, String permission, String message, final InterruptCallback callback) {
final AlertDialog.Builder normalDialog = new AlertDialog.Builder(context);
normalDialog.setTitle("即將進(jìn)行敏感權(quán)限授權(quán)");
normalDialog.setMessage(permission + "權(quán)限作用:" + message);
normalDialog.setPositiveButton("確定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 用戶同意申請(qǐng)權(quán)限,執(zhí)行權(quán)限申請(qǐng)操作
callback.goOnRequest();
}
});
normalDialog.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 用戶不同意申請(qǐng)權(quán)限,停止權(quán)限申請(qǐng)操作
callback.stopRequest();
}
});
// 顯示
normalDialog.show();
}
2.3 混淆配置
應(yīng)用進(jìn)行混淆打包時(shí),應(yīng)加入如下混淆配置:
-keep class com.taobao.** {*;}
-keep class com.alibaba.** {*;}
-dontwarn com.taobao.**
-dontwarn com.alibaba.**
-keep class com.ut.** {*;}
-dontwarn com.ut.**
-keep class com.ta.** {*;}
-dontwarn com.ta.**
3 開始使用
3.1 反饋組件初始化
FeedbackAPI.init(application, appkey,appSecret);
參數(shù)說(shuō)明:
application:Application對(duì)象。
appkey:阿里云上應(yīng)用的唯一標(biāo)識(shí),阿里云控制臺(tái)可查詢到。
appSecret:阿里云上應(yīng)用的appSecret,阿里云控制臺(tái)可查詢到。
為避免在日志中泄漏參數(shù)
appkey
/appsecret
或App運(yùn)行過(guò)程中產(chǎn)生的數(shù)據(jù),建議線上版本關(guān)閉SDK調(diào)試日志。由于所有用戶使用統(tǒng)一的SDK接入,在接入過(guò)程中需要在代碼中設(shè)置
appkey
/appsecret
參數(shù),而此類參數(shù)與計(jì)量計(jì)費(fèi)密切相關(guān),為防止惡意反編譯獲取參數(shù)造成信息泄漏,建議您開啟混淆,并進(jìn)行App加固后再發(fā)布上線。
3.2 打開用戶反饋界面
另起一個(gè)Activity打開用戶反饋H5界面:
FeedbackAPI.openFeedbackActivity();
如果需要調(diào)用結(jié)果(例如顯示加載中):
FeedbackAPI.openFeedbackActivity(final Callable success, final Callable fail)
如果希望使用Fragment方式打開:
FragmentManager fm = getSupportFragmentManager();
final FragmentTransaction transaction = fm.beginTransaction();
final Fragment feedback = FeedbackAPI.getFeedbackFragment();
// must be called
FeedbackAPI.setFeedbackFragment(new Callable() {
@Override
public Object call() throws Exception {
transaction.replace(R.id.content, feedback);
transaction.commit();
return null;
}
}/*success callback*/, null/*fail callback*/);
fragment的使用務(wù)必使用上述setFeedbackFragment
的回調(diào)在xml中聲明fragment那種方式,暫不支持包裝fragment的activity;務(wù)必調(diào)用FeedbackAPI.cleanFeedbackFragment();
此時(shí)的Fragment是support-v4包中的Fragment。
3.3 獲取反饋未讀數(shù)
FeedbackAPI.getFeedbackUnreadCount(IUnreadCountCallback callback)
參數(shù)callback:onSuccess(int count)
回調(diào)方法count指示當(dāng)前未讀消息數(shù)。
3.4 設(shè)置標(biāo)題欄中“歷史反饋”的字號(hào)
FeedbackAPI.setHistoryTextSize(20); //單位為sp
3.1.0版本中需要將控制臺(tái)中歷史反饋字號(hào)設(shè)置為0,此方法才會(huì)生效。
3.5 設(shè)置返回按鈕的圖片
FeedbackAPI.setBackIcon(R.drawable.back);
3.6 沉浸式任務(wù)欄
默認(rèn)使用沉浸式任務(wù)欄,如需要關(guān)閉可以使用FeedbackAPI.setTranslucent(false);
3.1.0版本中需要將控制臺(tái)中沉浸式任務(wù)欄設(shè)置為true,此方法才會(huì)生效。
3.7 設(shè)置默認(rèn)聯(lián)系方式
FeedbackAPI.setDefaultUserContactInfo(“1300000XXXX”);
3.8 用戶昵稱
設(shè)置用戶昵稱后,用戶反饋信息時(shí)攜帶該昵稱,最終在控制臺(tái)反饋會(huì)話中可查看。
v3.1.7新增接口。
FeedbackAPI.setUserNick("xxx");
3.9 語(yǔ)音反饋
需要使用3.1.0以上版本的SDK,并且在控制臺(tái)>系統(tǒng)配置>Mobile客戶端配置>全局配置中將是否開啟語(yǔ)音打開。
3.10 設(shè)置反饋消息自定義參數(shù)
JSONObject extInfo = new JSONObject();
extInfo.put("key", "value");
FeedbackAPI.setAppExtInfo(extInfo);
4 Demo
Demo工程中,FeedbackAPI.init
被調(diào)用了多次,這是為了能夠達(dá)到實(shí)時(shí)更新配置的效果,實(shí)際使用上建議只在Application中,調(diào)用FeedbackAPI.init
方法一次即可。