我们的应用程序之前使用过Parse.com,现在我们正在实施OneSignal。不幸的是,我们丢失了Parse的用户数据,但更愿意不打扰已经选择退出的用户。
通过简单的切换完成退出并保存状态。我的想法是读取该状态,然后运行OneSignal.setSubscription(false);当应用程序打开并且用户注册OneSignal(或已经注册)时,由于之前保存的切换,他将被取消订阅。
但是,OneSignal在服务器端没有做任何事情,即使调试if语句中的代码在我的手机上从Android Studio启动应用程序时也会执行。
OneSignal注册我的设备并将订阅设置为是,但如果执行以下代码,则不会取消订阅:
SharedPreferences prefs = getSharedPreferences("prefpush", Context.MODE_PRIVATE);
Boolean checkSub = prefs.getBoolean("prefpush", false);
if(!checkSub) {
OneSignal.setSubscription(false);
}
这部分也会返回" false"在调试时,即使我的设备可见,订阅并可以接收通知:
status.getSubscriptionStatus().getSubscribed();
初始化推送通知的OneSignal部分:
OneSignal.startInit(this)
.setNotificationOpenedHandler(new ExampleNotificationOpenedHandler())
.setNotificationReceivedHandler( new ExampleNotificationReceivedHandler() )
.init();
我会实现另一种情况,即检查用户是否在第一时间订阅但在应用程序内部禁用了通知(检查切换是否已禁用),因此OneSignal.setSubscription(false);不是经常执行的。但是我首先无法让它在一个更简单的场景中工作。
答案 0 :(得分:0)
除了通过切换之外,我无法订阅或取消订阅用户(在启动应用时无法使其正常工作)
我的另一种解决方案是,如果订阅了用户但在设置中关闭了通知,则只会阻止通知显示。这可以使用Onesignals NotificationExtenderService
完成public class NotificationCheck extends NotificationExtenderService {
@Override
protected boolean onNotificationProcessing(OSNotificationReceivedResult receivedResult) {
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(getApplicationContext());
if (prefs.getBoolean("prefpush", true)) {
return false;
} else { return true; }
}