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

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

【问题讨论】:

    标签: android ios notifications onesignal unique-id


    【解决方案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://stackoverflow.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。

                        【讨论】:

                          猜你喜欢
                          • 2017-11-09
                          • 2022-01-01
                          • 1970-01-01
                          • 1970-01-01
                          • 2016-08-02
                          • 1970-01-01
                          • 1970-01-01
                          • 2016-10-09
                          • 1970-01-01
                          相关资源
                          最近更新 更多