-
Notifications
You must be signed in to change notification settings - Fork 28
常见问题
- 项目自身已经集成x5内核的处理
- 引入SDK后,编译出错
- x5内核,视频未播放时点击全屏白屏
- 切换到x5内核后,首次启动可能会黑屏的问题
- 获取定位失败
- 页面滑动卡顿,滑动回弹的问题
- 视频播放点击返回到了上一页
- 关于access_token, cookie_key, cookie_value的有效期
- android软键盘覆盖问题
- 初次进入登录态页面耗时较长
- 支付结果页点击回退又重新拉起支付页
- 进入需要登录的页面没发起登录事件AbsAuthEvent(如:会员中心、商品详情等)
- 店铺首页轮播图不显示问题
- 获取页面标题title
- 出现x5official找不到
- 出现系统版本5.0以下okHttp报错问题
- 长按图片保存提示失败
- 判断H5是在开店SDK的环境下加载
compile("com.youzanyun.open.mobile:x5sdk:最新版本号", {
exclude module: 'x5official'
})
这个一般是支持库冲突的问题。在引入SDK的地方,exclude掉SDK依赖的Support库即可。代码如下:
compile("com.youzanyun.open.mobile:x5sdk:最新版本号", {
exclude group: 'com.android.support'
})
这个是x5内核的bug,现在的解决方法是重写WebChromeClient的相关方法:
view.setWebChromeClient(new WebChromeClient() {
@Override
public void onShowCustomView(View view, IX5WebChromeClient.CustomViewCallback customViewCallback) {
super.onShowCustomView(view, customViewCallback);
customViewCallback.onCustomViewHidden();
}
}
CompatWebChromeClient内部会兼容该问题
view.setWebChromeClient(new CompatWebChromeClient(new WebChromeClientConfig(true, new VideoCallback() {
@Override
public void onVideoCallback(boolean show) {
Toast.makeText(YouzanActivity.this, "" + show, Toast.LENGTH_SHORT).show();
}
}
)) {
@Override
public void onShowCustomView(View view, CustomViewCallback callback) {
super.onShowCustomView(view, callback);
}
});
在Android 5.0及以上,app首次启动需要进行dex2oat,该过程需要耗时较久,故会存在卡顿主线程很久的情况。 具体解决方法参考x5内核官方解决方案其中第一步是升级x5内核到最新版本,这个开店sdk已经集成了最新的版本,可以忽略。直接根据自身情况选择第二步的方案即可
Android 23以后,定位权限需要动态申请。可以自己选择在应用打开时就申请。也可以在WebView容器需要定位权限的回调中才去申请,举例代码:
view.setWebChromeClient(new WebChromeClient() {
@Override
public void onGeolocationPermissionsShowPrompt(String origin, GeolocationPermissions.Callback callback) {
super.onGeolocationPermissionsShowPrompt(origin, callback);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
int code = ActivityCompat.checkSelfPermission(YouzanActivity.this, Manifest.permission.ACCESS_COARSE_LOCATION);
if (code != PackageManager.PERMISSION_GRANTED) {
// 还没有定位的授权,需要动态申请。
ActivityCompat.requestPermissions(YouzanActivity.this, new String[]{Manifest.permission.ACCESS_COARSE_LOCATION}, REQUEST_LOCATION);
}
}
}
});
除开机型配置较差外,一般是关闭了硬件加速的原因,建议检查应用内是否有关闭硬件加速或者编码实现打开硬件加速。
问得比较多的是这几个值可不可以做缓存,及缓存策略。
账号给定的是:access_token有效期7天, 而cookie_key, cookie_value有效期只有半小时(当买家在页面有操作时,cookie_key,cookie_value的有效期会自动延长)。
但是access_token, cookie_key, cookie_value三个值的获取,都只能通过https://uic.youzan.com/sso/open/login 这个接口(或无登录状态时token https://uic.youzan.com/sso/open/initToken)。 参考:登录态API调用
也就是说一个长时间有效期的access_token跟两个短时间有效的cookie绑定在了一起,必须一起更新。
accessToken 目前开店SDK并没有使用场景, 可忽略
由于sdk对外输出的是一个view, 无法控制软键盘模式。 一般需在Activity的声明中将windowSoftMode设置为 android:windowSoftInputMode="stateHidden|adjustResize"。 当WebView所在的Activity是全屏模式时,软键盘可能也会有覆盖问题。这个是google的Bug。解决方法见https://www.diycode.cc/topics/383
这个问题的原因可能有几个方面:
1) 首页的图片资源太多太大,曾出现过一张图片500k到1M, 而一般进入商品首页,整个页面较大部分基本都是第一张大图(轮播图),所以视觉上给人白屏感;
此错误一般是商家错误地在点击回退操作时调用 WebView.goBack()引起的(YouzanBrowser继承自WebView)。 拉起支付页过程中存在重定向, WebView.goBack()方法只会回退一层; YouzanBrowser实现中包装了页面栈,调用 YouzanBrowser.pageGoBack() 能够正确的处理支付页面栈(回退两层)
解决办法:检查是否调用了WebView.goBack(), 改为调用YouzanBrowser.pageGoBack()
表现:没有发起登录事件AbsAuthEvent,而是跳转到h5的手机号登录页 原因:多半是client_id无效 案例:商家用client_id初始化SDK时, client_id少写了两位
原因:在webview中设置了 setLayerType(LAYER_TYPE_SOFTWARE, null)开启软件加速 商家应用自己开启了硬件加速,仅针对有赞域名调用setLayerType(LAYER_TYPE_SOFTWARE, null) —— 为了解决闪烁的问题
解决办法:webview设置 setLayerType(LAYER_TYPE_NONE, null)
原来方式已遗弃,更新以前获取标题的方式,现在使用以下方式获取
view.setWebChromeClient(new WebChromeClient(){
@Override
public void onReceivedTitle(WebView webView, String s) {
super.onReceivedTitle(webView, s);
//设置标题
if (view != null && titleView != null) {
titleView.setText(view.getTitle());
}
}
});
如下报错:
ERROR: Failed to resolve: com.youzan.mobile:x5official:1.0.1
Show in Project Structure dialog
由于相关版本升级内部版本引入的内部库,该库对外没有作用可以移除exclude掉
implementation 'com.youzanyun.open.mobile:x5sdk:最新版本',{
exclude group: 'com.youzan.mobile', module: 'x5official'
}
由于新版本从6.4.30开始已使用okhttp(3.14.0)版本,该okhttp版本只支持系统4.4以上版本,所以会导致5.0以下报错 解决方案:
implementation 'com.youzanyun.open.mobile:x5sdk:最新版本',{
exclude group: 'com.youzan.mobile', module: 'x5official'
exclude group: 'com.squareup.okhttp3', module: 'okhttp'
}
implementation 'com.squareup.okhttp3:okhttp:自己使用版本'
原因: 由于app未申请储存权限导致 解决方案:
- 进入开店SDK前提前申请权限
- 通过
YouzanBrowser.setSaveImageListener
自行处理图片保存操作
view.setSaveImageListener(new SaveImageListener() {
@Override
public boolean onSaveImage(WebView.HitTestResult result) throws ActivityNotFoundException {
// TODO 接管逻辑
Toast.makeText(view.getContext(),"接管",Toast.LENGTH_SHORT).show();
String[] perms;
if (Build.VERSION.SDK_INT < Build.VERSION_CODES.R){
perms = new String[]{Manifest.permission.READ_EXTERNAL_STORAGE, Manifest.permission.WRITE_EXTERNAL_STORAGE};
if (ZanPermissions.hasPermissions(YouzanActivity.this, perms)) {
// Already have permission, do the thing
// ...
} else {
// Do not have permissions, request them now
ZanPermissions.requestPermissions(YouzanActivity.this, "测试",
0x023, perms);
}
}
// return true;
// //TODO 权限申请逻辑
return false;
}
});
目前开店SDK提供的浏览器会传入UserAgent,具体内容如下:
Mozilla/5.0 (Linux; Android 12; M2104K10AC Build/SP1A.210812.016; wv) AppleWebKit/537.36 (KHTML, like Gecko) Version/4.0 Chrome/96.0.4664.104 Mobile Safari/537.36 youzan_container_android/2.10.0 Dalvik/2.1.0 (Linux; Android 12; M2104K10AC Build/SP1A.210812.016; App/${包名}_v0.0.1) kdtUnion_${clientId}client_id
可通过 kdtUnion_${clientId}
判断