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

34

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

18个回答

57

使用OneSignal官网提供的以下代码获取唯一标识符。

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()

1
我曾尝试在iOS上实现这个,这篇文章解释了如何实现。在iOS中使用的是相同的逻辑。 - blackmoon
抱歉,我不知道 IOS ji @blackmoon 是什么意思。 - Parama Sudha
有关 iOS 的任何解决方案吗,@blackmon? - Lakshmi Reddy
6
以上的 Android 解决方案已经过时。 请使用以下代码:OSPermissionSubscriptionState status = OneSignal.getPermissionSubscriptionState(); status.getSubscriptionStatus().getUserId(); 该代码可用于获取用户订阅状态和用户 ID。 - Amjed Baig
2
不适用于他们的最新版本4.0.0。 :( - Syed Arsalan Kazmi
显示剩余2条评论

17

上述 Android 解决方案已被弃用。

请使用:

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

1
一行代码:OneSignal.getPermissionSubscriptionState().getSubscriptionStatus().getUserId() - Vahid Amiri
String UUID = OneSignal.getPermissionSubscriptionState().getSubscriptionStatus().getUserId() 它返回了null! :( - Syed Arsalan Kazmi
不适用于他们的最新版本4.0.0。 :( - Syed Arsalan Kazmi

14

安卓Java

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

安卓 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)
}

2
这个解决方案完美运作。其他的解决方案(包括被接受的那一个)可能已经过时,它们在Android Studio/Java上无法运行。 - mdikici
我们可以使用什么方法在 Web 视图应用程序中从 OneSignal 获取用户 ID?https://stackoverflow.com/questions/72656494/how-to-fetch-user-id-from-onesignal-using-javascript - Ambiguous Turtle

4
对于Android,您可以在本地Android SDK的3.5.0+版本中使用getPermissionSubscriptionState方法和addSubscriptionObserver获取用户ID,也称为playerIDs。
有关使用getPermissionSubscriptionState的更多信息,请参见:https://documentation.onesignal.com/docs/android-native-sdk#section--getpermissionsubscriptionstate- 有关添加订阅观察器的信息,请参见:https://documentation.onesignal.com/docs/android-native-sdk#section--addsubscriptionobserver- Github上有一个本地Android示例:https://github.com/OneSignal/OneSignal-Android-SDK,它位于标记为AndroidStudio的示例文件夹中。
对于iOS,您可以在本地iOS SDK的2.5.0版本中使用getPermissionSubscriptionState方法和addSubscriptionObserver获取playerIDs。

了解有关使用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


3

对于iOS

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

3
根据最新的文档,
可以按照以下方式获取订阅ID玩家ID
OneSignal.getUser().getPushSubscription().getId()

同样地,我们可以得到以下的令牌
OneSignal.getUser().getPushSubscription().getToken()

1

针对iOS 15和截至OneSignal iOS SDK版本3.7.0

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

我们可以使用什么方法在WebView中从OneSignal获取UserID?https://stackoverflow.com/questions/72656494/how-to-fetch-user-id-from-onesignal-using-javascript - Ambiguous Turtle
@HarishKolliparat,我真的不知道,这篇帖子已经五年了,很多事情都变了。 - Lawrence Gimenez

1

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


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

1
完整解决方案:
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();
    }
}

1
这行代码返回 null:OneSignal.getPermissionSubscriptionState().getSubscriptionStatus().getUserId(); - Sevket
我们可以使用什么方法在WebView中从OneSignal获取UserID?https://stackoverflow.com/questions/72656494/how-to-fetch-user-id-from-onesignal-using-javascript - Ambiguous Turtle

1

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