[英]Swift 3 - Turn off badge, alert, sound
我在這里閱讀了很多答案,我找不到這些問題的答案如何在應用程序未運行時停止通知的徽章,警報和聲音? 如何在應用程序處於后台時停止通知中的徽章,警報和聲音?
在這個功能:
func userNotificationCenter(_ center: UNUserNotificationCenter, willPresent notification: UNNotification, withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void)
我把completionHandler([])放在沒有[.badge,.alert,.sound]的情況下,當我運行應用程序時,我仍然會在后台收到通知。
此外,我的代碼中還有一個函數,當有人給你打字時你會發出通知,當你在應用程序中時,你看到他正在給你打字,但是當你沒有運行應用程序時,你會收到帶有徽章警報聲的通知嗎? 怎么預防?
PHP代碼:
$body['aps'] = array(
'content-available' => 0,
'typingNewMessage' => 'true',
'senderId' => $your_id
);
首先要做的兩件事:您是否在應用中使用websocket / socket.io進行聊天? 至於通知,您是否在后台模式中設置了遠程通知?
背景模式。
閱讀推文通知的文檔 ,聽起來你在這里添加了一些步驟,或者遺漏了一些。 基本上提到kathayatnk,他的方法應該給你你想要的。 因此,如果您尚未激活遠程后台通知:
配置應用以在后台處理靜默通知
- 在Project Navigator中,選擇您的項目。
- 在編輯器中,選擇您的iOS應用目標。
- 選擇“功能”選項卡。
- 啟用后台模式功能。
- 啟用遠程通知后台模式。
如果這樣做,你應該在后台收到它們。
此外,您使用錯誤的方法在后台接收背景通知..如上面相同的鏈接所述:
在iOS中,系統通過調用應用程序提供靜默通知:didReceiveRemoteNotification : fetchCompletionHandler :應用程序委托的方法。 使用該方法啟動獲取新數據所需的任何下載操作。
我通常如何使用它:
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
guard let aps = userInfo["aps"] as? [String:Any] else {
//handle something here..
return
}
//handle the content here...
}
您還可以通過使用completionHandler的返回值來執行此處的非活動狀態的后台任務。 我建議你也讀一讀。
對於你的聊天問題......
澄清你是如何表現的......
如果您使用的是websocket / socket.io架構:
我強烈建議在使用websocket時不要使用通知來通知用戶任何有APNS的內容。 Websockets非常高效且速度更快。 處理兩者都會使事情變得復雜。 堅持使用套接字方法,並使用方法服務器端檢查用戶是否仍在應用程序中。 像這里的乒乓球方法。 當套接字客戶端ping方法顯示用戶已離開應用程序或已關閉應用程序時,請將該方法切換到APNS傳遞。 這意味着,如果用戶仍然在應用程序中但不在對話中,則保持ping方法,但以不同的方式編寫UI響應(例如,使用FB Messenger或Snapchat的通知選項卡)。
如果你沒有使用websockets / socket.io:
...切換到websockets技術或包(取決於您的服務器平台類型)或socket.io或使用firebase實時聊天服務 。
讓我知道你的設置就像我之前提到的那樣,但是如果你已經完成所有這些並且仍然遇到問題,那么就發布你的代碼。
Personnaly,我已經使用RawWenderlicht為APNS指南超過一年,如果你問我好東西。
對於silent
push notification
, payload
應包含content-available
密鑰,如下所示:
{
"aps": {
"content-available": 1
}
}
此外,您需要在Xcode
項目的Capabilities
設置下在Background Modes
下啟用Remote Notifications
。
現在,當您的app will wake up in the background
收到其中一個push notifications
時,它將app will wake up in the background
。
didReceiveRemoteNotification
將在被稱為AppDelegate
只要push notification
被接收。
func application(
_ application: UIApplication,
didReceiveRemoteNotification userInfo: [AnyHashable : Any],
fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void)
{
let aps = userInfo["aps"] as! [String: AnyObject]
if aps["content-available"] as? Int == 1
{
//Your code
}
}
有關如何處理前台/后台推送通知的更多信息,請參閱: https : //www.raywenderlich.com/156966/push-notifications-tutorial-getting-started
您可以在發送推送時添加靜默推送通知(適當地設置內容可用密鑰),如下所示。
//when you want the badge and sound
aps {
content-available: 1
}
//When you want silent notifications
aps {
content-available: 0
}
這將調用適當的委托方法,但不會顯示徽章和聲音
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.