Я просто настроил уведомления Firebase, и мне было интересно, как я смогу открыть метаданные URL, содержащиеся в уведомлении, чтобы его можно было открыть в главном веб-представлении приложения
ЭтоWebView Activity:
class WebViewActivity : AppCompatActivity() {
private val webURL = "domain"
private val isAlreadyCreated = false
private var webViewFailed = false
override fun onCreate(savedInstanceState: Bundle?) {
super.onCreate(savedInstanceState)
val policy = StrictMode.ThreadPolicy.Builder().permitAll().build()
StrictMode.setThreadPolicy(policy)
PushNotifications.start(getApplicationContext(), "CODE")
setContentView(R.layout.activity_web_view)
webView.settings.javaScriptEnabled = true
webView.settings.setSupportZoom(false)
webView.settings.setAppCacheEnabled(true)
webView.webViewClient = object : WebViewClient() {
override fun onPageFinished(view: WebView?, url: String?) {
if(webViewFailed == false){
loader.alpha = 0F
webView.alpha = 1F
img.alpha = 0F
loadingIndicator.alpha = 0F
var response = makeRequest("https://domain/api/verifySession")
val storedActiveId = getSharedPreferences("ActiveId",0)
if(storedActiveId.contains("ActiveId")&&storedActiveId.contains("DisabledId")){
if(response.toString() == "null") {
PushNotifications.subscribe("loggedOutUser")
}else if(storedActiveId.getString("ActiveId","0") != response.toString() && storedActiveId.getString("DisabledId","0") != response.toString()){
showSessionDialog("Hay una nueva cuenta",
"¿Activamos notificaciones?", this@WebViewActivity, response.toString())
}
}else{
val editor = storedActiveId.edit()
editor.putString("ActiveId", response.toString())
editor.putString("DisabledId", "0")
// Commit the edits!
editor.commit()
}
}
}
override fun shouldOverrideUrlLoading(view: WebView?, request: WebResourceRequest?): Boolean {
val url: String = request?.url.toString()
if (url.contains("domain")) {
loadingIndicator.alpha = 1F
webView?.loadUrl(url)
} else {
val i = Intent(Intent.ACTION_VIEW)
i.data = Uri.parse(url)
startActivity(i)
}
return true
}
override fun onReceivedError(view: WebView?, request: WebResourceRequest?, error: WebResourceError?) {
super.onReceivedError(view, request, error)
showErrorDialog("Error", "No internet connection",this@WebViewActivity)
webViewFailed = true;
}
}
webView.loadUrl(webURL)
}
Это обработчик уведомлений
class NotificationHandler: FirebaseMessagingService() {
override fun onMessageReceived(mensaje: RemoteMessage) {
super.onMessageReceived(mensaje)
}
}
Очень просто ...
И, наконец, мое уведомление настроено таким образом и отправлено черезPusher с другого сервера (сервер на основе PHP)
"fcm" => array(
"notification" => array(
"title" => $value->title,
"body" => $value->message,
"sound" => $sound,
"url" => $value->url,
"prompt" => true
)
Я действительно понятия не имею, как передавать данные с одной стороны на другую (я уже делал это с iOS, делая именно то, что я хочу, а именно:Всякий раз, когда я получаю уведомление и открываю его, на экране внутри приложения отображается предупреждение с двумя вариантами ... Открыть его (который открывает URL-адрес внутри WebView) и Игнорировать (что делает веб-просмотр продолжающимся по URL-адресу по умолчанию).)