コンテンツにスキップ

高度な

通知グループの作成

通知センターで通知をグループとして表示できます。同一のイベントに該当する通知はグループ化して折りたたんで表示できます。折りたたまれた通知グループはユーザーが再度展開でき、下位の通知(グループに属する各通知)は個別に実行できます。

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

Android
iOS

iOSメディア通知

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

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

動作プロセス

メディア通知機能は、iOSのNotification Service Extension(以下、Extension)を活用して動作します。 Notification Service Extensionとは、ユーザーにRemote Notificationが配信される前にPayloadを修正できるApp Extensionの一つで、Contextを切り替えることなく他のアプリのプロセス(UIまたは機能)を使用できる技術です。 詳細は以下を参照してください。詳細

  • Extension適用後のRemote Notification配信プロセス

ファイル容量とタイプの制限

メディアファイル添付時には容量制限があり、詳細はUNNotificationAttachmentで確認できます。

Warning

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

分類 タイプ 制限容量
オーディオ WAV, MP3, MP4(Audio) 5MB
画像 JPG, JPEG, PNG, GIF 10MB
動画 MP4, AVI 50MB
  • ネットワーク状態が不安定でタイムアウトが発生した場合、ユーザーはメディアが含まれない通常のNotificationを受信します。
  • 非常に速度が遅いネットワークでは、最大10分間ダウンロードが行われることもあるため、該当地域のネットワーク状態を考慮し、適切な容量のメディアを使用する必要があります。

実装と活用

メディアをダウンロードしてNotificationオブジェクトを再構成し、ユーザーに配信する作業を行うには、いくつかの設定とソースコードの追加が必要です。

Note

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

Extensionの追加

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

プロジェクトにターゲットを追加すると、自動的にTemplateが生成されます。

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. スクリーンショットを参考にして、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

Frameworkの適用

NotificationService.swiftファイルに例のようにFrameworkをインポートします。 テンプレートで提供されるメソッドの中で、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];
}

適用時の注意事項

送信時刻と受信時刻の違い

Extension内のすべての作業が終了した後にユーザーへNotificationが配信されるため、送信時刻と受信時刻に差が生じることがあり、クライアントではサーバーが送信した時刻を基準に表示されます。

例えば、15:00にNotificationを送信し、ダウンロードが完了した時刻が15:05だった場合、Notificationは15:00に到着したものとして表示されます。

デバイスの容量

プッシュを通じて受信したメディアは、ユーザーの端末内部に保存された後にプッシュを通じて表示され、受信したメディアは端末内部のCacheデータ領域に保存されてユーザー端末の内部容量を占有します。 Cacheデータ領域は、ユーザー端末内部の空き容量が不足している場合に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 常にダウンロード後にプッシュにメディアを表示 音声ファイル・メディアファイルではないため、ダウンロード後にプッシュにメディアを表示

App Transport Securityの設定

Appleのデフォルトポリシーでは、すべてのアプリが行うサーバー通信でhttpsを使用することが許可されており、Notificationを通じて受信するURLもこのポリシーの影響を受けます。Httpドメインを使用して通信しようとする場合は、App Transport Security(以下、ATS)の例外設定が必要です。
この際、ApplicationでATS例外処理が行われていても、プッシュを通じて受信するURLでhttpドメインを利用するには、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

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

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

Hive SDKでは、簡単な設定を通じてプッシュアクションボタンを選択的に実装できます。

Android iOS
noti_adv_14-1_push_action_mockup_ad noti_adv_14-2_push_action_mockup_ios
Note

Hive SDK Androidでは、プッシュアクションボタンのための別途の設定作業は不要で、シングルプッシュAPI - ActionPayloadガイドの内容を参考にアクションボタン機能を使用できます。 Hive SDK iOSでは、「基本実装方法」と「高度な実装方法」の2つの方式を参考にプッシュアクションボタンを実装できます。

Warning

Hive SDK iOSでプッシュアクションボタンを上記のiOSメディア通知と併用すると、iOSメディア通知機能が不完全に動作することがあります。プッシュ送信時は「メディアアドレス」と「アクションプッシュ」のうち、一度に一つの機能のみを使用してください。一度に二つの機能を同時に使用すると、メディアはプッシュ受信時のサムネイルとしてのみ表示され、長押ししたときの拡張されたビューアーは表示されません。

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では、よく使われる問答をパターン化したデフォルトのプッシュアクションボタンセットを提供します。「確認」、「拒否」など、よく使用されるボタンの組み合わせが組み込まれているため迅速に適用でき、必要に応じてカスタムアクションボタンセットを定義して拡張できる柔軟な構造を提供します。デフォルトで提供するプッシュアクションボタンセット内のリストは以下のとおりです。

  • OK
  • 閉じる
  • OK, 閉じる
  • 実行, キャンセル
  • 一括承諾, 閉じる
  • 今すぐ受け取る, 閉じる
  • 購入する, 拒否する
  • 販売する, 拒否する
  • 承諾, 拒否, 保留
