Skip to content

YouzanBrowser简介

pepperer edited this page Mar 12, 2024 · 6 revisions

综述

SDK提供了YouzanBrowser进行页面加载

在调用YouzanBrowser进行页面加载之前需要先初始化SDK。

YouzanBrowser的结构图, 如下所示:

YouzanBrowser是自定义视图类, 开发者也可以在布局文件中使用:

  • 腾讯X5版本的YouzanBrowser
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.youzan.androidsdkx5.YouzanBrowser
        android:id="@+id/view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</FrameLayout>
  • Android原生版本的YouzanBrowser
<FrameLayout
    xmlns:android="http://schemas.android.com/apk/res/android"
    android:layout_width="match_parent"
    android:layout_height="match_parent">

    <com.youzan.androidsdk.basic.YouzanBrowser
        android:id="@+id/view"
        android:layout_width="match_parent"
        android:layout_height="match_parent"/>

</FrameLayout>

下文使用mView表示YouzanBrowser的实例

开始使用YouzanBrowser之前一般都需要注册事件,详情看 事件

自定义跳转

YouzanBrowser实质上是一个WebView,支持WebView的所有操作,重写shouldOverrideUrlLoading 方法:

    YouzanBrowser youzanBrowser = new YouzanBrowser(this);
    youzanBrowser.setWebViewClient(new WebViewClient() {
            @Override
            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {

                // TODO: override url, return true or false

                return super.shouldOverrideUrlLoading(view, request);
            }
        });

注意:当使用腾讯X5内核版本时,相关类的导包要注意使用腾讯x5的包

YouzanClient

YouzanBrowser实现了YouzanClient接口, 这里对这个通用对外调用接口进行说明.

loadUrl(String url)

加载给定的链接

final String url = "https://h5.youzan.com/xxxx";
//店铺链接, 可以从有赞后台`店铺=>店铺概况=>访问店铺`复制到相应的链接

mView.loadUrl(url);

reload()

重新加载当前页面 说明: 可将YouzanBrowser嵌套在SwipeRefreshLayout内实现下拉刷新.

subscribe(Event event){#subscribe}

订阅事件 说明: 基于发布订阅模式设计的事件回调, 当用户进行操作触发相应事件开发者需要实现.

现SDK内可供订阅的事件见开放事件

sync(YouzanToken token)(目前不支持同步token)

同步用户态 可使用以下方式同步状态

  YouzanSDK.sync(context, token);
  Browser.reload(data);

说明:

认证事件被触发时, 开发者需要将认证信息拼装成YouzanToken对像通过sync()方法回传, 并在相应的页面进行刷新. SDK在获取YouzanToken后会进行本地缓存, 直到相关的认证信息失效后认证事件再次被触发再次自行同样的逻辑.

syncNot()

同步用户未登录状态

说明:

认证事件被触发时, 如果用户选择不登录,则需调用syncNot()方法告知SDK。SDK内部会将当前页面重置或者回退。当syncNot()返回false时,需要外部处理。这意味着当前加载页面一定需要登录,如果不登录就不能进入,此时需要将当面界面finish.

getPageType()

获取当前页面类型

返回值:

/**
 * 未知类型, 当页面处于加载中的状态时可能为该类型
 */
int PAGE_TYPE_UNKNOWN = 0x0;
/**
 * 页面主要是由{@link android.webkit.WebView}加载的html5页面构成.
 */
int PAGE_TYPE_HTML5 = 0x01;

说明:

使用YouzanBrowser返回值固定为YouzanClient.PAGE_TYPE_HTML5.

pageGoBack()

返回上一页

说明:

区别于WebView.goBack(), 建议使用该方法回访上一页. 代码实践如下:

@Override
public void onBackPressed() {
    if (!mView.pageGoBack()) {
        super.onBackPressed();
    }
}

pageCanGoBack()

判断是否可以返回上一页

说明:

区别于WebView.canGoBack(), 配合pageGoBack()方法使用.

sharePage()

分享页面, 触发分享事件

说明:

在页面加载完成后, 调用本方法会向H5发送分享事件以获取当前页面的分享信息.

receiveFile(int requestCode, Intent data)

传入文件选择数据

说明:

当前文件选择事件被触发时, 开发者去实现具体的打开文件选择器. 如果是在新的页面打开文件选择器, 则需要在onActivityResult中回传数据. 代码实践如下:

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
     if(resultCode == RESULT_OK){
         //...
         mView.receiveFile(requestCode, data);
    }
}

getTitle()

获取当前页面的标题

说明:

在页面加载完成后(页面状态事件), 调用本方法才会返回正确数据.

getUrl()

获取当前页面的链接

说明:

在页面加载完成后(页面状态事件), 调用本方法才会返回正确数据.

setSaveImageListener()

拦截图片保存功能, 根据业务判断是否需要该功能

 view.setSaveImageListener(new SaveImageListener() {
            @Override
            public boolean onSaveImage(WebView.HitTestResult result) throws ActivityNotFoundException {
           return true 
            }
        });