跳轉至

高级

創建通知群組

您可以在通知中心以群組的形式顯示通知。對應於同一事件的通知可以被分組並以摺疊的形式顯示。用戶可以再次展開摺疊的通知群組,並且可以單獨執行每個屬於該群組的通知。

通過將群組鍵更改為啟用並在控制台 > 通知 > 推送 v4 > 註冊推送活動 > 活動註冊 > 選項 > 群組鍵中添加鍵值,可以創建通知群組。在控制台中創建群組後,您可以在發送本地推送和遠程推送通知時使用groupId應用通知群組。當應用群組時,通知將按群組以摺疊形式顯示,如下所示。

安卓
iOS
</tbody>

iOS 媒體通知

透過利用 Apple 的 UserNotifications 框架,您可以將媒體文件,例如圖片和視頻,添加到通知中。

JPG(圖片)
GIF(圖片)
MP4(視頻)

操作流程

媒體通知功能使用 iOS 的 通知服務擴展(以下簡稱為擴展)。

通知服務擴展是一種應用擴展,允許您在遠程通知發送給用戶之前修改有效載荷,使您能夠在不切換上下文的情況下使用其他應用的過程(UI或功能)。有關更多詳細信息,請參閱更多

  • 應用擴展後發送遠程通知的過程

檔案大小和類型限制

附加媒體檔案時有大小限制,詳細資訊可以在UNNotificationAttachment中找到。

Warning

我們發現當使用AVAudioSession的應用程式運行時,例如Youtube和各種手機遊戲(例如,召喚師之戰、成為明星、鏈接打擊),通過推送通知發送接收到的音頻可能會導致主屏幕(Springboard)重啟。此問題無論iOS版本或設備類型如何都會發生,並且已確認在Apple系統內部發生衝突,與Hive無關。

在2018年12月20日,我們向Apple詢問了這個問題,在準備好回應之前,請停止使用使用媒體推送的音頻傳輸功能

類別 類型 大小限制
音頻 WAV, MP3, MP4(音頻) 5MB
圖片 JPG, JPEG, PNG, GIF 10MB
視頻 MP4, AVI 50MB
  • 如果因為網絡條件不佳而發生超時,使用者將收到一個沒有媒體的常規通知。
  • 在非常慢的網絡上,下載可能需要長達10分鐘,因此有必要考慮該地區的網絡條件,並使用適當大小的媒體。

實施與利用

要下載媒體並重建通知對象以便發送給用戶,需要幾個設置和額外的源代碼。

Note

通知服務擴展無法作為庫或框架的一部分進行包含和分發,因此要使用該擴展,您必須根據Hive提供的指南進行設置。

添加擴展

要使用媒體通知功能,您需要在項目中添加通知服務擴展。不要直接添加或覆蓋類,而是向項目添加一個新目標。

當您添加目標時,會自動創建一個模板。

<summary>在 Unity 專案中添加目標</summary>
在 Unity 編輯器中,Hive SDK 自動使用 PostProcess 功能執行目標添加和 Info.plist 創建過程。您只需啟用媒體推送選項;不需要其他手動步驟。

1. 在 Unity 編輯器菜單欄中,前往 <b>Hive > 建置專案後處理設定 > iOS</b>
2. 啟用 <b>推送媒體內容</b>
<summary>在非Unity環境中添加目標</summary>
1. 在Xcode項目設置中,點擊<b>添加目標</b>按鈕(左下角的<i>*+*</i>按鈕)
![noti_adv_1_plus-button](../img/noti_adv_1_plus-button.png){width="700px"}

2. 選擇 <b>通知服務擴展</b> 並點擊 <b>下一步</b> <br>
(自 Xcode 8 起,您可以將通知服務擴展作為項目中的目標添加)
![noti_adv_1_plus-button](../img/noti_adv_2_template.png){width="700px"}

3. 輸入<b>產品名稱</b>
![noti_adv_1_plus-button](../img/noti_adv_3_create.png){width="700px"}

4. 當彈出窗口出現時,點擊 <i>*啟用*</i> <br>
擴展將自動嵌入當前項目,並將添加一個構建方案。
![noti_adv_1_plus-button](../img/noti_adv_4_activate.png){width="700px"}

5. 在<i>*一般<b>選項卡中,檢查</b>擴展*</i>是否已添加到項目中
![noti_adv_1_plus-button](../img/noti_adv_5_general-frameworks.png){width="700px"}

6. 确认 <b>NotificationService</b> 模板类已添加到项目中
![noti_adv_1_plus-button](../img/noti_adv_6_template-source.png){width="700px"}


添加 HIVEExtensions.framework

您可以使用Hive提供的HIVEExtensions.framework轻松下载媒体。

