Ionic V3 - эмулятор Android Push-уведомления не имеют звука - PullRequest
0 голосов
/ 21 мая 2019

Я могу получить уведомление для отображения, но мне не удалось получить звук для воспроизведения с ним.

Я использую Firebase для отправки уведомлений вручную (я убедился, что я включилзвук на консоли)

Вот плагины, которые я использую для обработки push-уведомлений.

https://ionicframework.com/docs/v3/native/push/ https://ionicframework.com/docs/v3/native/firebase/

Я не тестировалв IOS, поскольку я не могу получить доступ к порталу разработчика и изменить необходимые настройки.

Я что-то пропустил?За исключением звука, все работает как положено.

Вот мой провайдер FCM

constructor(
    public http: HttpClient,
    public firebaseNative: Firebase,
    public afs: AngularFirestore,
    private platform: Platform
  ) { }

  async getToken() {
    let token = await this.firebaseNative.getToken();

    if (this.platform.is('ios')) {
      const perm = await this.firebaseNative.grantPermission();
    }

    return await this.saveToken(token);
  }

 async saveToken(token: string) {
    if (!token) return;

    // alert(token)
    //save to firebase
    const devicesRef = this.afs.collection('devices');
    const docData = {
      token,
      userId: 'testUser'
    };
    return await devicesRef.doc(token).set(docData);
    //save to php - todo
  }

  listenToNotifications(): Observable<any> {
    return this.firebaseNative.onNotificationOpen();    
  }
}

Вот мой код, использованный в моем компоненте


readonly projectNotificationName: string = "ProjectPushNotifications";
  constructor(
    private platform: Platform,
    private statusBar: StatusBar,
    private splashScreen: SplashScreen,
    private fcm: FcmProvider,
    private push: Push,
    private toastCtrl: ToastController) {
    this.platform.ready().then(() => {
      if (this.platform.is('android')) {
        this.handleAndroidNotificationChannel();
      } else {
        this.initiateConfig();
      }
    });
  }
async handleAndroidNotificationChannel() {
    let created: boolean = false;
    try {
      // var res = await this.push.hasPermission();
      //get token and save
      await this.fcm.getToken();

      var channels = await this.push.listChannels();
      created = channels.findIndex(c => c.id == this.projectNotificationName) !== -1;

      // Create a channel (Android O and above). You'll need to provide the id, description and importance properties.
      if (!created) {
        let channel: Channel = {
          id: this.projectNotificationName,
          description: "New project notifications",
          // The importance property goes from 1 = Lowest, 2 = Low, 3 = Normal, 4 = High and 5 = Highest.
          importance: 4,
        }
        await this.push.createChannel(channel);
      }

      this.initiateConfig();
      // to initialize push notifications
    } catch (error) {
      alert(error);
    }
  }


async initiateConfig() {

    var channels = await this.push.listChannels();
    //test what chnnels exist - debug reasons only
    channels.forEach(c => alert(JSON.stringify(c)))

    const options: PushOptions = {
      android: {
        forceShow: true,
        vibrate: true,
        sound: true
      },
      ios: {
        alert: 'true',
        badge: true,
        sound: 'false'
      },
      windows: {},
      browser: {
        // pushServiceURL: 'http://push.api.phonegap.com/v1/push'
      }
    };

    const pushObject: PushObject = this.push.init(options);
    this.subscribeToPushNotifications();
}

 subscribeToPushNotifications() {
    this.fcm.listenToNotifications().pipe(
      tap(msg => {
        const toast = this.toastCtrl.create({
          position: 'top',
          message: msg.body,
          duration: 3000
        })
        toast.present();
      })
    ).subscribe();
  }

Вот чтоНастройки уведомлений эмулятора выглядят как для созданного канала уведомлений Android emulator notification channel evidence

...