【问题标题】:Android WebView With Firebase Cloud Messaging带有 Firebase 云消息传递的 Android WebView
【发布时间】:2018-05-27 17:58:28
【问题描述】:

我目前有一个在 WebView 中加载我的网站的 Android 应用程序。

WebView browserView;
browserView.loadUrl(URL);

我还实现了 Firebase 云消息传递,因此我可以利用推送通知。

public class MyFirebaseInstanceIdService extends FirebaseInstanceIdService {
    @Override
    public void onTokenRefresh() {
        // Get updated InstanceID token.
        String refreshedToken = FirebaseInstanceId.getInstance().getToken();

        // Send the token to the server
        sendRegistrationToServer(refreshedToken);
    }

    private void sendRegistrationToServer(String refreshedToken) {
        try {
            URL url = new URL(URL + "/API.php");
            HttpURLConnection conn = (HttpURLConnection) url.openConnection();
            conn.setRequestMethod("POST");

            conn.setDoOutput(true);
            conn.setDoInput(true);
            DataOutputStream wr = new DataOutputStream(
                    conn.getOutputStream());
            wr.writeBytes("action=insertDeviceID&deviceID=" + refreshedToken);
            wr.flush();
            wr.close();

            InputStream is = conn.getInputStream();
            BufferedReader rd = new BufferedReader(new InputStreamReader(is));
            is.close();
            rd.close();
        } catch(Exception e) {}
    }
}

sendRegistrationToServer() 运行时,我的 API 会使用当前 Android 设备的 ID 填充一个表。这是一张图片:

问题是我无法获得user_id,直到此人通过 Android WebView 登录网站。正如您可能猜到的那样,这意味着我不知道哪个设备与哪个用户相关联。这是向某些用户发送推送通知的问题。

有人知道这个问题的解决方案吗?

注意:我已经讨论过制作原生 Android 应用程序,但不想这样做。我也想过在 Chrome 或 Firefox 等原生网络浏览器中简单地加载网站,但是我也不想这样做。

思考:当用户登录网站并传递user_id时,是否有可能在Android应用程序中“触发”一个功能?

更多想法:我可以使用 WebView 的 addJavascriptInterface() 来完成此操作吗?

【问题讨论】:

  • 只有在用户登录并且您拥有他们的 UID 之后,您(显然)必须找到一种将令牌发送到服务器的方法。这可能会比在 SO 上探讨的要复杂得多。如果您的应用本质上是托管在 Android shell 中的 Web 应用,那么您将不得不在 Web 部件中的 JavaScript 和 Android 部件中的 Java 之间建立桥接。
  • 真的很复杂吗?听起来我可以在安装应用程序时发送设备ID,然后当用户登录时通过Web应用程序中的JS调用Android应用程序中的Java函数,然后Java函数再次调用API并发布设备ID。然后 API 将从 PHP 会话中获取 UID 并更新设备 ID 匹配的行。这很复杂吗?
  • 试一试,如果你弄明白了,就回答你自己的问题。 :-)

标签: javascript php android firebase firebase-cloud-messaging


【解决方案1】:

使用我在 cmets 中的解决方案解决了这个问题。我使用了函数addJavascriptInterface(),它是Android WebView 类的一部分。通过使用它,我可以在登录网站后回调我的 Android 应用程序。然后我调用我的 API 并传递用户 ID 和设备 ID。

【讨论】:

  • 请你把你的链接发给我,我正在做同样的工作
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-02-06
  • 2019-07-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多