簡體   English   中英

Swift 3 - 關閉徽章,警報,聲音

[英]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,他的方法應該給你你想要的。 因此,如果您尚未激活遠程后台通知:

配置應用以在后台處理靜默通知

  1. 在Project Navigator中,選擇您的項目。
  2. 在編輯器中,選擇您的iOS應用目標。
  3. 選擇“功能”選項卡。
  4. 啟用后台模式功能。
  5. 啟用遠程通知后台模式。

如果這樣做,你應該在后台收到它們。

此外,您使用錯誤的方法在后台接收背景通知..如上面相同的鏈接所述:

在iOS中,系統通過調用應用程序提供靜默通知:didReceiveRemoteNotificationfetchCompletionHandler :應用程序委托的方法。 使用該方法啟動獲取新數據所需的任何下載操作。

我通常如何使用它:

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 notificationpayload應包含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.

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