0

每次將UserNotification消息發送給用戶時,是否可以執行某些操作?iOS:在收到UserNotification時做些什麼?

let tdate = Date(timeIntervalSinceNow: 10) 
    let triggerDate = Calendar.current.dateComponents([.year,.month,.day,.hour,.minute,.second,], from: tdate) 
    let trigger = UNCalendarNotificationTrigger(dateMatching: triggerDate, repeats: true) 

    let identifier = "hk.edu.polyu.addiction.test" 
    let request = UNNotificationRequest(identifier: identifier, content: content, trigger: trigger) 

    UNUserNotificationCenter.current().removeAllPendingNotificationRequests() 
    UNUserNotificationCenter.current().add(request, withCompletionHandler: { (error) in 
     if error != nil { 
     debugPrint("center.add(request, withCompletionHandler: { (error)") 
     } else { 
     debugPrint("no error?! at request added place") 
     } 
    }) 

這是我用來在用戶按下按鈕時發送通知的代碼。 (即在10s之後,通知對用戶來說)。

即使用戶沒有按通知,我希望應用程序的一些變量更新(假設應用程序在後臺)。

可能嗎?

或者,只要這個通知完成。根據我的應用程序中的一些計算,另一個新的通知計劃可能? (不固定時間,不能使用重複)

+0

不,你不能在背景中做這件事。 –

回答

0

是的,這是可能的!需要修改的功能:

  1. 在後臺模式下啓用後臺提取。
  2. 在後臺模式下啓用遠程通知。
  3. 執行委託方法:application:didReceiveRemoteNotification:fetchCompletionHandler:
  4. 當通知到達手機時,此代理方法被調用,因此您可以刷新數據。
  5. 當用戶點擊通知代理方法時:didReceiveRemoteNotification 被調用並打開應用程序,用戶將在應用程序中獲取最新數據。

蘋果API參考:

如果有效載荷配置不正確,通知可能 顯示給用戶,而不是被傳遞到您的應用程序在後臺 。在您的有效載荷,確保滿足下列條件, 真:

有效載荷的APS字典必須包含內容可用密鑰 與值1。有效載荷的APS詞典不能含有 警報,聲音或徽章鍵。當向用戶的設備發送無聲通知 時,iOS會在後臺喚醒您的應用,並且 會使其運行30秒。

+0

如果我的通知只是本地UserNotification,而不是遠程的,它仍然會觸發該方法? 所以我可以安排另一個通知在應用程序中使用上面的代碼:didReceiveRemoteNotification:fetchCompletionHandler:方法? – user6539552

+0

func應用程序(_應用程序:UIApplication,didReceive通知:UILocalNotification) 在iOS10中更換此函數嗎? – user6539552

+0

我想你的方法, FUNC應用(_應用:UIApplication的,didReceiveRemoteNotification USERINFO:[AnyHashable:任何],fetchCompletionHandler completionHandler:@escaping(UIBackgroundFetchResult) - >空隙){ debugPrint(「====== = didReceiveRemoteNotification「) } 啓用後臺提取和遠程通知,但該函數仍然未被調用。我錯過了什麼? – user6539552