コンテンツにスキップ

高度な

通知グループの作成

通知センターで通知をグループとして表示することができます。同じイベントに対応する通知はグループ化され、折りたたまれた形式で表示されます。折りたたまれた通知グループはユーザーによって再度展開でき、個々の通知(グループに属する各通知)は別々に実行できます。

通知グループは、グループキーを有効に変更し、コンソール > 通知 > プッシュ v4 > プッシュキャンペーンの登録 > キャンペーン登録 > オプション > グループキーにキー値を追加することで作成できます。コンソールでグループを作成した後、groupIdを使用してローカルプッシュおよびリモートプッシュ通知を送信する際に通知グループを適用できます。グループが適用されると、通知は以下のようにグループごとに折りたたまれて表示されます。

アンドロイド
iOS
</tbody>

iOSメディア通知

AppleのUserNotificationsフレームワークを利用することで、通知に画像や動画などのメディアファイルを追加できます。

JPG(画像)
GIF(画像)
MP4(動画)

操作プロセス

メディア通知機能は、iOSの通知サービス拡張(以下、拡張と呼ぶ)を使用して動作します。

通知サービス拡張は、リモート通知がユーザーに配信される前にペイロードを変更できるアプリ拡張の一種であり、コンテキストを切り替えることなく他のアプリのプロセス(UIまたは機能)を使用できるようにします。詳細については、こちらを参照してください。

  • 拡張機能を適用した後のリモート通知の配信プロセス

ファイルサイズとタイプの制限

メディアファイルを添付する際にはサイズ制限があり、詳細情報はUNNotificationAttachmentで確認できます。

Warning

YouTubeや各種モバイルゲーム(例: Summoners War、Dragon Blaze、Chain Strike)など、AVAudioSessionを使用するアプリが実行中のときに、プッシュで受信したオーディオを送信するとメイン画面(Springboard)が再起動する現象を確認しました。これはiOSバージョンや端末種類に関係なく発生し、Hiveプラットフォームとは別にAppleシステム内で競合が発生していることを確認しています。2018年12月20日にAppleへ本現象を問い合わせ済みで、対応が用意されるまでメディアプッシュを利用したオーディオ送信機能の使用を中止してください

カテゴリ タイプ サイズ制限
オーディオ WAV, MP3, MP4(オーディオ) 5MB
画像 JPG, JPEG, PNG, GIF 10MB
動画 MP4, AVI 50MB
  • ネットワーク条件が悪いためにタイムアウトが発生した場合、ユーザーはメディアなしの通常の通知を受け取ります。
  • 非常に遅いネットワークでは、ダウンロードに最大10分かかることがありますので、その地域のネットワーク条件を考慮し、適切なサイズのメディアを使用する必要があります。

実装と利用

メディアをダウンロードし、ユーザーへの配信のために通知オブジェクトを再構築するには、いくつかの設定と追加のソースコードが必要です。

Note

Notification Service Extensionはライブラリまたはフレームワークに含めて配布できないため、Extensionを使用するにはHiveプラットフォームが提供するガイドに沿って設定を行う必要があります。

拡張機能の追加

メディア通知機能を使用するには、プロジェクトに通知サービス拡張を追加する必要があります。クラスを直接追加またはオーバーライドするのではなく、新しいターゲットをプロジェクトに追加してください。

ターゲットを追加すると、テンプレートが自動的に作成されます。

Unityプロジェクトでターゲットを追加する

Unityエディターでは、Hive SDKがPostProcess機能でターゲット追加とInfo.plist作成など一連の処理を自動で実行します。メディアプッシュの使用可否のみチェックすればよく、ほかの作業は不要です。

  1. Unityエディター上部のメニューバーで**Hive > Build project post process settings > iOS**メニューに進みます
  2. **Push Media Contents**を有効化します

Unity以外の環境でターゲットを追加する

