安卓 WebView 与 Firebase 云消息传递

5

我目前有一个安卓应用程序,它在WebView中加载我的网站。

WebView browserView;
browserView.loadUrl(URL);

我还实现了Firebase Cloud Messaging,这样我就可以使用推送通知。
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填充一个表格。下面是一张图片: enter image description here 问题在于,在用户通过Android WebView登录网站之前,我无法获取user_id。你可能已经猜到了,这意味着我不知道哪个设备与哪个用户相关联。这对于向特定用户发送推送通知是一个问题。
有人知道解决这个问题的方法吗?
注意:我已经考虑过制作本机Android应用程序,并且不想这样做。我也考虑过在像Chrome或Firefox这样的本机Web浏览器中加载网站,但我也不想这样做。
思路:当用户在网站上登录并传递user_id时,是否可能在Android应用程序中“触发”函数?
更多思路:我能否使用WebView的addJavascriptInterface()来实现这一点?

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

1
使用我在评论中提供的解决方案已经解决了问题。我使用了Android WebView类中的addJavascriptInterface()函数。通过使用它,我能够在登录网站后回调我的Android应用程序。然后我调用我的API并传递用户ID和设备ID。

请问您能否把您的链接发给我,因为我正在开发同样的解决方案。 - Mubashshir

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接