34

I am developing a restaurant app. I am using One Signal in my app to send notifications. Here while I place the order I need to send the unique Id of the one signal for a specific user for getting notification of "Your Order is placed successfully... It is in Progress.Please wait". For that I need the user's One Signal user id. How can I get it? I am newbie to One Signal. Please help me.

Brian
  • 6,910
  • 8
  • 44
  • 82
Parama Sudha
  • 2,583
  • 3
  • 29
  • 48

16 Answers16

57

Got the unique Id of OneSignal by using the following code which is in official site of 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);

        }
    });

Refer:

Getting code in Official Site

This Above Code is Deprecated. Please use the below code.

String UUID = OneSignal.getPermissionSubscriptionState().getSubscriptionStatus().getUserId()
Amaresh Jana
  • 732
  • 11
  • 22
Parama Sudha
  • 2,583
  • 3
  • 29
  • 48
17

The above solution for android is deprecated Use:

OSPermissionSubscriptionState status = OneSignal.getPermissionSubscriptionState();
status.getSubscriptionStatus().getUserId();
Amjed Baig
  • 410
  • 5
  • 9
14

Android Java

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

Android Kotlin

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

iOS OneSignal Version 3.6.0

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

iOS Old OneSignal Version

let status: OSPermissionSubscriptionState = OneSignal.getPermissionSubscriptionState()
    if let id = status.subscriptionStatus.userId {
    oneSignalPlayer_ID = id
    print("\nOneSignal UserId:", id)
}
SwiftiSwift
  • 7,528
  • 9
  • 56
  • 96
Abdul Basit Rishi
  • 2,268
  • 24
  • 30
  • 2
    This solution works perfectly. Other solutions (including the accepted one) might be deprecated. They didn't work on Android Studio/Java. – mdikici Nov 07 '21 at 16:59
  • What method we can use to get the use id from onesignal in web view app..? https://stackoverflow.com/questions/72656494/how-to-fetch-user-id-from-onesignal-using-javascript – Ambiguous Turtle Jun 24 '22 at 12:21
4

For android, you can get the userIDs aka playerIDs starting in the 3.5.0+ version of the native Android SDK using the getPermissionSubscriptionState method and addSubscriptionObserver.

For more on using getPermissionSubscriptionState see: https://documentation.onesignal.com/docs/android-native-sdk#section--getpermissionsubscriptionstate-

For adding subscription observers see: https://documentation.onesignal.com/docs/android-native-sdk#section--addsubscriptionobserver-

There is a Native Android example on Github: https://github.com/OneSignal/OneSignal-Android-SDK

It is in the Examples folder labeled AndroidStudio

For iOS, you can get the playerIDs starting in the 2.5.0 version of the native iOS SDK using the getPermissionSubscriptionState method and addSubscriptionObserver.

For more on using getPermissionSubscriptionState see: https://documentation.onesignal.com/docs/ios-native-sdk#section--getpermissionsubscriptionstate-

For adding subscription observers see: https://documentation.onesignal.com/docs/ios-native-sdk#section--addsubscriptionobserver-

There is an iOS Example project in Swift on Github that might be of some assistance: https://github.com/OneSignal/OneSignal-iOS-SDK/tree/master/Examples

JonF
  • 554
  • 2
  • 6
3

for iOS:

let status: OSPermissionSubscriptionState = OneSignal.getPermissionSubscriptionState()
    if let id = status.subscriptionStatus.userId {
    oneSignalPlayer_ID = id
    print("\nOneSignal UserId:", id)
}
Yaroslav Dukal
  • 3,894
  • 29
  • 36
1

Complete solution:

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();
    }
}
Erçin Dedeoğlu
  • 4,950
  • 4
  • 49
  • 69
  • 1
    this line returns null OneSignal.getPermissionSubscriptionState().getSubscriptionStatus().getUserId(); – Sevket Jul 28 '20 at 07:42
  • What method we can use to get UserID from OneSignal in WebView? https://stackoverflow.com/questions/72656494/how-to-fetch-user-id-from-onesignal-using-javascript – Ambiguous Turtle Jun 24 '22 at 12:23
1

OneSignal 4.1 Android String playerId = OneSignal.getDeviceState().getUserId(); to get player id

logancodemaker
  • 582
  • 3
  • 14
  • What method we can use to get UserID from OneSignal in WebView? https://stackoverflow.com/questions/72656494/how-to-fetch-user-id-from-onesignal-using-javascript – Ambiguous Turtle Jun 24 '22 at 12:23
1

For iOS 15 and as of OneSignal iOS SDK version 3.7.0

if let userId = OneSignal.getDeviceState().userId {
    print("OneSignal User ID: \(userId)")
}
Lawrence Gimenez
  • 2,662
  • 4
  • 34
  • 52
0

@Lakshmi Reddy

in iOS, you can do like below:

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);
Julfikar
  • 1,353
  • 2
  • 18
  • 35
0
String UUID = OneSignal.getPermissionSubscriptionState().getSubscriptionStatus().getUserId()

This returns null unless the SubscriptionStatus is changed. Please follow the link below to know how you can get OneSignal userId from getSubscriptionStatus' JSONObject.

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

Syed Arsalan Kazmi
  • 949
  • 1
  • 11
  • 17
0

If you are using OneSignal version 2.6.1 and above:

var userId = OneSignal.shared.getPermissionSubscriptionState().then((userObject) => userObject.subscriptionStatus.userId).toString();
inspiredMichael
  • 370
  • 4
  • 9
0

Add this to your Application Class

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

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

}

ItSNeverLate
  • 533
  • 7
  • 8
  • What method we can use to get UserID from OneSignal in WebView? https://stackoverflow.com/questions/72656494/how-to-fetch-user-id-from-onesignal-using-javascript – Ambiguous Turtle Jun 24 '22 at 12:23
0

In Kotlin use below code.

val oneSignalUserID = OneSignal.getDeviceState()!!.userId
4b0
  • 21,981
  • 30
  • 95
  • 142
  • @4b0 What method we can use to get UserID from OneSignal in WebView? https://stackoverflow.com/questions/72656494/how-to-fetch-user-id-from-onesignal-using-javascript – Ambiguous Turtle Jun 24 '22 at 12:22
0

Use this code to get player 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);
  }
}
0

Try this code to get the player id.

OneSignal Version - com.onesignal:OneSignal:4.7.4

import android.app.Activity;
import android.os.Bundle;
import android.util.Log;
import androidx.annotation.Nullable;
import com.onesignal.OSSubscriptionObserver;
import com.onesignal.OSSubscriptionStateChanges;
import com.onesignal.OneSignal;

public class OneSignal_PlayerID extends Activity implement OSSubscriptionObserver {

private static String TAG = "OneSignal_PlayerID";
private static final String ONESIGNAL_APP_ID = "xxx-xxx-xxx-xxx";

@Override
protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    OneSignal.initWithContext(this);
    OneSignal.setAppId(ONESIGNAL_APP_ID);
    OneSignal.addSubscriptionObserver(this);

}

@Override
public void onOSSubscriptionChanged(OSSubscriptionStateChanges stateChanges) {
    if (stateChanges.getTo().isSubscribed()){
        String playerId = stateChanges.getTo().getUserId();
        if (playerId!=null){
            Log.i(TAG,"OneSignal Player ID : "+playerId);
        }
     }
   }
}
  • 1
    While this code may answer the question, providing additional context regarding how and/or why it solves the problem would improve the answer's long-term value. – Abhishek Dutt Jun 27 '22 at 09:57
-1

All of the above did not work for me in android. from the latest version, I got this solution.

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

for anyone like me can use the above code to get a unique UserId.