添加 HIVEExtensions.framework 的方法如下:

  1. Hive SDK 支持 CocoaPods。如果您的项目目录中没有 Podfile,请运行 pod initnoti_adv_7-2_pod-init-terminal

    如果您已經有一個 Podfile,請打開該文件並添加目標 'NotificationServiceExtension (示例目標名稱)' do-end 語句。 noti_adv_7-2_pod-init-terminal

  2. 請參考截圖並撰寫 pod 聲明。 noti_adv_7-2_pod-init-terminal

  3. 關閉 Podfile,並在您的專案目錄中運行 pod installnoti_adv_7-2_pod-init-terminal

  4. 當你打開 NotificationSample (範例專案名稱).xcworkspace 時,你會看到 Pods 專案已經如下面所示添加。現在你可以在 NotificationSample 和 NotificationServiceExtension 目標中導入 HIVEExtensionsnoti_adv_7-2_pod-init-terminal

應用框架

在 NotificationService.swift 文件中導入框架,如示例所示。 實現模板中提供的方法,以調用 HIVEExtensions.framework 提供的方法並刪除方法內部的原始模板代碼

import HIVEExtensions

func didReceiveNotificationRequest(request: UNNotificationRequest, with contentHandler: (UNNotificationContent) -> Void) {
    HIVENotificationService.didReceive(request) { content in
        guard let content else { return }
        contentHandler(content)
    }
}

func serviceExtensionTimeWillExpire() {
    HIVENotificationService.serviceExtensionTimeWillExpire()
}
#import <HIVEExtensions/HIVEExtensions.h>

- (void)didReceiveNotificationRequest:(UNNotificationRequest *)request withContentHandler:(void (^)(UNNotificationContent * _Nonnull))contentHandler {
[HIVENotificationService didReceiveNotificationRequest:request withContentHandler:contentHandler];
}

- (void)serviceExtensionTimeWillExpire {
[HIVENotificationService serviceExtensionTimeWillExpire];
}

申請注意事項

發送和接收時間的差異

在擴展中的所有任務完成後,通知會發送給用戶,這可能導致發送時間和接收時間之間的差異,客戶端將根據伺服器發送的時間顯示時間。

例如,如果在15:00發送通知,而下載在15:05完成,則該通知將顯示為在15:00到達。

設備容量

透過推播通知接收的媒體會儲存在使用者的裝置上,然後透過推播進行顯示,而接收到的媒體則儲存在裝置的內部快取資料空間中,佔用使用者裝置的內部容量。如果使用者裝置的內部儲存容量不足,快取資料空間會由作業系統自動清除。

使用者的行動數據使用情況

透過推播通知接收的媒體將使用用戶的行動數據進行下載,且下載將在未經用戶同意的情況下進行,這可能在下載過程中產生數據使用費用。

在透過推送交付音頻/視頻文件的情況下,請在下載之前檢查用戶的網絡連接狀態。如果用戶未連接到 Wi-Fi,則不要繼續下載,而是顯示一個沒有媒體的推送通知。

此時,通過推送接收到的媒體類型由媒體 URL 末尾指定的擴展名確認,並且只有在[文件大小和類型限制]部分中指定的擴展名才會正確顯示。

接收的 URL wifi LTE / 3G
http://xxx/notimovie.mp4 媒體在下載後始終可見 由於它具有對應於視頻文件(mp4)的擴展名,因此在未下載媒體的情況下可見
http://xxx/notimovie 媒體在下載後始終可見 這不是音頻/媒體文件,因此媒體在下載後可見
http://xxx/notisound.wav 媒體在下載後始終可見 由於它具有對應於音頻文件(wav)的擴展名,因此在未下載媒體的情況下可見
http://xxx/notiimage.jpg 媒體在下載後始終可見 這不是音頻/媒體文件,因此媒體在下載後可見

應用程式傳輸安全設定

蘋果的預設政策允許所有應用程式進行的伺服器通信使用 https,並且通過通知接收到的 URL 也受到此政策的影響。如果您想使用 Http 網域進行通信,則需要設置 App Transport Security (ATS) 例外。
即使應用程式具有 ATS 例外處理,您仍必須在擴展中設置 ATS 例外,以便使用 http 網域來傳輸通過推送通知的 URL。

當媒體未在Unity中交付

Hub connection error Error Domain=NSCocoaErrorDomain Code=4097 "connection to service named com.com2us.hivesdk.normal.freefull.apple.global.ios.universal.NotificationServiceExtension" UserInfo={NSDebugDescription=connection to service named com.com2us.hivesdk.normal.freefull.apple.global.ios.universal.NotificationServiceExtension}

在 Unity 中,可能会出现媒体未传递的情况,同时显示如上所示的错误日志。在这种情况下,请检查创建的扩展目标的架构中是否包含 armv7 和 arm64 的值。 noti_adv_7-2_pod-init-terminal

推送操作按鈕

