# 接入问题及解答

这里汇总了一些 AIHelp Web SDK 接入过程中有可能遇到的常见问题,方便接入过程中排查问题。

# 为什么在 Android 手机上点击上传图片没有反应?

在 Android 设备上实现 Web 版本的图片上传功能,需要处理以下两个关键部分:

  1. 权限管理

在 AndroidManifest.xml 中声明必要的权限并实现运行时权限申请逻辑:

// 在 AndroidManifest.xml 中声明必要的权限
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />

// 实现运行时权限申请逻辑
private static final int PERMISSION_REQUEST_CODE = 1001;
String[] permissions = {
    Manifest.permission.READ_EXTERNAL_STORAGE,
    Manifest.permission.WRITE_EXTERNAL_STORAGE
};
ActivityCompat.requestPermissions(activity, permissions, PERMISSION_REQUEST_CODE);
  1. WebView 文件选择实现

配置 WebView 的文件选择相关设置并重写 WebChromeClient 中的文件选择相关方法:

// 配置 WebView 的文件选择相关设置
WebSettings settings = webView.getSettings();
settings.setJavaScriptEnabled(true);
settings.setAllowFileAccess(true);
settings.setAllowContentAccess(true);

// 重写 WebChromeClient 中的文件选择相关方法
webView.setWebChromeClient(new WebChromeClient() {
    @Override
    public boolean onShowFileChooser(WebView webView, 
        ValueCallback<Uri[]> filePathCallback,
        FileChooserParams fileChooserParams) {
        // TODO: 实现文件选择逻辑
        return true;
    }
});

# 为什么在 iOS 设备上上传图片时会出现拍照选项?

在 iOS 设备上,当网页触发文件选择时,系统会默认显示包含拍照、录像和文件选择的选项菜单。

同时,若在未声明相机权限时点击拍照选项,或者未声明麦克风权限时切换到视频模式会导致应用崩溃。

要解决这个问题,需要应用在 Info.plist 中声明相关权限:

<!-- 相机权限 -->
<key>NSCameraUsageDescription</key>
<string>需要访问相机以拍摄照片</string>

<!-- 麦克风权限(如果允许录像) -->
<key>NSMicrophoneUsageDescription</key>
<string>需要访问麦克风以录制视频</string>

<!-- 相册权限 -->
<key>NSPhotoLibraryUsageDescription</key>
<string>需要访问相册以选择照片</string>

这是 iOS 系统级别的行为,目前没有办法只显示相册选择选项。建议做好相应的权限管理和异常处理,确保良好的用户体验。

# 为什么 SDK 显示的语言和我指定的语言不一致?

正常情况下,接入方可以通过 init 的最后一个参数指定 SDK 的显示语言;如果没有设置,SDK 则会使用设备语言来进行初始化。

同时,为了保证玩家侧的体验,AIHelp 有一套针对初始化语言的矫正逻辑:

1、我们这边会针对不同的标准做矫正,比如 zh / zh-cn / zh-CN / zh_CN / zh-hans ## zh-CN 来进行逻辑处理; 2、如果矫正后的语言没有在后台开启的话,我们会再次矫正为 AIHelp 后台设置的默认语言;

AIHelp 后台设置的默认语言一般为英语,在这种情况下,保底语言就是英语;这个默认语言可以根据咱们这边的具体需求进行调整。

另外需要注意的是,目前 AIHelp API 接收的是 ISO 639-1 语言码,初始化的时候不能传递国家码,因为有可能某个国家码是另外一个语言码:比如 KR 在国家码表示韩国,但是在语言码指代的是卡努里语。

如果当下项目中确实是这么用的,那建议将 ISO-3166 国家码按照 ISO 639-1 做一份映射,然后再将语言码传递给 AIHelp 使用。


# 为什么在客服后台看到的玩家信息为 anonymous 和一串乱码?

默认情况下,在调用 updateUserInfo API 更新用户信息之前,AIHelp 会使用 anonymous 作为用户名,deviceId 作为用户 ID。

同时,在打开 AIHelp 页面之前,UID 的信息都不会同步给后端。UID 是保存在内存中的,所以只要保证打开页面之前能拿到 UID,用户会话就不会出错。

如果客服后台没有设置上,那只能是这个 API 没有被有效调用。

有可能是 updateUserInfo API 的调用时机问题,这个 API 需要在初始化之后调用

AIHelpSupport.init(/* your code here */);
AIHelpSupport.updateUserInfo(/* your code here */);

只需要保证 updateUserInfo 调用在 init 之后就可以,并不依赖初始化成功。

如果更新用户信息早于初始化,就有可能被 return 掉,导致没有设置成功;可以考虑在打开页面之前更新一下用户信息,应该也可以解决问题。


上次更新: 11/30/2024, 11:18:33 AM