Skip to content


Push Storyのセットアップ

Push Story機能を使用するには、UNNotification フレームワークとiOS 10が必要です。この機能はiOS SDKバージョン3.2.1以降でのみ利用可能です。

ステップ 1:アプリでプッシュを有効にする

プッシュ通知統合に従って、アプリでプッシュを有効にします。

ステップ 2:通知コンテンツ拡張ターゲットを追加する

アプリプロジェクトで、メニュー [File] > [New] > [Target…] を選択し、新しい Notification Content Extension ターゲットを追加してアクティブ化します。

アプリプロジェクトで、メニューの「File」>「New」>「Target...」を選択し、新しい Notification Content Extension ターゲットを追加してアクティブ化します。

Xcodeによって新しいターゲットが生成され、次のようなファイルが自動的に作成されます。

  • NotificationViewController.h
  • NotificationViewController.m
  • MainInterface.storyboard
  • NotificationViewController.swift
  • MainInterface.storyboard

ステップ 3:機能を有効にする

Push Story機能では、メインアプリターゲットの [Capabilities] セクションのバックグラウンドモードが必要です。バックグラウンドモードをオンにしたら、[Background fetch][Remote notifications] を選択します。

Push Story機能では、メインアプリターゲットの「Capabilities」セクションのバックグラウンドモードが必要です。バックグラウンドモードをオンにしたら、「Background fetch」と「Remote notifications」を選択します。

アプリグループの追加

Capability App Groups も追加する必要があります。アプリにアプリグループがない場合は、メインアプリターゲットの [Capability] に移動し、App Groups をオンにして [+] ボタンをクリックします。アプリのバンドルIDを使用してアプリグループを作成します。たとえば、アプリのバンドルIDが com.company.appname の場合、アプリグループに group.com.company.appname.xyz という名前を付けることができます。メインアプリとコンテンツ拡張ターゲットの両方で App Groups をオンにする必要があります。

アプリをアプリグループに追加しないと、アプリがプッシュペイロードからの特定のフィールドの入力に失敗し、期待したとおりに完全に動作しない可能性があります。

ステップ 4:Push Storyフレームワークをアプリに追加する

Swift Package Managerの統合ガイドに従って、AppboyPushStoryNotification Content Extension に追加します。

Xcodeで、フレームワークとライブラリーの下にある「+」アイコンを選択してフレームワークを追加します。

Swift Package Managerの統合ガイドに従って、AppboyPushStoryをNotification Content Extensionに追加します。

次の行をPodfileに追加します。

1
2
3
target 'YourContentExtensionTarget' do
  pod 'Appboy-Push-Story'
end

Podfileを更新したら、ターミナル内でXcodeアプリプロジェクトのディレクトリーに移動し、pod install を実行します。

GitHubリリースページから最新の AppboyPushStory.zip をダウンロードして展開し、以下のファイルをプロジェクトの Notification Content Extension に追加します。

  • Resources/ABKPageView.nib
  • AppboyPushStory.xcframework

GitHubリリースページから最新のAppboyPushStory.zipをダウンロードして展開し、ファイルをプロジェクトのNotification Content Extensionに追加します。

Build Settings > Other Linker Flags でプロジェクトの Notification Content Extension-ObjC フラグを追加します。

ステップ 5:通知ビューコントローラーを更新する

NotificationViewController.h で、次の行を追加して新しいプロパティを追加し、ヘッダーファイルをインポートします。

1
#import <AppboyPushStory/AppboyPushStory.h>
1
2
@property (nonatomic) IBOutlet ABKStoriesView *storiesView;
@property (nonatomic) ABKStoriesViewDataSource *dataSource;

NotificationViewController.m では、デフォルトの実装を削除し、次のコードを追加します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
@implementation NotificationViewController

- (void)didReceiveNotification:(UNNotification *)notification {
  self.dataSource = [[ABKStoriesViewDataSource alloc] initWithNotification:notification
                                                               storiesView:self.storiesView
                                                                  appGroup:@"YOUR-APP-GROUP-IDENTIFIER"];
}

- (void)didReceiveNotificationResponse:(UNNotificationResponse *)response
                     completionHandler:(void (^)(UNNotificationContentExtensionResponseOption option))completion {
  UNNotificationContentExtensionResponseOption option = [self.dataSource didReceiveNotificationResponse:response];
  completion(option);
}