開始前に、次の項目を先に確認してください。

  • プッシュ拡張ターゲットを使用するには、プロビジョニングプロファイルにaps-environment権限(entitlement)が含まれていることを確認してください。必要な場合は、プロビジョニングプロファイルと証明書を新規発行してください。
  • Xcode GUIでターゲットを直接追加した場合、拡張ターゲットの最小サポートターゲットバージョンの既定値が最新OSに設定されることがあります。この値がメインゲームアプリターゲットの最小サポートターゲットバージョンを超えないことを確認してください。

ターゲット追加方法は次のとおりです。

  1. Xcodeプロジェクト設定で**ターゲット追加**ボタンをクリックします(左下の**+**ボタン) noti_adv_1_plus-button
  2. **Notification Service Extension**を選択し、**Next**をクリックします
    (Xcode 8から、プロジェクトにNotification Service Extensionをターゲットとして追加できるようになりました) noti_adv_1_plus-button
  3. **Product Name**を入力します noti_adv_1_plus-button
  4. 次のようなポップアップが表示されたら、**Activate**をクリックします
    現在のプロジェクトにExtensionが自動で含まれ(Embedded)、ビルド用のSchemeが追加されます noti_adv_1_plus-button
  5. **General**タブで、プロジェクトに**Extension**が追加されたことを確認します 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. スクリーンショットを参照して、ポッドステートメントを書いてください。 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.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に到着したと表示されます。

デバイスの容量

プッシュ通知を通じて受信したメディアは、ユーザーのデバイスに保存され、その後プッシュを通じて公開されます。受信したメディアはデバイスの内部キャッシュデータスペースに保存され、ユーザーのデバイスの内部容量を占有します。内部ストレージ容量が不足している場合、キャッシュデータスペースはOSによって自動的にクリアされます。

ユーザーのモバイルデータ使用量

プッシュ通知を通じて受信したメディアは、ユーザーのモバイルデータを使用してダウンロードされ、ダウンロードはユーザーの同意なしに進行するため、ダウンロード中にデータ使用料が発生する可能性があります。

プッシュで音声/動画ファイルが配信される場合は、ダウンロードする前にユーザーのネットワーク接続状況を確認してください。ユーザーがWi-Fiに接続されていない場合は、ダウンロードを進めず、メディアなしのプッシュ通知を表示してください。

この時、プッシュを通じて受信したメディアのタイプは、メディアURLの末尾に指定された拡張子によって確認され、[ファイルサイズとタイプの制限]セクションに指定された拡張子のみが正しく表示されます。

受信したURL wifi LTE / 3G
http://xxx/notimovie.mp4 メディアはダウンロード後に常に公開されます ビデオファイル(mp4)に対応する拡張子があるため、メディアダウンロードなしで公開されます
http://xxx/notimovie メディアはダウンロード後に常に公開されます オーディオ/メディアファイルではないため、メディアはダウンロード後に公開されます
http://xxx/notisound.wav メディアはダウンロード後に常に公開されます オーディオファイル(wav)に対応する拡張子があるため、メディアダウンロードなしで公開されます
http://xxx/notiimage.jpg メディアはダウンロード後に常に公開されます オーディオ/メディアファイルではないため、メディアはダウンロード後に公開されます

アプリのトランスポートセキュリティ設定

Appleのデフォルトポリシーでは、すべてのアプリによって行われるサーバー通信がhttpsを使用することが許可されており、通知を通じて受信されるURLもこのポリシーの影響を受けます。Httpドメインを使用して通信したい場合は、App Transport Security(ATS)例外を設定する必要があります。
アプリケーションにATS例外処理があっても、プッシュ通知を介して送信されるURLのhttpドメインを使用するには、拡張機能で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では、上記のようなエラーログを表示している間にメディアが配信されない場合があります。この場合、作成した拡張ターゲットのアーキテクチャにarmv7とarm64の両方の値が含まれているかどうかを確認してください。 noti_adv_7-2_pod-init-terminal

プッシュアクションボタン

プッシュアクションボタンは、プッシュ通知を長押ししたときに表示されるシステムボタンです。以下に示すように、プッシュ通知にこれらの追加ボタンを表示することで、ユーザーのインタラクションを促すことができます。

