Deeplink使用经验
1.Deeplink
一个网站有很多页面,每个页面有自己的地址,通过页面的网址打开各个深层的页面;
一个应用也可以包含多个页面,Deeplink技术配置各个页面的对外链接,可以通过具体的链接打开各个深层的页面。
一个deeplink链接可以包含以下信息:url,clicktrackers,fallback,extensions
- URL SCHEME
我们可以把一个app看做一个独立的网站,而URL Scheme就是网址。比如拨号,我们使用tel://112 就可以打开拨号应用。是否能打开app的具体页面依赖于其本身是否支持deeplink,系统本身有一些默认 的url scheme,如tel://, mailto://等。
该页面对应的URL(URI): deeplink://com.example.demo2/open
adb shell am start -a android.intent.action.VIEW -d deeplink://com.example.demo2/open
对外公开scheme的部分应用:
- Intent Intent是一个将要执行的动作的抽象的描述,一般来说是作为参数来使用,由 Intent来协助完成 Android各个组件之间的通讯。 我们以Activity的跳转为例,Intent可分为显示和隐式两种: 显式的方式明确跳转的Activity是哪一个:
• Intent intent = new Intent(Activity-1.this, Activity-2.class)
startActivity(intent)
隐式的方式不明确指定启动哪个Activity,而是设置Action、Data、Category,让系统来筛选出合适的Activity。筛选是根据所有的来筛选:
此处设置了对外的url scheme,可通过封装Intent 跳转
Uri uri = Uri.parse(url)
Intent intent = new Intent(Intent.ACTION_VIEW).setData(uri)
intent.putExtra(key, value)
startActivity(intent)
参考:https://developer.android.google.cn/guide/components/intents-filters
2.WebView
2.1WebView是android中一个非常重要的控件,它的作用是用来展示一个web页面。它使用的内核是webkit引擎,4.4版本之后,直接使用Chrome作为内置网页浏览器。
- loadUrl
用于加载指定url的API,如webView.loadUrl(“https://www.google.com”) - WebSettings
设置Webview的参数,如是否支持页面中的js代码,缓存,编码格式等 - WebViewClient
处理各种通知和请求事件,其中有几个方法可以重写 - onPageStarted
开始载入页面调用的,我们可以设定一个loading的页面,告诉用户程序在等待网络响应。 - onPageFinished
在页面加载结束时调用。我们可以关闭loading 条,切换程序动作 - onReceivedError
加载页面的服务器出现错误时(如404)调用 - shouldOverrideUrlLoading
在网页上的所有加载都经过这个方法,这个函数我们可以做很多操作。返回false表示通过webview加载url;返回true表示通过自定义方式加载url。 - WebChromeClient
辅助 WebView 处理 Javascript 的对话框,网站图标,网站标题等等 - onCloseWindow
js中调用window.close会触发该方法,可通过该方法实现页面自动关闭 - onProgressChanged
页面加载进度,可通过该方法自定义页面加载进度UI
2.2.Android与js交互
- addJavascriptInterface
添加供js调用的java代码 - evaluateJavascript(“javascript:Function(’” + parameter + “’)”, [resultCallback]);
Java调用js中的方法,并且可以获取其返回 - Denied starting an intent without a user gesture
- net::ERR_UNKNOWN_URL_SCHEME
通过shouldOverrideUrlLoading自定义方式加载url
2.3 WebView支持intent格式,实现app跳转