提示
在进行 Hybrid App 设置之前,请先分别在 App 和网站上完成 Android SDK 和 Web SDK 的安装。
通过设置,您无需更改 Hybrid App 中网站的代码,也能让 Airbridge Android SDK 处理应用内网站中的 Airbridge 相关操作。
Android SDK 可以代替 Web SDK 处理事件发送、设备设置和用户设置等命令。在 WebView 中加载网站之前,请设置 Airbridge.setWebInterface
函数。
YOUR_WEB_TOKEN
是 Web SDK Token,可在 Airbridge 面板的 [设置]>[Token] 获取。
class MainActivity : Activity() {
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
setContentView(R.layout.activity_main)
initWebView()
}
fun initWebView() {
webView.settings.javaScriptEnabled = true
webView.settings.domStorageEnabled = true
Airbridge.setWebInterface(webView, "YOUR_WEB_TOKEN")
webView.webChromeClient = WebChromeClient()
webView.webViewClient = WebViewClient()
webView.loadUrl("http://my_company.com/main")
}
}
public class MainActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initWebView();
}
void initWebView() {
webView = findViewById(R.id.webView);
webView.getSettings().setJavaScriptEnabled(true);
webView.getSettings().setDomStorageEnabled(true);
Airbridge.setWebInterface(webView, "YOUR_WEB_SDK_TOKEN");
webView.setWebChromeClient(new WebChromeClient());
webView.setWebViewClient(new WebViewClient());
webView.loadUrl("http://dev.blog.airbridge.io/websdk-web-app/");
}
}
您可以通过添加 Airbridge.click 函数,在 WebView 中正常运行深度链接。由于 WebView 默认不支持深度链接,需要通过 Airbridge.click
函数设置,使 SDK 代替启用追踪链接中的深度链接。
Airbridge.click
函数在输入的地址为追踪链接时返回 true
。当地址启用 App 时,会调用 onSuccess
函数;若无网络或启用了其他 App,则会调用 onFailure
函数。
如果输入的地址不是追踪链接,Airbridge.click
函数将返回 false
,并且不会执行任何操作。
fun click(
trackingLink: String,
onSuccess: OnSuccess<Unit>? = null,
onFailure: OnFailure? = null
): Boolean
boolean click(
@NonNull String trackingLink,
@Nullable OnSuccess<Unit> onSuccess,
@Nullable OnFailure onFailure
)
如果在 WebViewClient
中实现 WebViewClient#shouldOverrideUrlLoading
,即可在确认加载特定 URL 后决定是否继续加载。有关 WebViewClient 的更多信息,请参阅 Android 开发者指南。
private val webViewClient = object : WebViewClient() {
override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
return super.shouldOverrideUrlLoading(view, url)
}
@RequiresApi(Build.VERSION_CODES.N)
override fun shouldOverrideUrlLoading(
view: WebView?,
request: WebResourceRequest?
): Boolean {
return super.shouldOverrideUrlLoading(view, request)
}
}
private fun initWebview() {
webView.webViewClient = webViewClient
}
private WebViewClient webViewClient = new WebViewClient() {
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
return super.shouldOverrideUrlLoading(view, url);
}
@Override
@RequiresApi(Build.VERSION_CODES.N)
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
return super.shouldOverrideUrlLoading(view, request);
}
};
private void initWebview() {
webView.setWebViewClient(webViewClient);
}
在加载过程中,如果特定 URL 为 Airbridge 追踪链接,可以使用 Airbirdge.click
函数将 webView#shouldOverrideUrlLoading
的结果发送为 true
,使 Airbridge Android SDK 代替 Webview 打开追踪链接。
Airbridge 追踪链接的 URL host 为 abr.ge
、YOUR_APP_NAME.airbridge.io
、或自定义域名。
private val webViewClient = object : WebViewClient() {
private fun handleDomain(view: WebView, uri: Uri): Boolean =
// return true when uri is tracking link
// return false when uri is not tracking link
Airbridge.click(uri.toString(), {
// on success
// do nothing
}, {
// on failure
// when uri is another app's tracking link or sdk fails to open uri
view.loadUrl(uri.toString())
})
override fun shouldOverrideUrlLoading(view: WebView?, url: String?): Boolean {
if (view === null) return false
if (url == null) return false
val uri = Uri.parse(url) ?: return false
return handleDomain(view, uri)
}
@RequiresApi(Build.VERSION_CODES.N)
override fun shouldOverrideUrlLoading(
view: WebView?,
request: WebResourceRequest?
): Boolean {
if (view === null) return false
val uri = request?.url ?: return false
return handleDomain(view, uri)
}
}
private WebViewClient webViewClient = new WebViewClient() {
private boolean handleDomain(@NonNull WebView view, @NonNull Uri uri) {
// return true when uri is tracking link
// return false when uri is not tracking link
return Airbridge.click(uri.toString()
, result -> {
// on success
// do nothing
}, throwable -> {
// on failure
// when uri is another app's tracking link or sdk fails to open uri
view.loadUrl(uri.toString())
}
);
}
@Override
public boolean shouldOverrideUrlLoading(WebView view, String url) {
if (view == null) return false;
if (url == null) return false;
Uri uri = Uri.parse(url);
if (uri == null) return false;
return handleDomain(view, uri);
}
@Override
@RequiresApi(Build.VERSION_CODES.N)
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
if (view == null) return false;
if (request == null) return false;
Uri uri = request.getUrl();
if (uri == null) return false;
return handleDomain(view, uri);
}
};
启用 Hybrid App 设置后,应仅通过 Web SDK 收集在应用内 WebView 中发生的事件。如果同时使用 App SDK 收集事件,可能会导致重复统计。
如果应用内 WebView 使用的是实际的移动版网站,请仅通过 Web SDK 收集事件。
Was this page helpful?