Отправка push-уведомлений с помощью Firebase и OneSignal - PullRequest
0 голосов
/ 30 апреля 2018

Не уверен, если это возможно, но у меня есть существующее приложение Ionic 3, которое использует Firebase в качестве бэкэнда. Может быть, это только я, я не могу интегрировать логин Google, логин Facebook и push-уведомления в одном приложении. Уже несколько дней пытаюсь.

Мне удалось установить OneSignal и отправить push-уведомления на устройство Android, но я хочу отправлять их программно, используя токены, которые сохраняются для каждого устройства, а не из панели мониторинга OneSignal.

Это то, что я использую в облачных функциях Firebase для отправки уведомлений. Можно ли его изменить, чтобы отправить уведомление в OneSignal, а затем на каждое устройство?

`function sendFcm(userID, eventSnapshot, eventID) {

  const getDeviceTokensPromise = admin.database().ref(`/fcmTokens/${userID}/`).once('value');

  return Promise.all([getDeviceTokensPromise]).then(result => {

    const tokensSnapshot = result[0];

    const payload = {
      "notification": {
        "title": "Your invitation has arrived",
        "body": eventSnapshot.name,
        "sound": "default",
        // "click_action": "FCM_PLUGIN_ACTIVITY",
        "icon": "fcm_push_icon"
      },
      "data": {
        "eventId": eventID,
        "uid": userID,
        "eventObj": JSON.stringify(eventSnapshot),
        "notificationType": "newEventNotification"
      }
    };

    const tokens = Object.keys(tokensSnapshot.val());

    console.log(tokens);

    // Send notifications to all tokens.
    return admin.messaging().sendToDevice(tokens, payload).then(response => {
      // For each message check if there was an error.
      const tokensToRemove = [];
      response.results.forEach((result, index) => {
        console.log(tokens[index]);
        const error = result.error;
        if (error) {
          console.error('Failure sending notification to', tokens[index], error);
          // Cleanup the tokens which are not registered anymore.
          if (error.code === 'messaging/invalid-registration-token' ||
            error.code === 'messaging/registration-token-not-registered') {
            tokensToRemove.push(tokensSnapshot.ref.child(tokens[index]).remove());
          }
        }
      });
      return Promise.all(tokensToRemove);
    });
  })
}`

1 Ответ

0 голосов
/ 30 апреля 2018

Немного поиска я нашел API OneSignal. Похоже, мне просто нужно сохранить идентификатор игрока и отправить его или несколько в массиве на onesignal.com/api/v1/notifications. Подробнее здесь: https://documentation.onesignal.com/reference#section-send-based-on-onesignal-playerids-create-notification

...