跳轉至

高级

通知群組建立

在通知中心中,可以將通知顯示為群組。相同事件的通知可以進行分組並縮小顯示。縮小的通知群組可以由用戶再次展開,並且子通知(屬於該群組的每個通知)可以單獨執行。

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

安卓
iOS

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提供的指南進行設置。

添加擴展

要使用此功能,您需要在项目中添加Notification Service Extension,并使用添加新目标的方式,而不是直接添加或覆盖类。

在項目中添加目標後,將自動生成模板。

1. 在项目设置中,点击添加目标按钮(底部的红色方框) noti_adv_1_plus-button

2. 選擇 Notification Service Extension,然後點擊 Next
(從 Xcode 8 開始,可以將 Notification Service Extension 作為目標添加到項目中) noti_adv_1_plus-button

3. 輸入產品名稱 noti_adv_1_plus-button

4. 當出現如下的彈出窗口時,請點擊 Activate
當前項目將自動包含(Embedded)Extension,並添加用於構建的 Scheme noti_adv_1_plus-button

5. 在 General 標籤中,確認擴展已添加到項目中 noti_adv_1_plus-button

6. 專案中新增名為 NotificationService 的模板類別 noti_adv_1_plus-button

添加 HIVEExtensions.framework

利用Hive提供的**HIVEExtensions.framework**,可以輕鬆下載媒體。

HIVEExtensions.framework 的添加方法如下。

  1. Hive SDK 支援 CocoaPods。如果專案路徑中沒有 Podfile,請執行 pod init。 noti_adv_7-2_pod-init-terminal

    如果有 Podfile,請打開文件並編寫 target 'NotificationServiceExtension(示例目標名稱)' do-end 語句。 noti_adv_7-2_pod-init-terminal

  2. 請參考截圖來編寫 pod 語句。 noti_adv_7-2_pod-init-terminal

  3. 關閉 Podfile,然後在項目路徑中執行 pod install。 noti_adv_7-2_pod-init-terminal

  4. 打開 NotificationSample(示例項目名稱).xcworkspace,您將看到 Pods 項目已被添加。現在可以在 NotificationSample 和 NotificationServiceExtension 目標中導入 HIVEExtensions。 noti_adv_7-2_pod-init-terminal

框架應用

在 NotificationService.m 文件中,如示例所示導入框架。 實現從模板提供的方法調用 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到達。

設備容量

透過推播傳送的媒體會儲存在用戶的設備內部,然後透過推播顯示,傳送的媒體會儲存在設備內部的快取數據空間,佔用用戶設備的內部容量。 當用戶設備的內部儲存容量不足時,作業系統會自動刪除快取數據空間中的數據。

用戶的行動數據使用

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

在通过推送接收音频/视频文件的情况下,需在下载前检查用户的网络连接状态,如果用户不是在Wifi连接状态,则不进行下载,而是显示没有媒体的推送。

此時,透過推播傳遞的媒體類型將根據媒體 URL 最後的副檔名進行確認,並且只有在[檔案容量及類型限制]項目中所列的副檔名才能正常顯示。

接收的 URL wifi LTE / 3G
http://xxx/notimovie.mp4 始終在下載後將媒體顯示在推送中 由於擁有視頻文件的擴展名 (mp4),因此在不下載媒體的情況下顯示推送
http://xxx/notimovie 始終在下載後將媒體顯示在推送中 不是音頻文件/媒體文件,因此在下載後將媒體顯示在推送中
http://xxx/notisound.wav 始終在下載後將媒體顯示在推送中 由於擁有音頻文件的擴展名 (wav),因此在不下載媒體的情況下顯示推送
http://xxx/notiimage.jpg 始終在下載後將媒體顯示在推送中 不是音頻文件/媒體文件,因此在下載後將媒體顯示在推送中

App Transport Security 設定

Apple的基本政策是所有應用程式進行的伺服器通信必須允許使用https,而透過Notification傳遞的URL也受到該政策的影響。如果想要使用Http域進行通信,則需要進行App Transport Security(以下簡稱ATS)例外設置。
在這種情況下,即使Application已經處理了ATS例外,為了在推送中使用http域的URL,仍需在Extension中進行ATS例外設置。

在 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中,如果出現上述錯誤日誌而媒體無法傳遞,請檢查生成的Extension Target的Architectures中是否同時包含armv7和arm64值。 noti_adv_7-2_pod-init-terminal