Hive SDKを使用すると、簡単な設定でプッシュアクションボタンを簡単に実装できます。

Android iOS
noti_adv_14-1_push_action_mockup_ad noti_adv_14-2_push_action_mockup_ios
Note

Android SDKのプッシュアクションボタンには追加の設定は必要ありません。アクションボタン機能の使用に関する詳細は、Single Push API - ActionPayload Guideを参照してください。iOS SDKでは、基本的または高度な実装方法を使用してプッシュアクションボタンを実装できます。

Warning

iOSメディア通知と一緒にプッシュアクションボタンを使用する際、iOS SDKではメディア通知機能が正しく動作しない場合があります。プッシュを送信する際は、一度に一つの機能のみを使用してください—「メディアURL」または「アクションプッシュ」のいずれかです。両方を同時に使用すると、受信時にメディアサムネイルのみが表示され、長押しした際に拡張ビューアは表示されません。

Warning

Unreal EngineでiOSプッシュアクションを使用するには、Unreal Engine 5.3.2から提供されるModern Buildを使用してiOSアプリをビルドする必要があります(Unreal Engine 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 > Build project post process settings > iOS**メニューに進みます。
  2. **Push Action Buttons**を有効化します。

ボタン有効化時に表示される一覧は、下記の高度な実装方法で使用する hive_push_actions.json ファイル内 categories フィールド一覧のプレビューです。該当ファイルなしで基本実装を行う場合は 'none' と表示されます。

Unity以外の環境でプッシュアクションボタンセットを適用する

開始前に、次の項目を先に確認してください。

  • プッシュ拡張ターゲットを使用するには、プロビジョニングプロファイルにaps-environment権限(entitlement)が含まれていることを確認してください。必要な場合は、プロビジョニングプロファイルと証明書を新規発行してください。
  • Xcode GUIでターゲットを直接追加した場合、拡張ターゲットの最小サポートターゲットバージョンの既定値が最新OSに設定されることがあります。この値がメインゲームアプリターゲットの最小サポートターゲットバージョンを超えないことを確認してください。

次に、Xcodeプロジェクト(.xcodeproj)を出力した後、次の手順で進めてください。

1段階. プッシュ拡張ターゲットの追加

次の手順で拡張ターゲットを新規作成し、アプリターゲットに接続します。

  1. Xcodeプロジェクト設定で左下の+ボタンを押してターゲットを追加します。 noti_adv_11_adding-content-extension_1
  2. Notification Content Extensionを選択し、Nextをクリックします。 noti_adv_11_adding-content-extension_2
  3. Product Nameを入力し、Embed in Applicationにメインゲームアプリターゲットを割り当てます。 noti_adv_11_adding-content-extension_3
  4. 次のポップアップが表示されたらActivateをクリックします。現在のプロジェクトにExtensionが自動で含まれ(Embedded)、ビルド用のSchemeが追加されます。 noti_adv_11_adding-content-extension_4
  5. メインゲームアプリターゲットのGeneral > Frameworks, Libraries, and Embedded Contentで、上で入力したProduct Nameが追加されたことを確認します。 noti_adv_11_adding-content-extension_5
2段階. 自動生成ファイルのカスタマイズ

Product Nameグループに自動生成された次の3つのファイルについて、それぞれ以下の作業を行ってください。

MainInterface.storyboardの削除

Product Name/MainInterface.storyboardを削除します。

NotificationViewController.swiftの修正

Product Name/NotificationViewController.swiftを修正します。

noti_adv_11_adding-content-extension_6-1

上記のように、自動生成されたテンプレートクラスファイルの本文を次のように修正します。以下のコードブロックをコピーして利用するか、画像でオレンジ色に強調した行を追加します。

import UIKit
import HIVEExtensions
import UserNotifications
import UserNotificationsUI

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

Info.plistの修正

Product Name/Info.plistを修正します。

次の手順で、以下のコードを最上位のInformation Property List行(ルートディクショナリ、画像でオレンジ色に強調した行)の下に貼り付けてください。

  1. 最上位のInformation Property List行を展開し、下位項目のNSExtensionを削除してください。
  2. 同じ行を閉じて右クリックし、Paste(貼り付け)を選択してください。
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>NSExtension</key>
    <dict>
    <key>NSExtensionAttributes</key>
    <dict>
        <key>UNNotificationExtensionInitialContentSizeRatio</key>
        <integer>0</integer>
        <key>UNNotificationExtensionCategory</key>
        <array>
        <string>INFO_CATEGORY</string>
        <string>CLOSE_CATEGORY</string>
        <string>CONFIRM_CATEGORY</string>
        <string>EXECUTE_CATEGORY</string>
        <string>ACCEPT_ALL_CATEGORY</string>
        <string>ACCEPT_NOW_CATEGORY</string>
        <string>PURCHASE_CATEGORY</string>
        <string>SALE_CATEGORY</string>
        <string>ACCEPT_DECISION_CATEGORY</string>
        </array>
    </dict>
    <key>NSExtensionPrincipalClass</key>
    <string>$(PRODUCT_NAME).NotificationViewController</string>
    <key>NSExtensionPointIdentifier</key>
    <string>com.apple.usernotifications.content-extension</string>
    </dict>
</dict>
</plist>

noti_adv_11_adding-content-extension_7

3段階. カスタムカテゴリの記入

前段階で修正したInfo.plistUNNotificationExtensionCategory値は、先に紹介したHive SDKの基本提供カテゴリです。もし下記の高度な実装方法に従ってhive_push_actions.jsonに作成したカスタムカテゴリがある場合は、配列要素としてあわせて追加してください。

4段階. 依存関係の追加

プッシュ拡張ターゲットに必要な依存関係を接続します。プロジェクト出力直後にCocoaPodsなどですでに追加している場合は省略できます。

  • 依存関係管理ツールを使用して追加する
    • CocoaPodsを使用する場合: ガイドを参照して、プッシュ拡張ターゲットにHiveExtensionsを追加します
    • Swift Package Managerを使用する場合: ガイドを参照して、プッシュ拡張ターゲットにHive_Extensionsを追加します
  • 直接追加する
    • Xcode GUI上で手動追加するか、ビルドパイプラインスクリプトを作成して接続します
    • Unreal Engineの場合は別途の依存関係管理ツールをサポートしていないため、この方法で進めます
    • 拡張ターゲット設定のGeneral > Frameworks and LibrariesHIVEExtensions.frameworkを追加します

noti_adv_11_adding-content-extension_8

開発環境で設定されたプッシュアクションボタンを適用したら、コンソールからプッシュを送信する際のアクションを指定します。
アクションを指定する際は、上記の詳細リストからカテゴリとアクションの識別子を使用してください。

コンソール設定の詳細については、コンソールガイドを参照してください。

高度な実装 (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です。
  • 上記の例はデフォルトのボタンセットを定義しています。カスタムアクションボタンには、重複した識別子を使用しないでください; 一意で区別可能な文字列を使用してください。
  • 多言語サポートはゲーム言語に従い、Hive SDKがサポートする最大16言語を入力できます。英語("en")は多言語文字列のデフォルト値として必須です。
Note

Unity PostProcessはサポートされています。hive_push_actions.jsonファイルをUnityプロジェクトのhive_config.xmlと同じパスに追加すると、Xcodeプロジェクトをビルドする際にアプリターゲットに自動的に追加されます。

Warning

ファイルを書き込んだ後、ファイルの「categories」フィールドからのキーをNotification Content ExtensionのInfo.plistのUNNotificationExtensionCategoryに追加します。
Unityでは、これはファイルを分析することによって自動的に行われます。

よくある質問

カスタムアクションボタンがファイルを含めても表示されない場合
  • ファイル名が'hive_push_actions.json'であることを確認してください。
  • Copy Bundle Resourcesに含まれていることを確認してください。 noti_adv_15-1_push_action_faq1