0

DB 항목이 변경 될 때마다 사용자 푸시 알림을 보내는 응용 프로그램이 있습니다. 그러나 문제는 알림을 보낼 때마다 알림 서랍에 새 항목을 만드는 것입니다. 하지만 내가하고 싶은 일은 이러한 알림을 쌓거나 그룹화하여 "9 개의 항목이 변경되었습니다"와 같은 항목이 하나만있을 것입니다.Ionic 3 phonegap push plugin firebase 알림을 스택하는 방법

Ionic 3, phonegap push plugin 및 firebase로 어떻게 할 수 있습니까?

const options: PushOptions = { 
     android: { 
      senderID: SENDER_ID 
     }, 
     ios: { 
      alert: 'true', 
      badge: true, 
      sound: 'false' 
     }, 
     windows: {}, 
     browser: { 
      pushServiceURL: 'http://push.api.phonegap.com/v1/push' 
     } 
     }, 
     pushObject: PushObject = this.push.init(options); 

    pushObject.on('registration').subscribe((registration: any) => { 
     this.afDatabase.list('/users') 
     .update(`/${user.uid}/devices/${registration.registrationId}/`, {isKept: true}); 
    }); 
    pushObject.on('error').subscribe(error => alert('Error with Push plugin' + JSON.stringify(error))); 

그리고 내가이 중포 기지 기능에 있습니다 : : 드디어 발견했습니다

const functions = require('firebase-functions'); 
const admin = require('firebase-admin'); 
const _ = require('lodash'); 

admin.initializeApp(functions.config().firebase); 

exports.onItemsListItemAdd = functions.database.ref('/items-list/{item_id}').onCreate(event => { 
    let payload = { 
     notification: { 
      title: 'Items list', 
      body: `Added: ${event.data.val().itemName} [${event.data.val().itemNumber}]`, 
      icon: 'default' 
     } 
    }; 

    return sendToDevices(payload); 
}); 

exports.onItemsListItemUpdate = functions.database.ref('/items-list/{item_id}').onUpdate(event => { 
    let payload = { 
     notification: { 
      title: 'Items list', 
      body: `Updated: ${event.data.val().itemName} [${event.data.val().itemNumber}]`, 
      icon: 'default' 
     } 
    }; 

    return sendToDevices(payload); 
}); 

exports.onItemsListItemDelete = functions.database.ref('/items-list/{item_id}').onDelete(event => { 
    let payload = { 
     notification: { 
      title: 'Items list', 
      body: `Deleted: ${event.data.previous.val().itemName} [${event.data.previous.val().itemNumber}]`, 
      icon: 'default' 
     } 
    }; 

    return sendToDevices(payload); 
}); 

function sendToDevices(payload) { 
    const deviceTokens = admin.database().ref('/users').once('value'); 

    return deviceTokens.then(allTokens => { 
     if (allTokens.val()) { 
      // Listing all tokens. 
      const tokens = _(allTokens.val()) 
       .mapValues(user => user.devices) 
       .values() 
       .map(device => Object.keys(device)) 
       .flatten() 
       .value(); 

      // 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) => { 
        const error = result.error; 
        if (error) { 
         console.error('Failure sending notification to', tokens[index], error); 
         // Cleanup the tokens who are not registered anymore. 
         if (error.code === 'messaging/invalid-registration-token' || 
          error.code === 'messaging/registration-token-not-registered') { 
          tokensToRemove.push(allTokens.ref.child(tokens[index]).remove()); 
         } 
        } 
       }); 
       return Promise.all(tokensToRemove); 
      }); 
     } 
    }); 
} 

답변

0

공식 문서와 experimnting의 약간을 검토 한 다음

내 현재 코드입니다 대답. 기본적으로 내가해야 할 일은 "알림"필드를 푸시 알림의 "데이터"필드로 바꾸고 다른 속성을 지정하는 것입니다. 해당 코드는 "알림"필드를 완전히 제거한 경우에만 작동합니다.

"스타일"속성은 이온을 만드는
let payload = { 
    data: { 
     title: 'Items list', 
     message: `Added: ${event.data.val().itemName} [${event.data.val().itemNumber}]`, 
     style: 'inbox', 
     summaryText: 'There are %n% notifications' 
    } 
}; 

는 통지를 스택 :

다음은 현재 페이로드입니다.

"스타일"속성을 사용하지 않으면 각 새 알림이 이전 알림을 대체합니다.

"데이터"대신 "알림"속성을 사용하면 각 푸시의 알림 음영에 새 알림이 생성됩니다.

메시지가 아직 도착하지 않은 경우 사용자에게 최신 메시지 만 표시하도록 요청에 collapseKey 옵션을 추가 할 수 있습니다. 다음과 같이 할 수 있습니다.

const options = { 
    collapseKey: 'sl_update' 
}; 

admin.messaging().sendToDevice(tokens, payload, options); 

이 정보가 도움이되기를 바랍니다.

자세한 내용은 https://github.com/phonegap/phonegap-plugin-push/blob/master/docs/PAYLOAD.md#stacking