Android SDK接入

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地址

说明

Demo工程中,FeedbackAPI.init被调用了多次,这是为了能够达到实时更新配置的效果,实际使用上建议只在Application中,调用FeedbackAPI.init方法一次即可。