推送操作按鈕是當您長按推送通知時出現的系統按鈕,如下所示。通過在推送通知中顯示這些額外的按鈕,您可以鼓勵用戶互動。

使用 Hive SDK,您可以輕鬆地通過簡單的配置實現推送操作按鈕。

安卓 iOS
noti_adv_14-1_push_action_mockup_ad noti_adv_14-2_push_action_mockup_ios
Note

在 Android SDK 中,推送操作按钮不需要额外的设置。有关使用操作按钮功能的详细信息,请参阅 单推送 API - ActionPayload 指南。对于 iOS SDK,您可以使用基本或高级实现方法来实现推送操作按钮。

Warning

當在 iOS SDK 中將推送操作按鈕與 iOS 媒體通知 一起使用時,媒體通知功能可能無法正常工作。發送推送時,請一次僅使用一個功能——要麼是「媒體 URL」,要麼是「操作推送」。如果同時使用兩者,則僅會在接收時顯示媒體縮略圖,長按時不會顯示擴展查看器。

Warning

要在虛幻引擎中使用 iOS 推送操作,您必須使用虛幻引擎 5.3.2 或更高版本提供的 現代構建 系統來構建您的 iOS 應用程式(在虛幻引擎 5.6.0 / XCode 16.1 / macOS 15.5 上測試)。

基本實作 (iOS)

Hive SDK 提供了一組基於常用模式的預設推播動作按鈕,例如「確認」、「拒絕」等。這些內建的按鈕組合可以快速應用,您也可以根據需要定義和擴展自訂的動作按鈕組。預設的推播動作按鈕組如下所示。

  • 確認
  • 關閉
  • 確認,關閉
  • 執行,取消
  • 接受所有,關閉
  • 現在索取,關閉
  • 購買,拒絕
  • 出售,拒絕
  • 接受,拒絕,保留
類別(類別識別碼) 按鈕名稱(動作識別碼)
確認(INFO_CATEGORY) 確認(CONFIRM_ID)
關閉(CLOSE_CATEGORY) 關閉(CLOSE_ID)
確認選擇(CONFIRM_CATEGORY) 確認(CONFIRM_ID), 關閉(CLOSE_ID)
執行(EXECUTE_CATEGORY) 執行(EXECUTE_ID), 取消(CANCEL_ID)
批量接受(ACCEPT_ALL_CATEGORY) 接受全部(ACCEPT_ALL_ID), 關閉(CLOSE_ID)
立即索賠(ACCEPT_NOW_CATEGORY) 立即索賠(ACCEPT_NOW_ID), 關閉(CLOSE_ID)
購買決策(PURCHASE_CATEGORY) 購買(PURCHASE_ID), 拒絕(DECLINE_ID)
銷售請求(SALE_CATEGORY) 出售(SALE_ID), 拒絕(DECLINE_ID)
決策(ACCEPT_DECISION_CATEGORY) 接受(ACCEPT_ID), 拒絕(REJECT_ID), 保留(HOLDING_ID)

不需要額外的代碼來應用這些推送操作按鈕集,但您必須在項目中添加一個 Notification Content Extension 目標。請參閱下面的「推送操作按鈕集應用指南」,以便在您的開發環境中添加目標並啟用推送操作按鈕。

在 Unity 中應用推送操作按鈕集

在 Unity 編輯器中,Hive SDK 的 PostProcess 功能會自動處理目標添加和 Info.plist 的創建。只需勾選使用推送操作按鈕的選項;不需要其他手動步驟。

  1. 在 Unity 編輯器的菜單欄中,前往 Hive > 建置專案後處理設定 > iOS
  2. 啟用 推送動作按鈕
    啟用按鈕時顯示的列表預覽了來自 hive_push_actions.json 檔案的 categories 欄位,該檔案用於 進階實作。如果您在沒有此檔案的情況下繼續使用預設實作,將顯示 'none'。
在非Unity環境中應用推送操作按鈕集

