AppboyKit (also known as the Objective-C SDK) is no longer supported and has been replaced by the Swift SDK. It will no longer receive new features, bug fixes, security updates, or technical support—however, messaging and analytics will continue to function as normal. To learn more, see Introducing the New Braze Swift SDK.
プッシュ統合
ステップ1:プッシュ通知を構成する
Braze を使用して iOS のプッシュ通知を送信する前に、Apple が提供する .p8
のプッシュ通知ファイルを用意する必要があります。Apple の開発者向けドキュメントに記載されているように、
- Apple 開発者アカウントで、[証明書、識別子 & プロファイル] を開きます。
- [キー] で [すべて] を選択し、右上の追加ボタン (+) をクリックします。
- [キーの説明]で、署名キーの一意の名前を入力します。
- [キーサービス] で [Apple プッシュ通知サービス (APNs)] チェックボックスをオンにし、[続行] をクリックします。[確認] をクリックします。
- キー ID をメモしておきます。[ダウンロード] をクリックして、キーを生成してダウンロードします。ダウンロードしたファイルは、何度もダウンロードできませんので、安全な場所に保存してください。
- Braze で、[設定] > [アプリ設定] に移動し、[Apple プッシュ通知証明書] で
.p8
ファイルをアップロードします。開発用または実稼働用のプッシュ証明書のいずれかをアップロードできます。アプリが App Store で公開された後にプッシュ通知をテストするには、アプリの開発バージョン用に別のワークスペースを設定することをお勧めします。 - プロンプトが表示されたら、アプリのバンドル ID、キー ID、チーム IDを入力し、[保存] をクリックします。
古いナビゲーションを使用している場合は、[設定の管理] > [設定] から .p8
ファイルをアップロードできます。
ステップ2:プッシュ機能を有効にする
プロジェクト設定で、[機能] タブの [プッシュ通知] 機能がオンになっていることを確認します。
開発用と実稼働用のプッシュ証明書が別々にある場合は、[全般] タブの [署名を自動的に管理する] チェックボックスをオフにしてください。これにより、Xcode の自動コード署名機能は開発署名のみを行うため、ビルド構成ごとに異なるプロビジョニングプロファイルを選択できるようになります。
ステップ3: プッシュ通知に登録する
ユーザーのデバイスを APNs に登録するには、アプリの application:didFinishLaunchingWithOptions:
デリゲートメソッド内に適切なコードサンプルが含まれている必要があります。アプリケーションのメインスレッドですべてのプッシュ統合コードを呼び出すようにしてください。
Braze には、プッシュアクションボタンをサポートするデフォルトのプッシュカテゴリーも用意されており、プッシュ登録コードに手動で追加する必要があります。その他の統合ステップについては、プッシュアクションボタンを参照のこと。
当社のプッシュ通知のベストプラクティスの説明に従ってカスタムプッシュプロンプトを実装している場合は、アプリにプッシュ許可を付与した後、アプリが実行されるたびに次のコードを呼び出すようにしてください。](https://developer.apple.com/library/ios/documentation/iPhone/Conceptual/iPhoneOSProgrammingGuide/BackgroundExecution/BackgroundExecution.html)デバイストークンは任意に変更される可能性がある[ため、アプリは APNs に再登録する必要があります。
UserNotification フレームワークの使用(iOS 10以降)
iOS 10で導入された UserNotifications
フレームワーク (推奨) を使用している場合は、アプリデリゲートの application:didFinishLaunchingWithOptions:
メソッドに以下のコードを追加します。
次のコードサンプルには、仮のプッシュ許可の統合が含まれています。(5行目と6行目)。アプリで仮許可を使用する予定がない場合は、requestAuthorization
オプションに UNAuthorizationOptionProvisional
を追加するコード行を削除できます。
プッシュ仮許可の詳細については、iOS 通知オプションをご覧ください。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if (floor(NSFoundationVersionNumber) > NSFoundationVersionNumber_iOS_9_x_Max) {
UNUserNotificationCenter *center = [UNUserNotificationCenter currentNotificationCenter];
center.delegate = self;
UNAuthorizationOptions options = UNAuthorizationOptionAlert | UNAuthorizationOptionSound | UNAuthorizationOptionBadge;
if (@available(iOS 12.0, *)) {
options = options | UNAuthorizationOptionProvisional;
}
[center requestAuthorizationWithOptions:options
completionHandler:^(BOOL granted, NSError * _Nullable error) {
[[Appboy sharedInstance] pushAuthorizationFromUserNotificationCenter:granted];
}];
[[UIApplication sharedApplication] registerForRemoteNotifications];
} else {
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound) categories:nil];
[[UIApplication sharedApplication] registerForRemoteNotifications];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
if #available(iOS 10, *) {
let center = UNUserNotificationCenter.current()
center.delegate = self as? UNUserNotificationCenterDelegate
var options: UNAuthorizationOptions = [.alert, .sound, .badge]
if #available(iOS 12.0, *) {
options = UNAuthorizationOptions(rawValue: options.rawValue | UNAuthorizationOptions.provisional.rawValue)
}
center.requestAuthorization(options: options) { (granted, error) in
Appboy.sharedInstance()?.pushAuthorization(fromUserNotificationCenter: granted)
}
UIApplication.shared.registerForRemoteNotifications()
} else {
let types : UIUserNotificationType = [.alert, .badge, .sound]
let setting : UIUserNotificationSettings = UIUserNotificationSettings(types:types, categories:nil)
UIApplication.shared.registerUserNotificationSettings(setting)
UIApplication.shared.registerForRemoteNotifications()
}
アプリの起動が完了する前に、center.delegate = self
を使用してデリゲートオブジェクトを同期的に割り当てる必要があります (可能であれば application:didFinishLaunchingWithOptions:
で) 。そうしないと、アプリがプッシュ通知を受信できなくなる可能性があります。詳細については、Apple の UNUserNotificationCenterDelegate
ドキュメントを参照してください。
UserNotifications フレームワークを使用しない場合
UserNotifications
フレームワークを使用していない場合は、アプリデリゲートのapplication:didFinishLaunchingWithOptions:
メソッドに次のコードを追加します。
1
2
3
UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound) categories:nil];
[[UIApplication sharedApplication] registerForRemoteNotifications];
[[UIApplication sharedApplication] registerUserNotificationSettings:settings];
1
2
3
4
let types : UIUserNotificationType = UIUserNotificationType.Badge | UIUserNotificationType.Sound | UIUserNotificationType.Alert
var setting : UIUserNotificationSettings = UIUserNotificationSettings(forTypes: types, categories: nil)
UIApplication.shared.registerUserNotificationSettings(setting)
UIApplication.shared.registerForRemoteNotifications()
ステップ 4:Braze にプッシュトークンを登録する
APNs の登録が完了したら、次のメソッドを変更し結果として得られる deviceToken
を Braze に渡し、ユーザーがプッシュ通知を使用できるようにする必要があります。
application:didRegisterForRemoteNotificationsWithDeviceToken:
メソッドに次のコードを追加します。
1
[[Appboy sharedInstance] registerDeviceToken:deviceToken];
アプリの application(_:didRegisterForRemoteNotificationsWithDeviceToken:)
メソッドに次のコードを追加します。
1
Appboy.sharedInstance()?.registerDeviceToken(deviceToken)
application:didRegisterForRemoteNotificationsWithDeviceToken:
デリゲートメソッドは、[[UIApplication sharedApplication] registerForRemoteNotifications]
の呼び出し後に毎回呼び出されます。他のプッシュサービスから Braze に移行する場合、ユーザーのデバイスがすでに APNs に登録されていれば、このメソッドは次にこのメソッドが呼び出されたときに既存の登録からトークンを収集し、ユーザーはプッシュするために再オプトインする必要はありません。
ステップ5: プッシュ処理を有効にする
以下のコードは受信したプッシュ通知を Braze に渡すコードで、プッシュ分析とリンク処理のログを取るために必要です。アプリケーションのメインスレッドですべてのプッシュ統合コードを呼び出すようにしてください。
iOS 10以降
iOS 10以降に対してビルドする場合は、UserNotifications
フレームワークを統合し、以下の手順を実行することをお勧めします。
アプリケーションの application:didReceiveRemoteNotification:fetchCompletionHandler:
メソッドに次のコードを追加します。
1
2
3
[[Appboy sharedInstance] registerApplication:application
didReceiveRemoteNotification:userInfo
fetchCompletionHandler:completionHandler];
次に、アプリの (void)userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:
メソッドに次のコードを追加します。
1
2
3
[[Appboy sharedInstance] userNotificationCenter:center
didReceiveNotificationResponse:response
withCompletionHandler:completionHandler];
フォアグラウンドでのプッシュ通知処理
アプリがフォアグラウンドにある間にプッシュ通知を表示するには、userNotificationCenter:willPresentNotification:withCompletionHandler:
を実装します。
1
2
3
4
5
6
7
8
9
- (void)userNotificationCenter:(UNUserNotificationCenter *)center
willPresentNotification:(UNNotification *)notification
withCompletionHandler:(void (^)(UNNotificationPresentationOptions options))completionHandler {
if (@available(iOS 14.0, *)) {
completionHandler(UNNotificationPresentationOptionList | UNNotificationPresentationOptionBanner);
} else {
completionHandler(UNNotificationPresentationOptionAlert);
}
}
フォアグラウンド通知がクリックされると、iOS 10のプッシュデリゲート userNotificationCenter:didReceiveNotificationResponse:withCompletionHandler:
が呼び出され、Braze はプッシュクリックイベントをログに記録します。
アプリの application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
メソッドに次のコードを追加します。
1
2
3
Appboy.sharedInstance()?.register(application,
didReceiveRemoteNotification: userInfo,
fetchCompletionHandler: completionHandler)
次に、アプリの userNotificationCenter(_:didReceive:withCompletionHandler:)
メソッドに次のコードを追加します。
1
2
3
Appboy.sharedInstance()?.userNotificationCenter(center,
didReceive: response,
withCompletionHandler: completionHandler)
フォアグラウンドでのプッシュ通知処理
アプリがフォアグラウンドにある間にプッシュ通知を表示するには、userNotificationCenter(_:willPresent:withCompletionHandler:)
を実装します。
1
2
3
4
5
6
7
8
9
func userNotificationCenter(_ center: UNUserNotificationCenter,
willPresent notification: UNNotification,
withCompletionHandler completionHandler: @escaping (UNNotificationPresentationOptions) -> Void) {
if #available(iOS 14.0, *) {
completionHandler([.list, .banner]);
} else {
completionHandler([.alert]);
}
}
フォアグラウンド通知がクリックされると、iOS 10のプッシュデリゲート userNotificationCenter(_:didReceive:withCompletionHandler:)
が呼び出され、Braze はプッシュクリックイベントをログに記録します。
iOS 10より前のバージョン
iOS 10では、プッシュがクリックされたときに application:didReceiveRemoteNotification:fetchCompletionHandler:
を呼び出さないように動作が更新されました。そのため、iOS 10以降に対応するビルドに更新せず、UserNotifications
フレームワークを使用する場合、古いスタイルのデリゲートの両方から Braze を呼び出す必要があり、以前の統合とは一線を画しています。
iOS 10より前の SDK に対してビルドするアプリの場合は、以下の手順を使用します。
プッシュ通知でオープントラッキングを有効にするには、アプリの application:didReceiveRemoteNotification:fetchCompletionHandler:
メソッドに次のコードを追加します。
1
2
3
[[Appboy sharedInstance] registerApplication:application
didReceiveRemoteNotification:userInfo
fetchCompletionHandler:completionHandler];
iOS 10でプッシュ分析をサポートするには、アプリの application:didReceiveRemoteNotification:
デリゲートメソッドに次のコードも追加する必要があります。
1
2
[[Appboy sharedInstance] registerApplication:application
didReceiveRemoteNotification:userInfo];
プッシュ通知でオープントラッキングを有効にするには、アプリの application(_:didReceiveRemoteNotification:fetchCompletionHandler:)
メソッドに次のコードを追加します。
1
2
3
Appboy.sharedInstance()?.register(application,
didReceiveRemoteNotification: userInfo,
fetchCompletionHandler: completionHandler)
iOS 10でプッシュ分析をサポートするには、アプリの application(_:didReceiveRemoteNotification:)
デリゲートメソッドに次のコードも追加する必要があります。
1
2
Appboy.sharedInstance()?.register(application,
didReceiveRemoteNotification: userInfo)
ステップ 6: ディープリンク
プッシュからアプリへのディープリンクは、標準のプッシュ統合ドキュメントを介して自動的に処理されます。アプリ内の特定の場所にディープリンクを追加する方法について詳しくは、高度なユースケースを参照してください。
ステップ 7:単体テスト (オプション)
先ほどの統合ステップのテストカバレッジを追加するには、プッシュ単体テストを実装する。