仅当 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 推送通知发送给所有用户而不是一个玩家

是否可以使用 OneSignal 获取设备令牌

OneSignal - 无法通过单击通知打开已关闭的应用程序

如何通过 Spring Boot 的 rest 调用在数据准备好时传输?

文档准备好时导入 npm (ReactJS/Next.js)

如何通过移动设备首选项设置过滤 OneSignal 推送消息