在生成Xcode項目(.xcodeproj)後,請遵循以下步驟:

  1. 在 Xcode 项目设置中,点击左下角的 + 按钮以添加目标。 noti_adv_11_adding-content-extension_1
  2. 选择通知内容扩展并点击 下一步noti_adv_11_adding-content-extension_2
  3. 输入产品名称并将您的主游戏应用目标分配为“嵌入到应用程序”。 noti_adv_11_adding-content-extension_3
  4. 当弹出窗口出现时,点击 激活。扩展将自动嵌入当前项目,并将添加一个构建方案。 noti_adv_11_adding-content-extension_4
  5. 在主游戏应用目标的 常规 > 框架、库和嵌入内容 中,确认您输入的产品名称已添加。 noti_adv_11_adding-content-extension_5
  6. 在产品名称路径下,检查模板类文件 NotificationViewController.swift 是否已自动创建,如下所示。 noti_adv_11_adding-content-extension_6-1 确认模板类文件后,按如下方式修改此文件中的代码:
    import UIKit
    import HIVEExtensions
    import UserNotifications
    import UserNotificationsUI
    
    @objc(NotificationController)
    class NotificationViewController: UIViewController, UNNotificationContentExtension {
    
          func didReceive(_ notification: UNNotification) {
              HiveNotificationContent.didReceive(notification)
          }
    
          func didReceive(_ response: UNNotificationResponse) async -> UNNotificationContentExtensionResponseOption {
              await HiveNotificationContent.didReceive(response)
          }
    
    }
    
    編輯下方圖片中橙色高亮的行。 noti_adv_11-adding-content-extension_6-2
  7. 刪除以下自動生成的文件:
    • 產品名稱/Info.plist
    • 產品名稱/MainInterface.storyboard noti_adv_11_adding-content-extension_7
  8. 在擴展目標的資訊標籤中,配置Info.plist鍵值:
    • NSExtension/NSExtensionAttributes/UNNotificationExtensionCategory類型更改為Array,然後將SDK 預定義類別 ID自定義類別 ID 來自您的文件添加到列表中。
    • NSExtension/NSExtensionAttributes/UNNotificationExtensionInitialContentSizeRatio設置為0
    • 添加NSExtension/NSExtensionPrincipalClass鍵,並將步驟 6 中定義的類別名稱(NotificationViewController.swift)作為值輸入(默認:NotificationViewController)
    • 刪除NSExtension/NSExtensionMainStoryboard鍵。 noti_adv_11_adding-content-extension_8
  9. 在擴展目標的常規 > 庫和框架中,添加所需的框架:
    • HIVEExtensions (如果已通過 CocoaPods 添加則跳過)
    • UIKit
    • NotificationCenter noti_adv_11_adding-content-extension_9

一旦您在开发环境中应用了设置的推送操作按钮,请在从控制台发送推送时指定操作。
在指定操作时,请使用上述详细列表中的类别和操作标识符。

有關控制台設置的更多詳細信息,請參閱控制台指南。

高級實作 (iOS)

hive_push_actions.json 文件中定義 actionscategories 的值。定義後,將 hive_push_actions.json 文件包含在您的目標中並構建應用程式。當應用程式運行時,Hive SDK 會自動解析該文件並在通知中心註冊這些動作和類別。

以下顯示了hive_push_actions.json文件的範例。

hive_push_actions.json 範例
{
    "actions": {
        "ACCEPT_ALL_ID": { ... },
        "ACCEPT_ID": { ... },
        "ACCEPT_NOW_ID": { ... },
        "CANCEL_ID": { ... },
        "CLOSE_ID": { ... },
        "CONFIRM_ID": { ... },
        "DECLINE_ID": { ... },
        "EXECUTE_ID": { ... },
        "HOLDING_ID": { ... },
        "PURCHASE_ID": { ... },
        "REJECT_ID": { ... },
        "SALE_ID": { ... }
    },
    "categories": {
        "INFO_CATEGORY": ["CONFIRM_ID"],
        "CLOSE_CATEGORY": ["CLOSE_ID"],
        "CONFIRM_CATEGORY": ["CONFIRM_ID", "CLOSE_ID"],
        "EXECUTE_CATEGORY": ["EXECUTE_ID", "CANCEL_ID"],
        "ACCEPT_ALL_CATEGORY": ["ACCEPT_ALL_ID", "CLOSE_ID"],
        "ACCEPT_NOW_CATEGORY": ["ACCEPT_NOW_ID", "CLOSE_ID"],
        "PURCHASE_CATEGORY": ["PURCHASE_ID", "DECLINE_ID"],
        "SALE_CATEGORY": ["SALE_ID", "DECLINE_ID"]
    }
}

撰寫檔案的注意事項:

  • 每個類別(集)的最大按鈕數量為 3
  • 上面的示例定義了默認按鈕集。對於自定義操作按鈕,請勿使用重複的標識符;使用唯一且可區分的字符串。
  • 多語言支持遵循 遊戲語言,您可以輸入最多 16 種由 Hive SDK 支持的語言。英語("en")是多語言字符串的必需默認值
Note

Unity PostProcess 是支持的。如果您将 hive_push_actions.json 文件添加到与 hive_config.xml 相同的路径中,在您的 Unity 项目中,它将在构建 Xcode 项目时自动添加到应用目标中。

Warning

寫完檔案後,將檔案中的「categories」欄位的鍵添加到通知內容擴展的 Info.plist 中的 UNNotificationExtensionCategory
在 Unity 中,這是通過分析檔案自動完成的。

常見問題

如果自定義操作按鈕在包含文件後仍然不顯示
  • 檢查文件名是否為'hive_push_actions.json'。
  • 確保它已包含在複製捆綁資源中。 noti_adv_15-1_push_action_faq1