如何仅在 onesignal 设备 ID 准备就绪时启动 android 应用程序?

How to launch android app only when onesignal device id is ready?

我正在尝试使用 onesignal 实现 webview 的通知。 我需要通过将 JavaScript 代码插入到我的 webview 页面来将 onesignal 设备 ID 传递给服务器(我为登录按钮分配了一个将设备 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,但是,我不确定如何执行此操作。

不幸的是,这并不总是时间问题。有时 OneSignal 需要再次启动 App 才能获取玩家 ID。 有些用户会手动禁用通知。 在我们的应用程序中,我们一直在检查 OneSignal 用户 ID,直到我们得到它,并且我们有 updateOneSignalID API。 通常不会超过应用程序的第二个 运行。