首页 > 解决方案 > Firebase 是否可以从 Android 应用程序的 html 页面注销?

问题描述

使用 Firebase 身份验证,当用户通过身份验证时,他们会被带到活动中,我从WebView 中htmlPages加载 Url 。android_asset我有两个 html 页面。index.htmlprofile.html。有没有办法在页面中显示经过身份验证的用户配置文件并在该 html 页面上profile.html设置按钮?Sign Out

工作流程如下:

  1. SignIn活动开始,成功认证后,htmlPages活动开始。
  2. htmlPages活动profile.html在其 WebView 组件内打开页面。
  3. profile.html页面中,有一个Sign Out按钮和一个字段,显示登录用户的电子邮件地址。
  4. 单击页面Sign Out按钮时profile.html,用户退出,htmlPages活动结束,SignIn活动开始。

我真的很好奇有没有办法在 html 页面中实现这样的功能。

假设这是我的htmlPages活动:

public class htmlPages extends Activity implements AdvancedWebView.Listener {

    private AdvancedWebView mWebView;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.html_pages);
        mWebView = (AdvancedWebView) findViewById(R.id.webview);
        mWebView.setListener(this, this);
        mWebView.setGeolocationEnabled(false);
        mWebView.setMixedContentAllowed(true);
        mWebView.setCookiesEnabled(true);
        mWebView.setThirdPartyCookiesEnabled(true);
        mWebView.loadUrl("file:///android_asset/home.html");
    }
}

这是我的profile.html

<!DOCTYPE html>
<head>
   <title>Profile</title>
</head>
<body>
   Your email address is: <!-- User email address-->
   <button type="button">Sign Out</button>
</body>
</html>

标签: androidhtmlfirebasefirebase-authentication

解决方案


是的,我们可以做到,这很简单,我们必须为 web 视图编写自己的 javascript 接口,如下所示,并将其放在包含 web 视图的活动类下

inner class JSInterface(context: Context) {
    @JavascriptInterface
    fun performLogoutButtonClick() {
        Log.d("SSB Log", "Logout button clicked")
        // Perform logout action here
    }
}

然后我们如下向 web 视图添加属性并加载 html 页面

fun loadWebViewWithButtonClick() {
    val htmlString = "<html><body><button type=\"button\", onClick=\"JSInterface.performLogoutButtonClick()\">Logout</button></body></html>"
    wvTest.apply {
        settings.javaScriptEnabled = true
        addJavascriptInterface(JSInterface(context), "JSInterface")
        loadData(htmlString, "text/html", "UTF-8")
    }
}

在这里,我正在加载具有注销按钮的 html 字符串,并且正在调用我们的 javascript 界面的 performLogoutButtonClick() (您的活动中的代码,因此您可以轻松地从 firebase 注销用户)

因此,htmlPages活动将是:

public class htmlPages extends Activity implements AdvancedWebView.Listener {

private AdvancedWebView mWebView;

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.html_pages);
    mWebView = (AdvancedWebView) findViewById(R.id.webview);
    mWebView.setListener(this, this);
    mWebView.setGeolocationEnabled(false);
    mWebView.setMixedContentAllowed(true);
    mWebView.setCookiesEnabled(true);
    mWebView.setThirdPartyCookiesEnabled(true);
    mWebView.loadUrl("file:///android_asset/profile.html");
    mWebView.getSettings().setJavaScriptEnabled(true);
    mWebView.addJavascriptInterface(new JSInterface(this), "JSInterface");
}

private class JSInterface {
    JSInterface(Context context) {

    }

    @JavascriptInterface
    public void performLogoutButtonClick() {
        Log.d("SSB Log", "Logout button clicked");
    }
}

}

而且profile.html是:

<!DOCTYPE html> 
<head>
   <title>Profile</title>
</head>
<body>
   Your email address is: <!-- User email address--> 
   <button type="button", onClick="JSInterface.performLogoutButtonClick()">Sign Out</button> 
</body>
</html>

推荐阅读