30

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

4

15 回答 15

55

通过使用 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);

        }
    });

参考:

在官网获取代码

不推荐使用上述代码。请使用以下代码。

String UUID = OneSignal.getPermissionSubscriptionState().getSubscriptionStatus().getUserId()
于 2016-04-02T07:17:24.820 回答
17

不推荐使用上述针对 android 的解决方案使用:

OSPermissionSubscriptionState status = OneSignal.getPermissionSubscriptionState();
status.getSubscriptionStatus().getUserId();
于 2017-11-21T17:56:03.227 回答
7

安卓Java

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

安卓科特林

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)
}
于 2021-07-01T13:25:29.963 回答
4

对于 android,您可以使用 getPermissionSubscriptionState 方法和 addSubscriptionObserver 从原生 Android SDK 的 3.5.0+ 版本开始获取用户 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

于 2018-01-11T02:09:13.337 回答
3

对于iOS

let status: OSPermissionSubscriptionState = OneSignal.getPermissionSubscriptionState()
    if let id = status.subscriptionStatus.userId {
    oneSignalPlayer_ID = id
    print("\nOneSignal UserId:", id)
}
于 2017-06-28T03:15:39.507 回答
1

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

于 2021-02-11T13:33:56.370 回答
0

对于 iOS 15 和 OneSignal iOS SDK 版本 3.7.0

if let userId = OneSignal.getDeviceState().userId {
    print("OneSignal User ID: \(userId)")
}
于 2021-09-07T10:03:58.270 回答
0

在 Kotlin 中使用下面的代码。

val oneSignalUserID = OneSignal.getDeviceState()!!.userId
于 2021-06-02T12:56:47.087 回答
0

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

var userId = OneSignal.shared.getPermissionSubscriptionState().then((userObject) => userObject.subscriptionStatus.userId).toString();
于 2020-12-19T13:50:33.830 回答
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);
  }
}
于 2022-02-09T17:05:35.280 回答
0

完整的解决方案:

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();
    }
}
于 2020-05-08T10:12:39.873 回答
0
String UUID = OneSignal.getPermissionSubscriptionState().getSubscriptionStatus().getUserId()

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

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

于 2020-12-02T11:34:43.880 回答
0

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

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

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

}

于 2021-03-16T06:09:33.243 回答
0

@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);
于 2017-09-06T03:49:08.150 回答
-1

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

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

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

于 2021-01-16T10:52:57.183 回答