osben
1/9/2019 - 1:38 PM

ionic 3 subscribed onesignal

ionic 3 subscribed onesignal

import {OneSignal, OSPermissionSubscriptionState} from "@ionic-native/onesignal";
import {OpenNativeSettings} from '@ionic-native/open-native-settings';
......
  private subscribed(): Promise<boolean> {
    return new Promise((resolve, reject) => {
      if (!this.platform.is('cordova')) {
        resolve(true);
        return;
      }
      // Запрашиваем состоние доступа к уведомлениям
      this.onesignal.getPermissionSubscriptionState().then((status: OSPermissionSubscriptionState) => {

        console.log('getPermissionSubscriptionState' + JSON.stringify(status));

        // все тип топ
        if (status.subscriptionStatus.subscribed) {
          resolve(true);
          return;
        }

        // не подписан на уровне onesignal
        if ((status.permissionStatus.status === 2 || status.permissionStatus.state === 1) && !status.subscriptionStatus.userSubscriptionSetting) {
          this.onesignal.setSubscription(true);
          resolve(true);
          return
        }

        // нету разрешения на уровне системы
        //if(status.permissionStatus.status === 1 || status.permissionStatus.state === 2) { }
        // Вызываем свой алерт с возможностью перейти в настройки
        this.showConfirmationPermissionSubscription()
          .then(() => {

            let openSettings = new Promise((resolve, reject) => {
              reject();
            });

            if (this.platform.is('android')) {
              openSettings = this.openNativeSettings.open('notification_id');
            } else if (this.platform.is('ios')) {
              openSettings = this.openNativeSettings.open('application_details')
            }
            // Подписуемся на изменения настроек разрешения
            this.onesignal.addPermissionObserver().subscribe((stateChanges) => {
              console.log('addPermissionObserver' + JSON.stringify(stateChanges));

              if (stateChanges.to.status === 2 || stateChanges.to.state === 1) {
                if (!status.subscriptionStatus.userSubscriptionSetting) {
                  this.onesignal.setSubscription(true);
                }
                resolve(true);
              } else {
                resolve(false);
              }
            });
            openSettings.then(() => {
            });
          });
      });
    });

  }