Skip to content

Instantly share code, notes, and snippets.

@osben
Created January 9, 2019 13:38
Show Gist options
  • Save osben/065682d8710fae7f7ff957a68c92d91f to your computer and use it in GitHub Desktop.
Save osben/065682d8710fae7f7ff957a68c92d91f to your computer and use it in GitHub Desktop.
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(() => {
});
});
});
});
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment