有时一个信号 returns UserId 为 null
sometimes One signal returns UserId as null
在我的应用程序中,我通过一个 signal.but 有时一个信号 returns 空用户 ID 向用户发送通知...那时我面临向 [=20= 发送通知的问题] 我能解决吗。如果有人有解决办法,请与我分享
这是我生成用户 ID 的代码
OneSignal.idsAvailable(new OneSignal.IdsAvailableHandler() {
@Override
public void idsAvailable(String userId, String registrationId) {
Log.d("test","key is"+notification_key);
notification_key=userId;
}
});
我正在 MyApplication.class
中像这样初始化一个信号
OneSignal.startInit(this)
.inFocusDisplaying(OneSignal.OSInFocusDisplayOption.Notification)
.unsubscribeWhenNotificationsAreDisabled(true)
.init();
您使用的方法现已弃用。
改用 getPermissionSubscriptionState
、addPermissionObserver
或 add SubscriptionObserver
这是一个示例 -
OSPermissionSubscriptionState status = OneSignal.getPermissionSubscriptionState();
boolean isEnabled = status.getPermissionStatus().getEnabled();
boolean isSubscribed = status.getSubscriptionStatus().getSubscribed();
boolean subscriptionSetting = status.getSubscriptionStatus().getUserSubscriptionSetting();
String userID = status.getSubscriptionStatus().getUserId();
更多参考,查看this
这是 Github
上的 issue
当用户接受推送通知权限时,他们不会立即拥有用户 ID。当用户接受推送通知权限时,SDK 会发出一个 HTTP 请求以向 OneSignal 的服务器注册。该请求完成后,用户订阅状态将更新为用户 ID。
我建议使用 OSSubscriptionStateObserver 协议以便在订阅状态发生变化时得到更新。您可以在那里访问用户 ID。
public class MainActivity extends Activity implements OSSubscriptionObserver {
protected void onCreate(Bundle savedInstanceState) {
OneSignal.addSubscriptionObserver(this);
}
public void onOSSubscriptionChanged(OSSubscriptionStateChanges stateChanges) {
if (!stateChanges.getFrom().isSubscribed() &&
stateChanges.getTo().isSubscribed()) {
new AlertDialog.Builder(this)
.setMessage("You've successfully subscribed to push notifications!")
.show();
// get player ID
stateChanges.getTo().getUserId();
}
Log.i("Debug", "onOSPermissionChanged: " + stateChanges);
}
}
From Onesignal library 4+ version there is a small tweak to this method.
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);
}
}
/*
Example Logcat entry - User disabling notifications then returning to your app.
onOSSubscriptionChanged:
{"from":{"pushToken":"APA91bG9cmZ262s5gJhr8jvbg1q7aiviEC6lcOCgAQliEzHKO3eOdX5cm7IQqMSWfy8Od7Ol3jSjFfvCfeO2UYUpanJCURJ8RdhgEuV8grYxOCwPNJr5GoqcWTQOaL9u-qE2PQcFlv4K","userSubscriptionSetting":true,"subscribed":false},
"to": {"userId":"22712a53-9b5c-4eab-a828-f18f81167fef","pushToken":"APA91bG9cmZ262s5gJhr8jvbg1q7aiviEC6lcOCgAQliEzHKO3eOdX5cm7IQqMSWfy8Od7Ol3jSjFfvCfeO2UYUpanJCURJ8RdhgEuV8grYxOCwPNJr5GoqcWTQOaL9u-qE2PQcFlv4K","userSubscriptionSetting":true,"subscribed":true}}
onOSSubscriptionChanged 的问题在于,只有当 OneSignal 订阅的状态发生变化时才会调用它(Enabled/Disabled)- 正如名称所说 -.
因此,获取 userId/playerId 的更好方法是从 getSubscriptionStatus 的 JSONObject 中获取它。
private String getOneSignalUserID() {
JSONObject subscriptionStatusJsonObject = OneSignal.getPermissionSubscriptionState().getSubscriptionStatus().toJSONObject();
String userId = "";
try {
userId = subscriptionStatusJsonObject.getString("userId");
} catch (JSONException e) {
e.printStackTrace();
}
return userId;
}
在我的应用程序中,我通过一个 signal.but 有时一个信号 returns 空用户 ID 向用户发送通知...那时我面临向 [=20= 发送通知的问题] 我能解决吗。如果有人有解决办法,请与我分享
这是我生成用户 ID 的代码
OneSignal.idsAvailable(new OneSignal.IdsAvailableHandler() {
@Override
public void idsAvailable(String userId, String registrationId) {
Log.d("test","key is"+notification_key);
notification_key=userId;
}
});
我正在 MyApplication.class
中像这样初始化一个信号OneSignal.startInit(this)
.inFocusDisplaying(OneSignal.OSInFocusDisplayOption.Notification)
.unsubscribeWhenNotificationsAreDisabled(true)
.init();
您使用的方法现已弃用。
改用 getPermissionSubscriptionState
、addPermissionObserver
或 add SubscriptionObserver
这是一个示例 -
OSPermissionSubscriptionState status = OneSignal.getPermissionSubscriptionState();
boolean isEnabled = status.getPermissionStatus().getEnabled();
boolean isSubscribed = status.getSubscriptionStatus().getSubscribed();
boolean subscriptionSetting = status.getSubscriptionStatus().getUserSubscriptionSetting();
String userID = status.getSubscriptionStatus().getUserId();
更多参考,查看this
这是 Github
上的 issue当用户接受推送通知权限时,他们不会立即拥有用户 ID。当用户接受推送通知权限时,SDK 会发出一个 HTTP 请求以向 OneSignal 的服务器注册。该请求完成后,用户订阅状态将更新为用户 ID。
我建议使用 OSSubscriptionStateObserver 协议以便在订阅状态发生变化时得到更新。您可以在那里访问用户 ID。
public class MainActivity extends Activity implements OSSubscriptionObserver {
protected void onCreate(Bundle savedInstanceState) {
OneSignal.addSubscriptionObserver(this);
}
public void onOSSubscriptionChanged(OSSubscriptionStateChanges stateChanges) {
if (!stateChanges.getFrom().isSubscribed() &&
stateChanges.getTo().isSubscribed()) {
new AlertDialog.Builder(this)
.setMessage("You've successfully subscribed to push notifications!")
.show();
// get player ID
stateChanges.getTo().getUserId();
}
Log.i("Debug", "onOSPermissionChanged: " + stateChanges);
}
}
From Onesignal library 4+ version there is a small tweak to this method.
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);
}
}
/*
Example Logcat entry - User disabling notifications then returning to your app.
onOSSubscriptionChanged:
{"from":{"pushToken":"APA91bG9cmZ262s5gJhr8jvbg1q7aiviEC6lcOCgAQliEzHKO3eOdX5cm7IQqMSWfy8Od7Ol3jSjFfvCfeO2UYUpanJCURJ8RdhgEuV8grYxOCwPNJr5GoqcWTQOaL9u-qE2PQcFlv4K","userSubscriptionSetting":true,"subscribed":false},
"to": {"userId":"22712a53-9b5c-4eab-a828-f18f81167fef","pushToken":"APA91bG9cmZ262s5gJhr8jvbg1q7aiviEC6lcOCgAQliEzHKO3eOdX5cm7IQqMSWfy8Od7Ol3jSjFfvCfeO2UYUpanJCURJ8RdhgEuV8grYxOCwPNJr5GoqcWTQOaL9u-qE2PQcFlv4K","userSubscriptionSetting":true,"subscribed":true}}
onOSSubscriptionChanged 的问题在于,只有当 OneSignal 订阅的状态发生变化时才会调用它(Enabled/Disabled)- 正如名称所说 -.
因此,获取 userId/playerId 的更好方法是从 getSubscriptionStatus 的 JSONObject 中获取它。
private String getOneSignalUserID() {
JSONObject subscriptionStatusJsonObject = OneSignal.getPermissionSubscriptionState().getSubscriptionStatus().toJSONObject();
String userId = "";
try {
userId = subscriptionStatusJsonObject.getString("userId");
} catch (JSONException e) {
e.printStackTrace();
}
return userId;
}