Код: Выделить всё
AndroidManifest.xml
Код: Выделить всё
MainActivity.java
package com.aminur.icon;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import androidx.annotation.Nullable;
import androidx.appcompat.app.AppCompatActivity;
import com.google.firebase.inappmessaging.FirebaseInAppMessaging;
import com.google.firebase.inappmessaging.model.Action;
import com.google.firebase.inappmessaging.model.InAppMessage;
public class MainActivity extends AppCompatActivity {
private WebView webView;
private static final String TAG = "MainActivity";
private static final String DEFAULT_URL = "https://icon.com";
@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
// WebView setup
webView = findViewById(R.id.webView);
WebSettings webSettings = webView.getSettings();
webSettings.setJavaScriptEnabled(true);
webSettings.setDomStorageEnabled(true);
webView.setWebViewClient(new CustomWebViewClient());
handleIncomingIntent(getIntent());
// Setup FIAM click listener
FirebaseInAppMessaging.getInstance().addClickListener((inAppMessage, action) -> {
String url = action.getActionUrl();
if (url != null && !url.isEmpty()) {
Log.d(TAG, "Clicked URL: " + url);
runOnUiThread(() -> loadUrlInWebView(url));
}
});
}
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
setIntent(intent);
handleIncomingIntent(intent);
}
private void handleIncomingIntent(Intent intent) {
if (intent != null && intent.getData() != null) {
Uri uri = intent.getData();
if (uri != null) {
Log.d(TAG, "Loading URL from intent: " + uri.toString());
runOnUiThread(() -> loadUrlInWebView(uri.toString()));
}
} else {
Log.d(TAG, "No URL found in the intent, loading default URL: " + DEFAULT_URL);
runOnUiThread(() -> loadUrlInWebView(DEFAULT_URL));
}
}
private void loadUrlInWebView(String url) {
if (url != null && !url.isEmpty()) {
webView.loadUrl(url);
} else {
webView.loadUrl(DEFAULT_URL);
}
}
private class CustomWebViewClient extends WebViewClient {
@Override
public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {
String url = request.getUrl().toString();
Log.d(TAG, "shouldOverrideUrlLoading: " + url);
view.loadUrl(url);
return true; // Indicate WebView to handle this request
}
@Override
public void onPageStarted(WebView view, String url, android.graphics.Bitmap favicon) {
Log.d(TAG, "WebView started loading URL: " + url);
}
@Override
public void onPageFinished(WebView view, String url) {
Log.d(TAG, "WebView finished loading URL: " + url);
}
}
}
Код: Выделить всё
MyClickListener.java
package com.aminur.icon;
import android.content.Context;
import android.content.Intent;
import android.net.Uri;
import android.util.Log;
import com.google.firebase.inappmessaging.FirebaseInAppMessagingClickListener;
import com.google.firebase.inappmessaging.model.Action;
import com.google.firebase.inappmessaging.model.InAppMessage;
public class MyClickListener implements FirebaseInAppMessagingClickListener {
private static final String TAG = "MyClickListener";
private Context context;
public MyClickListener(Context context) {
this.context = context;
}
@Override
public void messageClicked(InAppMessage inAppMessage, Action action) {
String url = action.getActionUrl();
if (url != null && !url.isEmpty()) {
Log.d(TAG, "Clicked URL: " + url);
Intent intent = new Intent(context, MainActivity.class);
intent.setData(Uri.parse(url));
intent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
context.startActivity(intent);
}
}
}
Код: Выделить всё
FirebaseEmptyActivity.java
package com.aminur.icon;
import android.app.Activity;
import android.content.Intent;
import android.net.Uri;
import android.os.Bundle;
import android.util.Log;
public class FirebaseEmptyActivity extends Activity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
String url = intent.getDataString();
if (url != null) {
Log.d("FirebaseEmptyActivity", "Handling URL: " + url);
Intent mainIntent = new Intent(this, MainActivity.class);
mainIntent.setData(Uri.parse(url));
mainIntent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(mainIntent);
}
finish();
}
}
Я переопределил метод mustOverrideUrlLoading в WebViewClient для обработки загрузки URL-адреса в WebView.Я настроил прослушиватель кликов для Firebase In-App Messaging для обработки кликов по URL-адресу.
Ожидаемое поведение:
Когда пользователь нажимает ссылку в -app, ссылка должна открываться только в WebView внутри приложения.
Фактическое поведение:
Ссылка открывается как в WebView, так и во внешнем браузере/браузере по умолчанию.
Вопрос:
Как я могу гарантировать, что ссылка открывается только в WebView, а не во внешнем браузере/браузере по умолчанию?
Подробнее здесь: https://stackoverflow.com/questions/786 ... al-browser