Открыть URL из уведомления Firebase об активности WebView - PullRequest
0 голосов
/ 24 января 2019

Я просто настроил уведомления 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-адресу по умолчанию).)

1 Ответ

0 голосов
/ 24 января 2019

Один из способов передачи данных - через FirebaseJobDispatcher.Вы в основном сериализовали свои данные уведомлений и поместили их в пакет. Вот пример приложения из Google Firebase

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...