カテゴリー(カテゴリー識別子) ボタン名(アクション識別子)
確認(INFO_CATEGORY) OK(CONFIRM_ID)
終了(CLOSE_CATEGORY) 閉じる(CLOSE_ID)
選択を確認(CONFIRM_CATEGORY) OK(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

各開発環境でプッシュアクションボタンセットを適用したら、Hiveコンソールでプッシュ送信時にアクションを一緒に指定してください
アクションを指定する際は、上記のプッシュアクションボタンセットリスト(詳細)のカテゴリおよびアクションの各識別子(identifier)を活用してください。

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

高度な実装方法 (iOS)

*hive_push_actions.json*ファイルにactionscategoriesに該当する値を定義してください。定義後、*hive_push_actions.json*ファイルをターゲットに含めてアプリをビルドすると、アプリ実行時にHive SDKが自動的に本文を解析してアクションとカテゴリを通知センターに登録します。

*hive_push_actions.json*ファイルの本文の例は以下のとおりです。

hive_push_actions.json の例
{
    "actions": {
      "ACCEPT_ALL_ID": {
        "ar": "قبول الكل",
        "de": "Alle akzeptieren",
        "en": "Accept All",
        "es": "Aceptar todo",
        "fr": "Tout accepter",
        "id": "Terima Semua",
        "it": "Accetta tutto",
        "ja": "一括承諾",
        "ko": "일괄 수락",
        "pt": "Aceitar tudo",
        "ru": "Принять все",
        "th": "ยอมรับทั้งหมด",
        "tr": "Hepsini Kabul Et",
        "vi": "Chấp Nhận Tất Cả",
        "zh-Hans": "批量接受",
        "zh-Hant": "一鍵接受",
        "tl": "Tanggapin ang Lahat"
      },
      "ACCEPT_ID": {
        "ar": "قبول",
        "de": "Akzeptieren",
        "en": "Accept",
        "es": "Aceptar",
        "fr": "Accepter",
        "id": "Terima",
        "it": "Accetta",
        "ja": "承諾",
        "ko": "수락",
        "pt": "Aceitar",
        "ru": "Принять",
        "th": "ยอมรับ",
        "tr": "İzin Ver",
        "vi": "Chấp Nhận",
        "zh-Hans": "接受",
        "zh-Hant": "接受",
        "tl": "Tanggapin"
      },
      "ACCEPT_NOW_ID": {
        "ar": "استلام الآن",
        "de": "Jetzt erhalten",
        "en": "Claim Now",
        "es": "Recibir ahora",
        "fr": "Recevoir maintenant",
        "id": "Klaim Sekarang",
        "it": "Prendi ora",
        "ja": "今すぐ受け取る",
        "ko": "지금 받기",
        "pt": "Obter agora",
        "ru": "Получить сейчас",
        "th": "รับเลย",
        "tr": "Şimdi Al",
        "vi": "Nhận Ngay",
        "zh-Hans": "立即领取",
        "zh-Hant": "立即領取",
        "tl": "Mag-claim Ngayon"
      },
      "CANCEL_ID": {
        "ar": "تنفيذ",
        "de": "Abbrechen",
        "en": "Cancel",
        "es": "Cancelar",
        "fr": "Annuler",
        "id": "Batal",
        "it": "Annulla",
        "ja": "キャンセル",
        "ko": "취소",
        "pt": "Cancelar",
        "ru": "Отменить",
        "th": "ยกเลิก",
        "tr": "İptal",
        "vi": "Hủy",
        "zh-Hans": "取消",
        "zh-Hant": "取消",
        "tl": "Kanselahin"
      },
      "CLOSE_ID": {
        "ar": "إغلاق",
        "de": "Schließen",
        "en": "Close",
        "es": "Cerrar",
        "fr": "Fermer",
        "id": "Tutup",
        "it": "Chiudi",
        "ja": "閉じる",
        "ko": "닫기",
        "pt": "Fechar",
        "ru": "Закрыть",
        "th": "ปิด",
        "tr": "Kapat",
        "vi": "Đóng",
        "zh-Hans": "关闭",
        "zh-Hant": "關閉",
        "tl": "Isara"
      },
      "CONFIRM_ID": {
        "ar": "موافق",
        "de": "OK",
        "en": "OK",
        "es": "Confirmar",
        "fr": "Voir",
        "id": "OK",
        "it": "Ok",
        "ja": "OK",
        "ko": "확인",
        "pt": "Confirmar",
        "ru": "OK",
        "th": "ตกลง",
        "tr": "TAMAM",
        "vi": "OK",
        "zh-Hans": "确认",
        "zh-Hant": "確認",
        "tl": "Sige"
      },
      "DECLINE_ID": {
        "ar": "رفض",
        "de": "Ablehnen",
        "en": "Decline",
        "es": "Rechazar",
        "fr": "Refuser",
        "id": "Tolak",
        "it": "Rifiuta",
        "ja": "拒否する",
        "ko": "거절하기",
        "pt": "Recusar",
        "ru": "Отклонить",
        "th": "ปฏิเสธ",
        "tr": "Reddet",
        "vi": "Từ Chối",
        "zh-Hans": "拒绝",
        "zh-Hant": "拒絕",
        "tl": "Tanggihan"
      },
      "EXECUTE_ID": {
        "ar": "إلغاء",
        "de": "Ausführen",
        "en": "Run",
        "es": "Ejecutar",
        "fr": "Exécuter",
        "id": "Jalankan",
        "it": "Avvia",
        "ja": "実行",
        "ko": "실행",
        "pt": "Executar",
        "ru": "Запустить",
        "th": "ดำเนินการ",
        "tr": "Devam Et",
        "vi": "Kích Hoạt",
        "zh-Hans": "执行",
        "zh-Hant": "執行",
        "tl": "Tumakbo"
      },
      "HOLDING_ID": {
        "ar": "الاختيار لاحقًا",
        "de": "Halten",
        "en": "Hold",
        "es": "Pendiente",
        "fr": "En attente",
        "id": "Tahan",
        "it": "Rimanda",
        "ja": "保留",
        "ko": "보류",
        "pt": "Manter",
        "ru": "Отложить",
        "th": "พักไว้",
        "tr": "Tut",
        "vi": "Tạm Hoãn",
        "zh-Hans": "暂缓",
        "zh-Hant": "保留",
        "tl": "Hawakan"
      },
      "PURCHASE_ID": {
        "ar": "شراء",
        "de": "Kaufen",
        "en": "Purchase",
        "es": "Comprar",
        "fr": "Acheter",
        "id": "Beli",
        "it": "Compra",
        "ja": "購入する",
        "ko": "구매하기",
        "pt": "Comprar",
        "ru": "Купить",
        "th": "ซื้อ",
        "tr": "Satın Al",
        "vi": "Mua",
        "zh-Hans": "购买",
        "zh-Hant": "購買",
        "tl": "Pagbili"
      },
      "REJECT_ID": {
        "ar": " رفض",
        "de": "Ablehnen",
        "en": "Decline",
        "es": "Rechazar",
        "fr": "Refuser",
        "id": "Tolak",
        "it": "Rifiuta",
        "ja": "拒否",
        "ko": "거절",
        "pt": "Recusar",
        "ru": "Отклонить",
        "th": "ปฏิเสธ",
        "tr": "Reddet",
        "vi": "Từ Chối",
        "zh-Hans": "拒绝",
        "zh-Hant": "拒絕",
        "tl": "Tanggihan"
      },
      "SALE_ID": {
        "ar": "بيع",
        "de": "Verkaufen",
        "en": "Sell",
        "es": "Vender",
        "fr": "Vendre",
        "id": "Jual",
        "it": "Vendi",
        "ja": "販売する",
        "ko": "판매하기",
        "pt": "Vender",
        "ru": "Продать",
        "th": "ขาย",
        "tr": "Sat",
        "vi": "Bán",
        "zh-Hans": "出售",
        "zh-Hant": "販售",
        "tl": "Ibenta"
      }
    },
    "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個です。
  • 上記の例はデフォルトで提供されるボタンセットの定義です。カスタムアクションボタンに同一のidentifierを使用すると認識されないため、重複しない識別可能な文字列を使用してください。
  • 多言語は「ゲーム言語」に従い、Hive SDKがサポートする17言語を入力できます。英語("en")は多言語文字列のデフォルト値として使用されるため、必ず追加してください。
Note

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

Warning

本文作成後、Notification Content ExtensionのInfo.plist内のUNNotificationExtensionCategoryに本文の「categories」フィールドのキーを追加してください。
Unity環境の場合は自動的に本文を解析して追加します。

FAQ

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