Ссылка Firebase In-App Messaging открывается как в WebView, так и во внешнем браузере.Android

Форум для тех, кто программирует под Android
Ответить Пред. темаСлед. тема
Anonymous
 Ссылка Firebase In-App Messaging открывается как в WebView, так и во внешнем браузере.

Сообщение Anonymous »

Я работаю над приложением для Android, которое использует обмен сообщениями в приложениях Firebase. Когда пользователь нажимает ссылку в сообщении в приложении, ссылка должна открыться в WebView внутри приложения. Однако в настоящее время он открывается как в WebView, так и во внешнем браузере/браузере по умолчанию.

Код: Выделить всё

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
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «Android»