簡體   English   中英

web 中的 firebase google 身份驗證在 android 應用程序 webview 上不起作用

[英]firebase google authentication in web does not work on android app webview

我正在創建一個使用 firebase google 身份驗證登錄的網站。 它在所有瀏覽器中都能正常工作。 但是當我在我的應用程序中將此網站添加為 webview 時,它不起作用。

顯示此錯誤的網站:

運行此應用程序的環境不支持此操作。 “location.protocol”必須是 http、https 或 chrome-extension,並且必須啟用網絡存儲。

這里有一些代碼:

javascript代碼:

function login(){
    console.log('login called');
    function newLoginHappend(user){
        if(user){
            model_questions(user);
        }else{
            var provider = new firebase.auth.GoogleAuthProvider();

            firebase.auth().signInWithPopup(provider).then(function(result) {
              // This gives you a Google Access Token. You can use it to access the Google API.
              var token = result.credential.accessToken;
              // The signed-in user info.
              var user = result.user;
              // ...
            }).catch(function(error) {
              // Handle Errors here.
              var errorCode = error.code;
              var errorMessage = error.message;
              // The email of the user's account used.
              var email = error.email;
              // The firebase.auth.AuthCredential type that was used.
              var credential = error.credential;
              // ...
            });
        }
    }

    firebase.auth().onAuthStateChanged(newLoginHappend);
}

window.onload = login();

網頁瀏覽代碼:

   WebSettings webSettings =webView.getSettings();
   webSettings.setJavaScriptEnabled(true);
   webView.setWebViewClient(new WebViewClient());
   webView.loadUrl("https://mahmud-cse16.github.io/CBAP_Handout/");

有什么方法或技術可以解決這個問題嗎?? 如果您有任何想法,請與我們分享。

謝謝

嘗試為 webview 啟用 DOM Storage

WebSettings webSettings = myWebView.getSettings();
webSettings.setDomStorageEnabled(true);   // localStorage

設置是否啟用 DOM 存儲 API。 默認值為假。

Android 開發者參考

要解決“disallowed_useragent”錯誤,一種方法是使用 Android Google Auth SDK 在應用程序中本地登錄,然后將 Google 令牌傳遞給 Webview,以便 Firebase 可以將其與auth.signInWithCredential()

它可能適用於其他提供商,但這是我在 Android 上使用 Google 身份驗證的方法:

安卓:

val gso =
    GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
      .requestIdToken(clientId)
      .requestEmail()
      .build()
val googleSignInClient = GoogleSignIn.getClient(activity, gso)

activity.startActivityForResult(
        googleSignInClient.signInIntent,
        object : ActivityWithResultListener.OnActivityResultListener {
          override fun onActivityResult(resultCode: Int, data: Intent?) {
            if (data != null) {
              val credential = GoogleAuthProvider.getCredential(account.idToken!!, null)
              idToken = account.idToken!!

              // Then pass the token to your webview via a JS interface
            }
          }
       }
)


網站:

const idTokenFromApp = AndroidBridge.getAuthToken(); // This is the idToken from the Android code above
if (idTokenFromApp) {
    // from https://firebase.google.com/docs/auth/web/google-signin
    // Build Firebase credential with the Google ID token.
    // https://firebase.google.com/docs/reference/js/v8/firebase.auth.GoogleAuthProvider#static-credential
    const credential = firebase.auth.GoogleAuthProvider.credential(idTokenFromApp);

    // Sign in with credential from the Google user.
    firebase.auth.signInWithCredential(credential).catch((error) => {
      // Handle Errors here.
      const errorCode = error.code;
      const errorMessage = error.message;

      logError(`Error logging in: ${errorCode} ${errorMessage} token: ${idTokenFromApp}`, error);
    });
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM