如何在移动设备中获取One Signal的唯一用户ID?

34

我正在开发一款餐厅应用。在我的应用程序中,我使用One Signal发送通知。当我下订单时,我需要发送一个特定用户的One Signal唯一标识符,以便接收成功下单的通知:“您的订单已成功下单...正在处理,请稍候”。为此,我需要该用户的One Signal用户ID。我怎样才能获取它呢?我是One Signal的新手。请帮助我。

18个回答

0

@Lakshmi Reddy

iOS中,您可以像下面这样做:

OSPermissionSubscriptionState* status = [OneSignal getPermissionSubscriptionState];
    status.permissionStatus.hasPrompted
    status.permissionStatus.status
//                                                            <- OneSignal idsAvailable is deprecated.it's the alternative
    status.subscriptionStatus.subscribed
    status.subscriptionStatus.userSubscriptionSetting
    status.subscriptionStatus.userId
    status.subscriptionStatus.pushToken
NSLog(@"Push Token - %@",status.subscriptionStatus.pushToken);
NSLog(@"Push User ID - %@",status.subscriptionStatus.userId);

0
尝试使用以下代码获取玩家ID。
OneSignal版本 - com.onesignal:OneSignal:4.7.4
import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import androidx.annotation.Nullable;
import com.onesignal.OSSubscriptionObserver;
import com.onesignal.OSSubscriptionStateChanges;
import com.onesignal.OneSignal;

public class OneSignal_PlayerID extends Activity implement OSSubscriptionObserver {

private static String TAG = "OneSignal_PlayerID";
private static final String ONESIGNAL_APP_ID = "xxx-xxx-xxx-xxx";

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    OneSignal.initWithContext(this);
    OneSignal.setAppId(ONESIGNAL_APP_ID);
    OneSignal.addSubscriptionObserver(this);

}

@Override
public void onOSSubscriptionChanged(OSSubscriptionStateChanges stateChanges) {
    if (stateChanges.getTo().isSubscribed()){
        String playerId = stateChanges.getTo().getUserId();
        if (playerId!=null){
            Log.i(TAG,"OneSignal Player ID : "+playerId);
        }
     }
   }
}

1
虽然这段代码可能回答了问题,但提供有关它如何以及/或为什么解决问题的附加上下文将改善答案的长期价值。 - Abhishek Dutt

0
将以下代码添加到您的应用程序类中:
public void onCreate() {
   ...
   OneSignal.initWithContext(this);
   OneSignal.setAppId(ONESIGNAL_APP_ID);

   // Use One Signal User ID
   OneSignal.getDeviceState().getUserId()
   ...

}


我们可以使用什么方法在WebView中从OneSignal获取UserID?https://stackoverflow.com/questions/72656494/how-to-fetch-user-id-from-onesignal-using-javascript - Ambiguous Turtle

0
使用此代码获取玩家ID。
public class MainActivity extends Activity implements OSSubscriptionObserver {
  protected void onCreate(Bundle savedInstanceState) {
    OneSignal.addSubscriptionObserver(this);
  }
  
  public void onOSSubscriptionChanged(OSSubscriptionStateChanges stateChanges) {
    if (!stateChanges.getFrom().getSubscribed() &&
        stateChanges.getTo().getSubscribed()) {
         new AlertDialog.Builder(this)
             .setMessage("You've successfully subscribed to push notifications!")
             .show();
        // get player ID
        stateChanges.getTo().getUserId();
      }
   
      Log.i("Debug", "onOSSubscriptionChanged: " + stateChanges);
  }
}

0
在 Kotlin 中使用以下代码。
val oneSignalUserID = OneSignal.getDeviceState()!!.userId

@4b0 我们可以使用什么方法在WebView中从OneSignal获取UserID? https://stackoverflow.com/questions/72656494/how-to-fetch-user-id-from-onesignal-using-javascript - Ambiguous Turtle

0
String UUID = OneSignal.getPermissionSubscriptionState().getSubscriptionStatus().getUserId()

除非SubscriptionStatus被更改,否则此操作将返回null。请点击下面的链接了解如何从getSubscriptionStatus的JSONObject中获取OneSignal userId。

https://dev59.com/q7Hma4cB1Zd3GeqPNIk1#65107184


0
如果您正在使用 OneSignal 2.6.1 及以上版本:
var userId = OneSignal.shared.getPermissionSubscriptionState().then((userObject) => userObject.subscriptionStatus.userId).toString();

-1

所有上述方法在安卓设备上对我都无效。 从最新版本开始,我找到了这个解决方案。

var userId = OneSignal.getDeviceState().then((value) => {
  var deviceInfo= JSON.stringify(value);
  console.log(deviceInfo.userId)
})

对于像我这样的人,可以使用上面的代码来获取唯一的用户ID。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接