Home > Software engineering >  Allow notifications Android webview
Allow notifications Android webview

Time:09-17

Context I'm trying to add push notifications that come from my website. My code:

  • MainActivity.java
package com.example.neurofinance;

import androidx.appcompat.app.AppCompatActivity;

import android.annotation.TargetApi;
import android.content.Context;
import android.net.http.SslError;
import android.os.Build;
import android.os.Bundle;
import android.view.Menu;
import android.view.View;
import android.webkit.JavascriptInterface;
import android.webkit.SslErrorHandler;
import android.webkit.WebResourceRequest;
import android.webkit.WebSettings;
import android.webkit.WebView;
import android.webkit.WebViewClient;
import android.widget.Toast;



public class MainActivity extends AppCompatActivity {

    public class WebAppInterface {
        Context mContext;

        /** Instantiate the interface and set the context */
        WebAppInterface(Context c) {
            mContext = c;
        }

        /** Show a toast from the web page */
        @JavascriptInterface
        public void showToast(String toast) {
            Toast.makeText(mContext, toast, Toast.LENGTH_SHORT).show();
        }
    }


    @Override
    public boolean onCreateOptionsMenu(Menu menu) {
        return true;
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        this.getWindow().getDecorView().setSystemUiVisibility(

                View.SYSTEM_UI_FLAG_LAYOUT_STABLE

                        | View.SYSTEM_UI_FLAG_LAYOUT_HIDE_NAVIGATION

                        | View.SYSTEM_UI_FLAG_LAYOUT_FULLSCREEN

                        | View.SYSTEM_UI_FLAG_HIDE_NAVIGATION

                        | View.SYSTEM_UI_FLAG_FULLSCREEN);



        WebView webView = findViewById(R.id.webView);
        webView.addJavascriptInterface(new WebAppInterface(this), "Android");
        
        webView.getSettings().setDomStorageEnabled(true);

        webView.getSettings().setJavaScriptEnabled(true);



        webView.getSettings().setUseWideViewPort(true);//setting wide view
        webView.getSettings().setLoadWithOverviewMode(true);//setting default zoomed out view
        webView.setInitialScale(1);
        webView.getSettings().setBuiltInZoomControls(true);//setting zoom controls

        webView.loadUrl("https://neurofinance.rf.gd/");
        

        WebViewClient webViewClient = new WebViewClient() {

            @SuppressWarnings("deprecation") @Override

            public boolean shouldOverrideUrlLoading(WebView view, String url) {

                view.loadUrl(url);

                return true;

            }

            @Override
            public void onReceivedSslError (WebView view, SslErrorHandler handler, SslError error) {
                handler.proceed();
            }

            @TargetApi(Build.VERSION_CODES.N) @Override

            public boolean shouldOverrideUrlLoading(WebView view, WebResourceRequest request) {

                view.loadUrl(request.getUrl().toString());

                return true;

            }
        };

        webView.setWebViewClient(webViewClient);

        if (Build.VERSION.SDK_INT >= 21)
            webView.getSettings().setMixedContentMode( WebSettings.MIXED_CONTENT_ALWAYS_ALLOW );
    }
}
  • AndroidManifest.xml
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.example.neurofinance">
    <uses-permission android:name="android.permission.INTERNET"/>
    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".MainActivity"
            android:configChanges="orientation|keyboardHidden|screenSize">
            <intent-filter>
                <action android:name="android.intent.action.MAIN" />

                <category android:name="android.intent.category.LAUNCHER" />
            </intent-filter>
        </activity>
    </application>

</manifest>
  • activity_main.xml
<?xml version="1.0" encoding="utf-8"?>
<androidx.constraintlayout.widget.ConstraintLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:app="http://schemas.android.com/apk/res-auto"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity">

    <WebView
        android:id="@ id/webView"
        android:layout_width="match_parent"
        android:layout_height="match_parent"
        />

</androidx.constraintlayout.widget.ConstraintLayout>

Problem
I tried code from this enter image description here

CodePudding user response:

The WebView does not support the API that websites use to show notifications, while browsers do support that API. This is why you see the notifications in the browser, but not in the WebView. See this page for the list of environments that support the notifications API.

If your WebView displays a website that you control, you may modify the website to use some other mechanism to show notifications (via some java interface).

CodePudding user response:

could that be useful to you?

Android Push Notification not opening my activity with webview

https://github.com/ashraf-alsamman/android-webview-app-with-push-notification

https://medium.com/shibinco/creating-a-webview-android-app-with-push-notification-7fd48541a913

Hopefuly you can make it work from one of those example

CodePudding user response:

Not sure I can be much help but you may have made the code supportable for only the website, and not the actual app. I'm a beginner myself so I don't know much but I think that's the problem here.

CodePudding user response:

I don't have enough "reputation" to post a comment but could that be useful to you?

Android Push Notification with WebView?

https://github.com/ashraf-alsamman/android-webview-app-with-push-notification

https://medium.com/shibinco/creating-a-webview-android-app-with-push-notification-7fd48541a913

Hopefuly you can make it work from one of those example

  • Related