- (void)viewWillDisappear:(BOOL)animated {
  [self.dataSource viewWillDisappear];
  [super viewWillDisappear:animated];
}

@end

NotificationViewController.swift で、次の行を追加してヘッダーファイルをインポートします。

1
import AppboyPushStory

次に、デフォルトの実装を削除し、次のコードを追加します。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
class NotificationViewController: UIViewController, UNNotificationContentExtension {

  @IBOutlet weak var storiesView: ABKStoriesView!
  var dataSource: ABKStoriesViewDataSource?

  func didReceive(_ notification: UNNotification) {
    dataSource = ABKStoriesViewDataSource(notification: notification, storiesView: storiesView, appGroup: "YOUR-APP-GROUP-IDENTIFIER")
  }

  func didReceive(_ response: UNNotificationResponse, completionHandler completion: @escaping (UNNotificationContentExtensionResponseOption) -> Void) {
    if dataSource != nil {
      let option: UNNotificationContentExtensionResponseOption = dataSource!.didReceive(response)
      completion(option)
    }
  }

  override func viewWillDisappear(_ animated: Bool) {
    dataSource?.viewWillDisappear()
    super.viewWillDisappear(animated)
  }
}

ステップ 6:通知コンテンツ拡張ストーリーボードを設定する

Notification Content Extension ストーリーボードを開き、通知ビューコントローラーに新しい UIView を配置します。クラスの名前を ABKStoriesView に変更します。通知ビューコントローラーのメインビューフレームに合わせて、ビューの幅と高さを自動サイズ変更可能にします。

Notification Content Extensionストーリーボードを開き、通知ビューコントローラーに新しいUIViewを配置します。クラスの名前をABKStoriesViewに変更します。

通知ビューコントローラーのメインビューフレームに合わせて、ビューの幅と高さを自動サイズ変更可能にします。

次に、追加された ABKStoriesView に通知ビューコントローラーの storiesView IBOutletをリンクします。

ステップ6に関連するスクリーンショット:通知コンテンツ拡張ストーリーボードを設定します。

ステップ 7:通知コンテンツ拡張plistを設定する

Notification Content ExtensionInfo.plist ファイルを開き、NSExtension \ NSExtensionAttributes で以下のキーを追加および変更します。

UNNotificationExtensionCategory = ab_cat_push_story_v2String タイプ) UNNotificationExtensionDefaultContentHidden = YESBoolean タイプ) UNNotificationExtensionInitialContentSizeRatio = 0.65Number タイプ)

ステップ7に関連するスクリーンショット:通知コンテンツ拡張plistを設定します。

ステップ 8:メインアプリでのBraze統合のアップデート

オプション 1:ランタイム

Brazeインスタンスの設定に使用する appboyOptions 辞書で、ABKPushStoryAppGroupKey エントリを追加し、値をワークスペースAPI識別子に設定します。

1
2
3
4
5
6
NSMutableDictionary *appboyOptions = [NSMutableDictionary dictionary];
appboyOptions[ABKPushStoryAppGroupKey] = @"YOUR-APP-GROUP-IDENTIFIER";
[Appboy startWithApiKey:@"YOUR-API-KEY"
          inApplication:application
      withLaunchOptions:launchOptions
      withAppboyOptions:appboyOptions];
1
2
3
4
let appboyOptions: [AnyHashable: Any] = [
  ABKPushStoryAppGroupKey : "YOUR-APP-GROUP-IDENTIFIER"
]
Appboy.start(withApiKey: "YOUR-API-KEY", in:application, withLaunchOptions:launchOptions, withAppboyOptions:appboyOptions)

オプション 2:Info.plist

または、Info.plist ファイルからPush Storyワークスペースを構成するには、Braze という名前の辞書を Info.plist ファイルに追加します。Braze 辞書内で、文字列型の PushStoryAppGroup サブエントリを追加し、値をワークスペース識別子に設定します。なお、Braze iOS SDK v4.0.2より前のバージョンでは、Braze の代わりに辞書キー Appboy を使用する必要があります。

次のステップ

次に、アクションボタンを統合する手順を参照してください。これはPush Storiesメッセージにボタンを表示するために必要です。

New Stuff!