如何在 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?的主要内容,如果未能解决你的问题,请参考以下文章
在 Android 中点击 One Signal 推送通知时如何导航到特定页面?