使用Firebase累积徽章编号的任何方法?

时间:2017-09-20 07:15:37

标签: ios swift badge firebase-notifications

这个问题可能重复,但我想再问一遍,因为也许某些人知道如何解决它。

如我们所知,我们可以在使用badge推送通知之前设置Firebase。如果应用程序位于background并收到远程通知,则badge number 1将显示在App图标上。

然后我们在firebase上将徽章值设置为3并推送消息。 我希望图标上的徽章编号是4(1 + 3),而不是3.换句话说,如果应用程序处于后台模式并收到2条不同的消息,则应累积徽章编号。

有什么方法可以使用Firebase吗?任何一点都值得赞赏。

2 个答案:

答案 0 :(得分:1)

你是对的,这个问题在几次之前都有问过。您只能使用Firebase推送通知执行的操作是将badge count设置为在应用中显示。换句话说,您无法计算或维护徽章的数量。

您需要一台服务器才能在您的应用中存储徽章的当前计数。

您也可以使用silent push notification。 Apple的文档在这里:https://developer.apple.com/library/content/documentation/NetworkingInternet/Conceptual/RemoteNotificationsPG/CreatingtheNotificationPayload.html

  

当向用户的设备发送静默通知时,iOS会在后台唤醒您的应用并最多运行30秒。在iOS中,系统通过调用应用程序来提供静默通知:didReceiveRemoteNotification:fetchCompletionHandler:应用程序委托的方法。

答案 1 :(得分:0)

我和你一样,除了“在服务器上做”之外,我看不出直接的答案。

我的方式:

1)启动应用程序后,您需要将徽章(您可以随意调用的变量)设置为零到Firebase实时数据库中。另外设置application.applicationIconBadgeNumber = 0.以下是我在AppDelegate中的操作方法:

func applicationDidBecomeActive(_ application: UIApplication) {
    // Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface.
    application.applicationIconBadgeNumber = 0

    // Reset badge number to zero
    let userID = Auth.auth().currentUser?.uid

    let dbRef = Database.database().reference()
    dbRef.child("Users Info").child(userID!).updateChildValues(["badge":"0"], withCompletionBlock: { (err, ref) in
        if err != nil {
            print(err!)
            return
        }
    })

}

2)转到触发函数的index.js。

...
return admin.database().ref('/Users Info/' + owner).once('value', snapshot => {

    var ownerValue = snapshot.val();

    var badgeNumber = parseInt(ownerValue.badge) + 1;

    // Notification details.
    const payload = {
      notification: {
        title: 'You have a new request!',
        body: `A new request from ${downedBy.name}.`,
        badge:`${badgeNumber}`,
        sound: 'default',
      }
    };
    ...
    ...
    // Upload the new value of badge into Firebase to keep track of the number
    return admin.database().ref('/Users Info/' + owner).update({badge:badgeNumber});
    ...
    })