2015-01-07 6 views
1

Как отключить push-уведомления в новом Parse Android SDK?Parse Android отключить Push-уведомления

У меня есть предпочтение в моем приложении, которое предназначено для отключения уведомления. Поэтому, когда пользователь отключает настройку, я хочу отключить уведомления (отключить услугу push) для приложения. Например, в старом SDK вам просто нужно вызвать PushService.setDefaultCallback (null), а служба push остановлена.

Это, как я подписаться на уведомления толчок в моем классе Application:

@Override public void onCreate() { 
    super.onCreate(); 

    // Initialize the Parse SDK. 
    Parse.initialize(this, BuildConfig.PARSE_APP_ID, BuildConfig.PARSE_CLIENT_KEY); 

    // Register for Push Notifications ? 
    SharedPreferences sharedPref = PreferenceManager.getDefaultSharedPreferences(this); 
    boolean notificationsEnabled = 
      sharedPref.getBoolean(SettingsFragment.PREF_KEY_ENABLE_NOTIFICATIONS, true); 
    if(notificationsEnabled){ 
     ParsePush.subscribeInBackground("", new SaveCallback() { 
      @Override 
      public void done(ParseException e) { 
       if (e == null) { 
        Timber.d("successfully subscribed to the broadcast channel."); 
       } else { 
        Timber.e(e, "failed to subscribe for push"); 
       } 
      } 
     }); 
    } 
} 

На моих предпочтениях фрагментировать это, как я слушаю на изменение предпочтений:

@Override 
public void onSharedPreferenceChanged(SharedPreferences sharedPreferences, String key) { 
    if(key.equals(PREF_KEY_ENABLE_NOTIFICATIONS)){ 
     boolean notificationsEnabled = sharedPreferences.getBoolean(PREF_KEY_ENABLE_NOTIFICATIONS, true); 
     if(notificationsEnabled){ 
      ParsePush.subscribeInBackground("", new SaveCallback() { 
       @Override 
       public void done(ParseException e) { 
        if (e == null) { 
         Timber.d("successfully subscribed to the broadcast channel."); 
        } else { 
         Timber.e(e, "failed to subscribe for push"); 
        } 
       } 
      }); 
     } 
     else { 
      ParsePush.unsubscribeInBackground("", new SaveCallback() { 
       @Override 
       public void done(ParseException e) { 
        if (e == null) { 
         Timber.d("successfully un-subscribed from the broadcast channel."); 
        } else { 
         Timber.e(e, "failed to un-subscribe for push"); 
        } 
       } 
      }); 
     } 
    } 
} 
+0

проверить мой ответ. –

+0

@PsyDuck Я добавил пример кода на вопрос выше – Gustavo

ответ

4

Включение/отключение приемников не помогает также. Как ни странно, после повторного подключения приложение не может получать нажатия. Лучший способ, которым я достиг:

public class Receiver extends ParsePushBroadcastReceiver { 

    @Override 
    protected void onPushOpen(Context context, Intent intent) {...} 

    @Override 
    protected void onPushReceive(Context context, Intent intent) { 
     if (Esperandro.getPreferences(Prefs.class, context).show_notifications()) { //your shared preferences 
      super.onPushReceive(context, intent); 
     } 
    } 
} 
1

Просто зайдите на Parse.com и откройте страницу настроек приложения. Затем откройте вкладку «Push» и переключите «Client push enabled?». More Info Here.

Смотреть изображение для ясности:

enter image description here

+0

, который не сработал для меня – Gustavo

+0

Как это может не работать? Вы хотите отключить push, и именно так вы это делаете. –

+0

Итак, вы говорите, если я вызываю ParsePush.subscribeInBackground (""), чтобы подписаться на широковещательный канал, а затем разрешить клиенту нажимать на настройки, а затем вызывать ParsePush.unsubscribeInBackground (""). Я не должен получать будущие уведомления – Gustavo

2

Мне было намного проще подписаться на канал по умолчанию. Затем, если они отключат push notifications, вы можете просто удалить это из списка каналов. Это также делает его немного приятнее, когда вы запускаете push-уведомления, чтобы перейти к фактическому каналу, а не только ко всем.

ParseInstallation installation = ParseInstallation.getCurrentInstallation(); 
List<String> channels = PushNotificationManger.getDefaultChannels(); 
installation.put("channels", channels); 
installation.saveInBackground();