コンテンツにスキップ

高度な

通知グループの作成

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

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

アンドロイド
iOS
</tbody>

iOSメディア通知

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

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

操作プロセス

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

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

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

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

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

Warning

私たちは、AVAudioSessionを使用しているアプリ(Youtubeやさまざまなモバイルゲーム(例:Summoners War、Be a Star、Chain Strike)など)が実行されているときに、プッシュ通知を介して受信した音声を送信すると、メイン画面(Springboard)が再起動することがあることを発見しました。この問題は、iOSのバージョンやデバイスタイプに関係なく発生し、Hiveとは別にAppleシステム内で競合が発生することが確認されています。

2018年12月20日に、私たちはこの問題についてAppleに問い合わせを行い、回答が準備されるまで、 メディアプッシュを使用した音声伝送機能の使用を中止してください

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

実装と利用

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

Note

通知サービス拡張はライブラリやフレームワークの一部として含めたり配布したりすることはできませんので、拡張機能を使用するには、Hiveが提供するガイドに基づいてセットアップを進める必要があります。

拡張機能の追加

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

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

<summary>Unityプロジェクトにターゲットを追加する</summary>
Unity Editorでは、Hive SDKが自動的にターゲットの追加とInfo.plistの作成プロセスをPostProcess機能を使用して実行します。メディアプッシュオプションを有効にするだけで、他の手動ステップは必要ありません。

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>を選択し、<i>*次へ*</i>をクリックします。 <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. ポップアップが表示されたら、<b>有効化</b>をクリックします。 <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 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

iOSプッシュアクションをUnreal Engineで使用するには、Unreal Engine 5.3.2以降から提供されているモダンビルドシステムを使用して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を有効にします
    ボタンを有効にすると表示されるリストは、Advanced Implementationで使用される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タブで、Info.plistキーの値を設定します:
    • NSExtension/NSExtensionAttributes/UNNotificationExtensionCategoryのタイプをArrayに変更し、SDKで定義されたカテゴリIDファイルからのカスタムカテゴリIDをリストに追加します。
    • NSExtension/NSExtensionAttributes/UNNotificationExtensionInitialContentSizeRatio0に設定します。
    • 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です。
  • 上記の例はデフォルトのボタンセットを定義しています。カスタムアクションボタンには、重複した識別子を使用しないでください; 一意で区別可能な文字列を使用してください。
  • 多言語サポートはゲーム言語に従い、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