如何在 Mobile 中获取 One Signal 唯一用户 ID?

Posted

技术标签:

【中文标题】如何在 Mobile 中获取 One Signal 唯一用户 ID?【英文标题】:How to get One Signal unique user id in Mobile? 【发布时间】:2016-07-22 01:29:09 【问题描述】:

我正在开发一个餐厅应用程序。我在我的应用程序中使用 One Signal 来发送通知。在这里,当我下订单时,我需要为特定用户发送一个信号的唯一 ID,以获取“您的订单已成功下达......它正在进行中。请稍候”的通知。为此,我需要用户的 One Signal 用户 ID。我怎么才能得到它?我是 One Signal 的新手。请帮帮我。

【问题讨论】:

【参考方案1】:

使用OneSignal官方网站的以下代码获取OneSignal的唯一ID。

OneSignal.idsAvailable(new OneSignal.IdsAvailableHandler() 
        @Override
        public void idsAvailable(String userId, String registrationId) 
            Log.d("debug", "User:" + userId);
            if (registrationId != null)
                Log.d("debug", "registrationId:" + registrationId);

        
    );

参考:

Getting code in Official Site

以上代码已弃用。请使用以下代码。

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

【讨论】:

我试图在 ios 上执行此操作,这说明了如何执行此操作。在 iOS 中也是一样的逻辑 对不起..不知道 IOS ji @blackmoon iOS @blackmon 的任何解决方案 上述安卓解决方案已弃用 使用:OSPermissionSubscriptionState status = OneSignal.getPermissionSubscriptionState(); status.getSubscriptionStatus().getUserId(); 不适用于他们的最新版本 4.0.0。 :(【参考方案2】:

上述针对 android 的解决方案已弃用 使用:

OSPermissionSubscriptionState status = OneSignal.getPermissionSubscriptionState();
status.getSubscriptionStatus().getUserId();

【讨论】:

一班:OneSignal.getPermissionSubscriptionState().getSubscriptionStatus().getUserId() String UUID = OneSignal.getPermissionSubscriptionState().getSubscriptionStatus().getUserId() 它返回 null! :( 不适用于他们的最新版本 4.0.0。 :(【参考方案3】:

Android Java

String userId = OneSignal.getDeviceState().getUserId();

Android Kotlin

val oneSignalUserID = OneSignal.getDeviceState()!!.userId

iOS OneSignal 版本 3.6.0

guard let userID = OneSignal.getDeviceState().userId else  return 

iOS 旧 OneSignal 版本

let status: OSPermissionSubscriptionState = OneSignal.getPermissionSubscriptionState()
    if let id = status.subscriptionStatus.userId 
    oneSignalPlayer_ID = id
    print("\nOneSignal UserId:", id)

【讨论】:

此解决方案完美运行。其他解决方案(包括接受的解决方案)可能会被弃用。它们不适用于 Android Studio/Java。【参考方案4】:

对于 android,您可以使用 getPermissionSubscriptionState 方法和 addSubscriptionObserver 从 3.5.0+ 版本的原生 Android SDK 开始获取用户 ID,即 playerID。

有关使用 getPermissionSubscriptionState 的更多信息,请参阅:https://documentation.onesignal.com/docs/android-native-sdk#section--getpermissionsubscriptionstate-

要添加订阅观察者,请参阅:https://documentation.onesignal.com/docs/android-native-sdk#section--addsubscriptionobserver-

Github 上有一个 Native Android 示例: https://github.com/OneSignal/OneSignal-Android-SDK

它位于标有 AndroidStudio 的示例文件夹中

对于 iOS,您可以使用 getPermissionSubscriptionState 方法和 addSubscriptionObserver 从原生 iOS SDK 2.5.0 版本开始获取 playerID。

有关使用 getPermissionSubscriptionState 的更多信息,请参阅:https://documentation.onesignal.com/docs/ios-native-sdk#section--getpermissionsubscriptionstate-

要添加订阅观察者,请参阅:https://documentation.onesignal.com/docs/ios-native-sdk#section--addsubscriptionobserver-

Github 上有一个 Swift 的 iOS 示例项目可能会有所帮助:https://github.com/OneSignal/OneSignal-iOS-SDK/tree/master/Examples

【讨论】:

【参考方案5】:

对于iOS

let status: OSPermissionSubscriptionState = OneSignal.getPermissionSubscriptionState()
    if let id = status.subscriptionStatus.userId 
    oneSignalPlayer_ID = id
    print("\nOneSignal UserId:", id)

【讨论】:

【参考方案6】:

OneSignal 4.1 Android String playerId = OneSignal.getDeviceState().getUserId(); 获取玩家ID

【讨论】:

【参考方案7】:

@Lakshmi 雷迪

在 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);

【讨论】:

【参考方案8】:

完整的解决方案:

import android.app.Application;
import com.onesignal.OneSignal;

public class ApplicationClass extends Application 
    @Override
    public void onCreate() 
        super.onCreate();
        // OneSignal Initialization
        OneSignal.startInit(this)
                .inFocusDisplaying(OneSignal.OSInFocusDisplayOption.Notification)
                .unsubscribeWhenNotificationsAreDisabled(true)
                .init();
        String UUID = OneSignal.getPermissionSubscriptionState().getSubscriptionStatus().getUserId();
    

【讨论】:

此行返回 null OneSignal.getPermissionSubscriptionState().getSubscriptionStatus().getUserId();【参考方案9】:
String UUID = OneSignal.getPermissionSubscriptionState().getSubscriptionStatus().getUserId()

这将返回 null,除非 SubscriptionStatus 已更改。请点击以下链接了解如何从 getSubscriptionStatus 的 JSONObject 中获取 OneSignal userId。

https://***.com/a/65107184/1906738

【讨论】:

【参考方案10】:

如果您使用的是 OneSignal 2.6.1 及更高版本:

var userId = OneSignal.shared.getPermissionSubscriptionState().then((userObject) => userObject.subscriptionStatus.userId).toString();

【讨论】:

【参考方案11】:

将此添加到您的应用程序类

public void onCreate() 
   ...
   OneSignal.initWithContext(this);
   OneSignal.setAppId(ONESIGNAL_APP_ID);

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

【讨论】:

【参考方案12】:

在 Kotlin 中使用以下代码。

val oneSignalUserID = OneSignal.getDeviceState()!!.userId

【讨论】:

【参考方案13】:

对于 iOS 15 和 OneSignal iOS SDK 版本 3.7.0

if let userId = OneSignal.getDeviceState().userId 
    print("OneSignal User ID: \(userId)")

【讨论】:

【参考方案14】:

使用此代码获取玩家 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);
  

【讨论】:

【参考方案15】:

以上所有内容在 android 中都不适用于我。 从最新版本,我得到了这个解决方案。

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

对于像我这样的任何人都可以使用上面的代码来获取唯一的 UserId。

【讨论】:

以上是关于如何在 Mobile 中获取 One Signal 唯一用户 ID?的主要内容,如果未能解决你的问题,请参考以下文章

如何在iOS中获得One Signal用户的唯一玩家ID?

在 Android 中点击 One Signal 推送通知时如何导航到特定页面?

在 ionic 3 中点击 One Signal 推送通知时如何导航到特定页面?

jQuery Mobile:如何正确提交表单数据

如何在jquery-mobile中获取搜索框的清除事件

如何在 PayPal Mobile SDK 中获取买家信息