javascript - 如何使用 web(js) 在 OneSignal 中设置 External_User_Id?

标签 javascript android jquery android-studio onesignal

我注意到 OneSignal 正在创建一个唯一的 player_id 并在任何用户首次加载我的网络应用程序时在其数据库中添加一列。

我正在尝试使用以下代码(根据 OneSignal docs )将自定义 external_user_id 添加到同一个信号数据库字段中:

<script src="https://cdn.onesignal.com/sdks/OneSignalSDK.js" ></script>
<script>
let externalUserId = "123456789"; 

OneSignal.push(function() {
  OneSignal.setExternalUserId(externalUserId);
});
</script>

但不知何故,external_user_id 字段仍设置为空。

所以我添加了下面的代码。

<script src="https://cdn.onesignal.com/sdks/OneSignalSDK.js" ></script>
<script>
let externalUserId = "123456789"; 

window.OneSignal = window.OneSignal || [];
OneSignal.push(function() {
    OneSignal.init({
        appId: "xoxoxoxoxoxoxoxoxo",
    });
});

OneSignal.push(function() {
  console.log("triggering");
  OneSignal.setExternalUserId(externalUserId);
  console.log("triggering");
});

它没有错误,但 external_user_id 仍未更新。

这是我添加到我的 Android Studio

的 OneSignal 代码
package com.appgrep.xoxoxo;

import android.app.Application;

public class OneSignal extends Application {

    private static final String ONESIGNAL_APP_ID = "xoxoxoxoxoxoxoxoxo";

    @Override
    public void onCreate() {
        super.onCreate();

        // OneSignal Initialization
        com.onesignal.OneSignal.initWithContext(this);
        com.onesignal.OneSignal.setAppId(ONESIGNAL_APP_ID);
    }
}

我只是想使用 Web (JS) 在 OneSignal 中添加 External_User_Id 非常感谢任何帮助。

Amit 获取用户 id 的建议

var OneSignal = window.OneSignal || [];
 OneSignal.push(function() {
    OneSignal.getUserId(function(userId) {
      console.log("OneSignal User ID:", userId);
      $("#some").text(userId);
    });
  });

getUserId 函数未触发。

我可以这样做:

var OneSignal = window.OneSignal || [];

OneSignal.push(function() {
  OneSignal.on('subscriptionChange', function (isSubscribed) {
      OneSignal.push(function() {
        OneSignal.getUserId(function(userId) {
          console.log("OneSignal User ID:", userId);
        });
      });
    });
  });

但在我的场景中,没有订阅,所有用户一打开网络应用程序就会在一个信号中注册,并且订阅会自动勾选。

OneSignal user's screenshot

最佳答案

我已经尝试使用 web(js) 设置 external_user_id,它工作正常,没有问题。

要求

  • 工作 Onesignal 实现
  • 订阅通知

现在只需打开 Dev 控制台并粘贴以下代码来设置 external_user_id

let externalUserId = "123456789"; // You will supply the external user id to the OneSignal SDK
OneSignal.push(function() {
      OneSignal.setExternalUserId(externalUserId);
    });

现在检查是否设置了external_user_id

OneSignal.push(function() {
  OneSignal.getExternalUserId().then(function(externalUserId){
    console.log("externalUserId: ", externalUserId);
  });
});

See screenshot of dev console

或者,访问 OneSignal 仪表板并检查用户,您将 external_user_id 确保使 external_user_id 列可见, Check external_user_id in dashboard image

完成测试后删除演示 external_user_id

OneSignal.push(function() {
  OneSignal.removeExternalUserId();
});

文档:https://documentation.onesignal.com/docs/external-user-ids

请记住,如果您通过 Android SDK 设置 External_user_id 并希望在 Web 上更新它

Warning - Android SDK Data Synchronization

The OneSignal Android SDKs leverage cacheing on external_user_id and Data Tags.

If setting external_user_id through the Edit device API Endpoint, then use the same endpoint to remove the external_user_id upon the user logging out of the app.

The removeExternalUserId method will not work unless the external_user_id is set first with the setExternalUserId method on Android.

This is only applicable on the OneSignal Android Mobile App SDKs.

使用下面的代码

替换为您的应用程序页面的应用程序 ID

<script src="https://cdn.onesignal.com/sdks/OneSignalSDK.js" ></script>

<script>
  window.OneSignal = window.OneSignal || [];
  OneSignal.push(function() {
    OneSignal.init({
      appId: "<APP_ID>",
    });
  });

OneSignal.getUserId((userId) => {
    if (userId == null){
        alert("Subscribe to Notification First")
        return
    }
    alert(`Player id: is ${userId}`);
});
</script>

关于javascript - 如何使用 web(js) 在 OneSignal 中设置 External_User_Id?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/72801714/

相关文章:

java - 在 webview 的 Post 方法中传递参数

jQuery:动态添加新的文本字段

javascript - 如何修复此 AngularJS data-ng-init 绑定(bind) - 初学者

javascript - 当在下拉列表中选择一个选项时,在表格的行上显示输入文本框

javascript - 定义全局变量 x 时让 Firebug 中断

javascript - jQuery Ajax JSON 不返回任何响应

javascript - 获取点击的 ul 的 li 列表

javascript - 检测用户是否已在 html 网站上参加比赛

android - Android 窗口中的 "Panel"是什么?

java - Android Facebook SDK 没有找到类定义 com.facebook.android.Facebook