【发布时间】: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