应用程序启动时,OneSignal在特定条件下取消订阅用户

时间:2017-11-20 18:54:23

标签: android onesignal

我们的应用程序之前使用过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);不是经常执行的。但是我首先无法让它在一个更简单的场景中工作。

1 个答案:

答案 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; }
}