簡體   English   中英

Xcode Swift 3.0通知框架應用程序徽章未更新

[英]Xcode Swift 3.0 notification framework app badge not updating

let content = UNMutableNotificationContent()
content.badge = 0 // your badge count

此代碼位於applicationWillEnterForeground ,目的是通過將數字設置為0來擦除徽章,用戶重新進入應用程序但是它已被證明完全無用,因為它不會更新應用程序圖標上的徽章...

我現在已經恢復到iOS 9代碼,它的工作就像一個魅力。 此外,似乎使用新框架,您必須實際發送更新徽章編號的通知,這實際上是不切實際的。如果我錯了,有人請糾正我

此外:

 let content = UNMutableNotificationContent()
        TableViewController.numberBadges += 1
        content.title = "Title"
        content.body = "this is the body ..."
        content.badge = TableViewController.numberBadges as NSNumber?
        content.sound = UNNotificationSound.default()

        let trigger = UNTimeIntervalNotificationTrigger(timeInterval: 5, repeats: false)
        let requestidentifier = "myNotification"
        let request = UNNotificationRequest(identifier: requestidentifier, content: content, trigger: trigger)

        UNUserNotificationCenter.current().add(request, withCompletionHandler: {error in
            // handle error if there is one
            if((error) != nil){
                print("Error completing notification scheduling: \(error)")
            }else{
                print("Added Notification request successfully with \(content.badge!) badges")
            }

        })

不更新徽章所以給出了什么?

在將content.badge強制轉換為非可選項之前,我遇到了同樣的問題。

在iOS 10和11上,通過使用UNNotificationRequest安排通知來擦除徽章存在問題。 文檔說,將UNMutableNotificationContent對象的badge屬性設置為0會在觸發通知時擦除徽章,但這似乎不起作用。 通過實驗,我在兩個iOS版本中找到了這個bug的變通方法。

在iOS 10 / Xcode 8上,如您所見,將值設置為0這不起作用 - 徽章繼續顯示其當前值。 我發現如果你把它設置為-1:

let content = UNMutableNotificationContent()
content.badge = -1

然后它會在觸發通知時擦除徽章。

在iOS 11 / Xcode 9上,將badge屬性設置為小於1的任何值都不起作用 - 徽章繼續顯示其當前值。 我發現如果你將徽章設置為0並設置聲音屬性,例如:

let content = UNMutableNotificationContent()
content.badge = 0
content.sound = UNNotificationSound.default()

然后徽章被刪除。 在我的應用程序中,我已使用requestAuthorization方法請求權限以顯示徽章,但我沒有請求播放聲音的權限,因此在觸發通知時實際上沒有聲音播放。 (如果您的應用確實請求播放聲音的權限,而您在刪除徽章時不想播放該聲音,我不知道解決方法是什么。)

更新:我還通過模擬器檢查了iOS 11的解決方法也適用於iOS 10。

我沒有任何其他問題(還有!)調度通知更新徽章,只要badge屬性設置為正數。

設置徽章= 0似乎打破了,如你所說。

但至於你的第二個問題......問題似乎與你的內容有關。體和.title。 這將導致通知顯示在trey中。 如果在再次運行之前清除此項,則徽章應每次更新。

但是如果您將舊通知留在trey中,它似乎會將新通知折疊為舊通知,而不是第二次更新徽章。 看起來像另一個bug。

顯然,處理此問題的唯一有效方法是單獨發送徽章更新文本通知(即刪除.body和.title) - 當徽章!= 0時似乎工作正常。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM