仅当 onesignal 设备 ID 准备好时,如何启动 android 应用程序?
Posted
技术标签:
【中文标题】仅当 onesignal 设备 ID 准备好时,如何启动 android 应用程序?【英文标题】:How to launch android app only when onesignal device id is ready? 【发布时间】:2021-11-25 22:46:19 【问题描述】:我正在尝试使用 onesignal 来实现 webview 以获取通知。 我需要通过将 javascript 代码插入到我的 webview 页面来将一个信号设备 ID 传递给服务器(我为 LOGIN 按钮分配了一个将设备 ID 发送到服务器的 JS 函数)。为此,我使用以下代码:
public void onPageFinished(WebView view, String url)
// get device id
OSDeviceState deviceState = OneSignal.getDeviceState();
String oneSignalDeviceID = deviceState != null ? deviceState.getUserId() : null;
// create string with oneSignalDeviceID
String jsCodeInsert =
"javascript:document.getElementById('wp-submit').onclick = function() jQuery.post( ajax_object.ajax_url, action: 'onesignal_add', id: '" + oneSignalDeviceID + "', mode: 'mymode', function( response ) console.log(response);); ";
view.loadUrl(jsCodeInsert);
问题
通常oneSignalDeviceID
包含null
值而不是正确的ID。据我了解,当它包含null
时,onesignal 并没有为用户创建ID。
在这种情况下,最简单的解决方案是什么?
我认为最简单的做法是在 oneSignalDeviceID
准备好之前(不是 null
)启动 webview,但是,我不知道该怎么做。
【问题讨论】:
【参考方案1】:不幸的是,这并不总是时间问题。有时它需要应用程序第二次启动 OneSignal 才能获取玩家 ID。
有些用户会手动禁用通知。
在我们的应用程序中,我们一直检查 OneSignal 用户 ID,直到我们得到它,我们有 updateOneSignalID
API。
通常它不会超过应用程序的第二次运行。
【讨论】:
这听起来像是故意忽略竞争条件。以上是关于仅当 onesignal 设备 ID 准备好时,如何启动 android 应用程序?的主要内容,如果未能解决你的问题,请参考以下文章
OneSignal - 无法通过单击通知打开已关闭的应用程序
如何通过 Spring Boot 的 rest 调用在数据准备好时传输?