1 SDK下载
如果使用Maven库方式不需要下载,方法见2.1中Maven库快速集成(远程同步)
如果要手动集成,进入EMAS控制台下载SDK。
2 准备工作
2.1 Android Studio开发
1、Maven库快速集成(远程同步)(推荐方式)
在Project
根目录下build.gradle
文件中配置Maven库URL:
allprojects {
repositories {
jcenter()
maven {
url 'https://maven.aliyun.com/nexus/content/repositories/releases/'
}
}
}
在对应的module
下的build.gradle
文件中添加对应依赖:
dependencies {
......
compile 'com.aliyun.ams:alicloud-android-feedback:3.4.2'
......
}
如果编译不通过,需要在gradle.properties 中新增android:allowBackup="false",android.enableJetifier=true 。
2、手动集成
复制下载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冲突可参考:《阿里云-移动云产品SDK UTDID冲突解决方案》。
2.2 权限
需要相册、相机和录音的权限。
Android 6.0需要开发者自己的方式实现权限获取,更低版本的使用声明即可。
如果用户进行需要权限的操作时,用户还未授权应用相关权限,SDK会直接向用户申请相关权限。应用可以通过如下方式,注册回调监听,在SDK申请权限之前,弹出提示窗,说明权限用途。
// 监听拍照操作 权限申请
FeedbackAPI.setPermissionInterrupt(FeedbackAPI.ACTION_CAMERA, new IPermissionRequestInterrupt() {
@Override
public void interrupt(Context context, String action, String[] permissions, InterruptCallback callback) {
showDialog(context,"相机", "拍照问题进行反馈", callback);
}
});
// 监听相册读取操作 权限申请
FeedbackAPI.setPermissionInterrupt(FeedbackAPI.ACTION_ALBUM, new IPermissionRequestInterrupt() {
@Override
public void interrupt(Context context, String action, String[] permissions, InterruptCallback callback) {
showDialog(context, "相册", "选择问题照片进行反馈", callback);
}
});
// 监听录音操作 权限申请
FeedbackAPI.setPermissionInterrupt(FeedbackAPI.ACTION_AUDIO, new IPermissionRequestInterrupt() {
@Override
public void interrupt(Context context, String action, String[] permissions, InterruptCallback callback) {
showDialog(context, "录音", "录制语音描述进行反馈", callback);
}
});
// 这里是示意代码,具体请替换为应用统一的权限说明样式
private void showDialog(Context context, String permission, String message, final InterruptCallback callback) {
final AlertDialog.Builder normalDialog = new AlertDialog.Builder(context);
normalDialog.setTitle("即将进行敏感权限授权");
normalDialog.setMessage(permission + "权限作用:" + message);
normalDialog.setPositiveButton("确定",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 用户同意申请权限,执行权限申请操作
callback.goOnRequest();
}
});
normalDialog.setNegativeButton("取消",
new DialogInterface.OnClickListener() {
@Override
public void onClick(DialogInterface dialog, int which) {
// 用户不同意申请权限,停止权限申请操作
callback.stopRequest();
}
});
// 显示
normalDialog.show();
}
2.3 混淆配置
应用进行混淆打包时,应加入如下混淆配置:
-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);
参数说明:
application:Application对象。
appkey:阿里云上应用的唯一标识,阿里云控制台可查询到。
appSecret:阿里云上应用的appSecret,阿里云控制台可查询到。
为避免在日志中泄漏参数
appkey
/appsecret
或App运行过程中产生的数据,建议线上版本关闭SDK调试日志。由于所有用户使用统一的SDK接入,在接入过程中需要在代码中设置
appkey
/appsecret
参数,而此类参数与计量计费密切相关,为防止恶意反编译获取参数造成信息泄漏,建议您开启混淆,并进行App加固后再发布上线。
3.2 打开用户反馈界面
另起一个Activity打开用户反馈H5界面:
FeedbackAPI.openFeedbackActivity();
如果需要调用结果(例如显示加载中):
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的使用务必使用上述setFeedbackFragment
的回调在xml中声明fragment那种方式,暂不支持包装fragment的activity;务必调用FeedbackAPI.cleanFeedbackFragment();
此时的Fragment是support-v4包中的Fragment。
3.3 获取反馈未读数
FeedbackAPI.getFeedbackUnreadCount(IUnreadCountCallback callback)
参数callback:onSuccess(int count)
回调方法count指示当前未读消息数。
3.4 设置标题栏中“历史反馈”的字号
FeedbackAPI.setHistoryTextSize(20); //单位为sp
3.1.0版本中需要将控制台中历史反馈字号设置为0,此方法才会生效。
3.5 设置返回按钮的图片
FeedbackAPI.setBackIcon(R.drawable.back);
3.6 沉浸式任务栏
默认使用沉浸式任务栏,如需要关闭可以使用FeedbackAPI.setTranslucent(false);
3.1.0版本中需要将控制台中沉浸式任务栏设置为true,此方法才会生效。
3.7 设置默认联系方式
FeedbackAPI.setDefaultUserContactInfo(“1300000XXXX”);
3.8 用户昵称
设置用户昵称后,用户反馈信息时携带该昵称,最终在控制台反馈会话中可查看。
v3.1.7新增接口。
FeedbackAPI.setUserNick("xxx");
3.9 语音反馈
需要使用3.1.0以上版本的SDK,并且在控制台>系统配置>Mobile客户端配置>全局配置中将是否开启语音打开。
3.10 设置反馈消息自定义参数
JSONObject extInfo = new JSONObject();
extInfo.put("key", "value");
FeedbackAPI.setAppExtInfo(extInfo);
4 Demo
Demo工程中,FeedbackAPI.init
被调用了多次,这是为了能够达到实时更新配置的效果,实际使用上建议只在Application中,调用FeedbackAPI.init
方法一次即可。