未使用 Apple 推送通知设置通知徽章计数 - swift - 以编程方式

Posted

技术标签:

【中文标题】未使用 Apple 推送通知设置通知徽章计数 - swift - 以编程方式【英文标题】:notification Badge count not set using Apple Push notification - swift - programmatically 【发布时间】:2021-05-26 11:13:55 【问题描述】:

每当使用 Apple 推送通知系统向设备发送新通知时,我都会尝试增加徽章编号。

我正在使用 Firebase Cloud Function 发送通知,这是执行此操作的代码:

exports.onEmotionCreated = functions.firestore
.document("Collection/doc1/Collection/doc2")
.onCreate((snapshot, context) => 
  const dict = snapshot.data();
  const toUid = dict.toUid;
  const fromUid = dict.fromUid;
  return db.collection("UserCollection").doc(fromUid).get().then((snap) => 
    const fromName = snap.data().name;
    return db.collection("UserCollection").doc(toUid).get().then((snapTo) => 
      const notificationToToken = snapTo.data().notificationToken;
      const notificationContent = 
        notification: 
          title: `$fromName has sent you a message`,
          body: "Look what's up",
          icon: "default",
          sound: "customNotificationSound.wav",
        ,
      ;
      return admin.messaging()
          .sendToDevice(notificationToToken, notificationContent)
          .then((result) =>
            console.log("write done correctly");
          );
    );
  );
);

通知工作正常,但显然在客户端我做错了,这是我实现的代码。

在主视图控制器ViewDidLoad 中,我为键badgeCount 注册了UserDefaults 值:

var dict = [String: Any]()
    dict.updateValue(0, forKey: "badgeCount")
    UserDefaults.standard.register(defaults: dict)

然后在应用委托中,我尝试使用此函数增加徽章:

func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) 
    
    if let userInfoDict = userInfo as? [String : Any]
        print("received notification :")
        print(userInfoDict)
    
    
    if var badgeCount = UserDefaults.standard.value(forKey: "badgeCount") as? Int
        
        badgeCount += 1
        
        UserDefaults.standard.setValue(badgeCount, forKey: "badgeCount")
        
        UIApplication.shared.applicationIconBadgeNumber = badgeCount
    

我还向应用程序提供了所有 ,这显然允许它在应用程序处于后台时接收通知,但它仍然没有被调用。

【问题讨论】:

【参考方案1】:

我解决了修改有效负载的问题,添加了这个:

content_available: "true",

const notificationContent = 
        notification: 
          title: "New Message",
          body: "Watch this notification",
          icon: "default",
          sound: "notificationSound.wav",
          content_available: "true",
        ,
      ;

【讨论】:

以上是关于未使用 Apple 推送通知设置通知徽章计数 - swift - 以编程方式的主要内容,如果未能解决你的问题,请参考以下文章

如何在 iOS 10 中为推送通知设置徽章计数?

IOS 应用程序中未收到 Firebase 推送通知徽章计数

如何在 iOS 中清除推送通知徽章计数?

如何在 android 和 ios 收到的推送通知上设置徽章?

通过推送通知处理我的应用程序徽章计数的最佳方式是啥?

更新推送通知徽章计数