注意
为了使用此功能,必须完成 2 个 SDK 安装:移动原生环境中的 Airbridge Android SDK 和 WebView 环境网站上的 Airbridge Web SDK。
You can configure the Android SDK to handle Airbridge-related tasks occurring within the in-app website of a hybrid app without modifying the website's code.
The Android SDK can handle the commands related to event transmission, device settings, and user settings carried out by the Web SDK. Configure the Airbridge.setWebInterface
function before displaying the website on WebView.
YOUR_WEB_TOKEN
is the Web SDK token. You can find it on the [Settings]>[Tokens] page in the Airbridge dashboard.
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/");
}
}
Add the Airbridge.click function to enable deep links in WebViews. Webviews do not inherently support deep links; therefore, the Airbridge.click
function must be used to configure the SDK to handle the deep link within the tracking link.
If the input address is a tracking link, the Airbridge.click
function returns true
and calls the onSuccess
function when the app is launched through the address. If there is no internet connection or a different app is launched, the onFailure
function is called.
If the input address is not a tracking link, the Airbridge.click
function returns false
, and no further action is executed.
fun click(
trackingLink: String,
onSuccess: OnSuccess<Unit>? = null,
onFailure: OnFailure? = null
): Boolean
boolean click(
@NonNull String trackingLink,
@Nullable OnSuccess<Unit> onSuccess,
@Nullable OnFailure onFailure
)
Implementing WebViewClient#shouldOverrideUrlLoading
in the WebViewClient
allows you to determine whether to continue or cancel loading a specific URL after it is detected. For more information, refer to the Android Developer Guide.
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);
}
During loading, if the specific URL is an Airbridge tracking link, you can use the Airbridge.click
function to send the result of webView#shouldOverrideUrlLoading
as true
. This allows the Airbridge Android SDK to open the tracking link instead of the WebView.
Airbridge tracking links have a host of abr.ge
, YOUR_APP_NAME.airbridge.io
, or a custom domain.
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);
}
};
Make sure to collect the events that occur in the in-app WebView through the Web SDK in a hybrid app setting. When collecting such events through the App SDK, event duplication will occur.
Was this page helpful?
fun click(
trackingLink: String,
onSuccess: OnSuccess<Unit>? = null,
onFailure: OnFailure? = null
): Boolean
boolean click(
@NonNull String trackingLink,
@Nullable OnSuccess<Unit> onSuccess,
@Nullable OnFailure onFailure
)
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);
}
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);
}
};