在我的应用程序中,我通过一个信号向用户发送通知。但有时一个信号返回空的用户ID ...那个时候我遇到了向用户发送通知的问题,我该如何解决。如果有人有解决方案,请与我分享
这是我用于生成用户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();
答案 0 :(得分:3)
当用户接受推送通知权限时,他们不会立即拥有用户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().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", "onOSPermissionChanged: " + stateChanges);
}
}
答案 1 :(得分:0)
现在不推荐使用您使用的方法。
请改用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
答案 2 :(得分:0)
onOSSubscriptionChanged 的问题在于,仅在OneSignal订阅的状态更改(启用/禁用)时才被调用-顾名思义-。
因此,获取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;
}