ジオフェンス
Braze SDKのジオフェンスの設定方法について説明します。ジオフェンスとは、特定のグローバルな位置を中心に円を形成する仮想的な地理的領域のことで、緯度、経度、半径を組み合わせて表されます。
前提条件
この機能を使用する前に、Android Braze SDKを統合する必要がある。
ジオフェンスの設定
ステップ 1: Brazeで有効にする
次のいずれかの場所で、アプリのジオフェンスs を有効にできます。
Locationsページからジオフェンスsを有効にするには:
- Braze で、Audience > Locations に移動します。
- ジオフェンス s が有効になっているワークスペース内のアプリの数がマップの下に表示されます。たとえば、ジオフェンス s が一部のアプリ s に対してのみ有効になっている場合、次のように表示されます。Geofences が有効な5 つのアプリのうち2 つ。追加のアプリs を有効にするには、マップでカレントカウントを選択します。
- アプリを選択してジオフェンスs を有効にし、Done. を選択します。

アプリ設定ページからジオフェンスsを有効にするには:
- Brazeで、設定> アプリ設定に移動します。
- ジオフェンスを有効にするアプリを選択します。
- Geofences Enabledをチェックし、Save.を選択します。

ステップ 2: build.gradleを更新する
android-sdk-locationをアプリレベルのbuild.gradleに追加します。また、Google Play Servicesのセットアップガイドを使用して、Google Play Servicesの位置情報パッケージを追加します。
1
2
3
4
dependencies {
implementation "com.braze:android-sdk-location:+"
implementation "com.google.android.gms:play-services-location:${PLAY_SERVICES_VERSION}"
}
ステップ 3: マニフェストを更新する
AndroidManifest.xmlにブート、精度の高い位置情報、バックグラウンド位置情報の権限を追加します。
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

バックグラウンド位置情報アクセス権限はAndroid 10で追加されたもので、Android 10以降のすべてのデバイスでは、アプリがバックグラウンドで動作している間ジオフェンスが機能するために必要です。
AndroidManifest.xmlのapplicationエレメントにBrazeブートレシーバーを追加します。
<receiver android:name="com.braze.BrazeBootReceiver">
<intent-filter>
<action android:name="android.intent.action.BOOT_COMPLETED" />
</intent-filter>
</receiver>
ステップ 4: Brazeの位置情報収集機能を有効にする
まだBrazeの位置情報収集機能を有効にしていない場合は、com_braze_enable_location_collectionを含むようにbraze.xmlファイルを更新し、その値がtrueに設定されていることを確認します。
<bool name="com_braze_enable_location_collection">true</bool>

Braze Android SDKバージョン3.6.0以降、Brazeの位置情報収集機能はデフォルトで無効になっています。
Brazeのジオフェンスは、Brazeの位置情報収集機能が有効になっている場合に有効になります。デフォルトの位置情報収集機能をオプトアウトしながらもジオフェンスを使用したい場合は、com_braze_enable_location_collectionの値とは独立して、braze.xmlのキーcom_braze_geofences_enabledの値をtrueに設定することで、選択的に有効にすることができます。
<bool name="com_braze_geofences_enabled">true</bool>
ステップ 5: エンドユーザーから位置情報の権限を取得する
Android M以降のバージョンでは、位置情報を収集したりジオフェンスを登録したりする前に、エンドユーザーに位置情報の権限を求める必要があります。
ユーザーがアプリに位置情報の権限を付与したときにBrazeに通知するために、以下の呼び出しを追加します。
Braze.getInstance(context).requestLocationInitialization();
Braze.getInstance(context).requestLocationInitialization()
これにより、SDKはBrazeサーバーにジオフェンスを要求し、ジオフェンスのトラッキングを初期化します。
実装例については、サンプルアプリケーションのRuntimePermissionUtils.javaを参照してください。
public class RuntimePermissionUtils {
private static final String TAG = BrazeLogger.getBrazeLogTag(RuntimePermissionUtils.class);
public static final int DROIDBOY_PERMISSION_LOCATION = 40;
public static void handleOnRequestPermissionsResult(Context context, int requestCode, int[] grantResults) {
switch (requestCode) {
case DROIDBOY_PERMISSION_LOCATION:
// In Android Q, we require both FINE and BACKGROUND location permissions. Both
// are requested simultaneously.
if (areAllPermissionsGranted(grantResults)) {
Log.i(TAG, "Required location permissions granted.");
Toast.makeText(context, "Required location permissions granted.", Toast.LENGTH_SHORT).show();
Braze.getInstance(context).requestLocationInitialization();
} else {
Log.i(TAG, "Required location permissions NOT granted.");
Toast.makeText(context, "Required location permissions NOT granted.", Toast.LENGTH_SHORT).show();
}
break;
default:
break;
}
}
private static boolean areAllPermissionsGranted(int[] grantResults) {
for (int grantResult : grantResults) {
if (grantResult != PackageManager.PERMISSION_GRANTED) {
return false;
}
}
return true;
}
}
object RuntimePermissionUtils {
private val TAG = BrazeLogger.getBrazeLogTag(RuntimePermissionUtils::class.java!!)
val DROIDBOY_PERMISSION_LOCATION = 40
fun handleOnRequestPermissionsResult(context: Context, requestCode: Int, grantResults: IntArray) {
when (requestCode) {
DROIDBOY_PERMISSION_LOCATION ->
// In Android Q, we require both FINE and BACKGROUND location permissions. Both
// are requested simultaneously.
if (areAllPermissionsGranted(grantResults)) {
Log.i(TAG, "Required location permissions granted.")
Toast.makeText(context, "Required location permissions granted.", Toast.LENGTH_SHORT).show()
Braze.getInstance(context).requestLocationInitialization()
} else {
Log.i(TAG, "Required location permissions NOT granted.")
Toast.makeText(context, "Required location permissions NOT granted.", Toast.LENGTH_SHORT).show()
}
else -> {
}
}
}
private fun areAllPermissionsGranted(grantResults: IntArray): Boolean {
for (grantResult in grantResults) {
if (grantResult != PackageManager.PERMISSION_GRANTED) {
return false
}
}
return true
}
}
上記のサンプルコードは、以下のように使用します。
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
boolean hasAllPermissions = PermissionUtils.hasPermission(getApplicationContext(), Manifest.permission.ACCESS_BACKGROUND_LOCATION)
&& PermissionUtils.hasPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION);
if (!hasAllPermissions) {
// Request both BACKGROUND and FINE location permissions
requestPermissions(new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_BACKGROUND_LOCATION},
RuntimePermissionUtils.DROIDBOY_PERMISSION_LOCATION);
}
} else {
if (!PermissionUtils.hasPermission(getApplicationContext(), Manifest.permission.ACCESS_FINE_LOCATION)) {
// Request only FINE location permission
requestPermissions(new String[]{android.Manifest.permission.ACCESS_FINE_LOCATION},
RuntimePermissionUtils.DROIDBOY_PERMISSION_LOCATION);
}
}
}
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.Q) {
val hasAllPermissions = PermissionUtils.hasPermission(applicationContext, Manifest.permission.ACCESS_BACKGROUND_LOCATION)
&& PermissionUtils.hasPermission(applicationContext, Manifest.permission.ACCESS_FINE_LOCATION)
if (!hasAllPermissions) {
// Request both BACKGROUND and FINE location permissions
requestPermissions(arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION, Manifest.permission.ACCESS_BACKGROUND_LOCATION),
RuntimePermissionUtils.DROIDBOY_PERMISSION_LOCATION)
}
} else {
if (!PermissionUtils.hasPermission(applicationContext, Manifest.permission.ACCESS_FINE_LOCATION)) {
// Request only FINE location permission
requestPermissions(arrayOf(android.Manifest.permission.ACCESS_FINE_LOCATION),
RuntimePermissionUtils.DROIDBOY_PERMISSION_LOCATION)
}
}
}
ステップ 6: ジオフェンスの更新を手動でリクエストする(オプション)
デフォルトでは、Brazeは自動的にデバイスの位置情報を取得し、その取得した位置情報に基づいてジオフェンスを要求します。しかし、代わりに近接するBrazeジオフェンスを取得するために使用されるGPS座標を手動で指定することもできます。手動でBrazeジオフェンスをリクエストするには、自動Brazeジオフェンスリクエストを無効にし、リクエスト用にGPS座標を指定する必要があります。
ステップ 6.1: 自動ジオフェンスリクエストを無効にする
自動Brazeジオフェンスリクエストは、com_braze_automatic_geofence_requests_enabledをfalseに設定することで、braze.xmlファイルで無効にすることができます。
<bool name="com_braze_automatic_geofence_requests_enabled">false</bool>
これはさらに、ランタイム時に以下の方法で行うこともできます。
BrazeConfig.Builder brazeConfigBuilder = new BrazeConfig.Builder()
.setAutomaticGeofenceRequestsEnabled(false);
Braze.configure(getApplicationContext(), brazeConfigBuilder.build());
val brazeConfigBuilder = BrazeConfig.Builder()
.setAutomaticGeofenceRequestsEnabled(false)
Braze.configure(applicationContext, brazeConfigBuilder.build())
ステップ 6.2: GPS座標でBrazeジオフェンスを手動でリクエストする
Brazeジオフェンスは、requestGeofences()メソッドを使用して手動でリクエストします。
Braze.getInstance(getApplicationContext()).requestGeofences(latitude, longitude);
Braze.getInstance(applicationContext).requestGeofences(33.078947, -116.601356)

ジオフェンスは、SDKにより自動的に、またはこのメソッドにより手動で、セッションごとに一度だけリクエストできます。

iOS 14以降、おおよその位置情報の権限のみを選択したユーザーに対しては、ジオフェンスが確実に動作しません。
前提条件
この機能を使う前に、Swift Braze SDKを統合する必要がある。
ジオフェンスの設定
ステップ 1: Brazeで有効にする
次のいずれかの場所で、アプリのジオフェンスs を有効にできます。
Locationsページからジオフェンスsを有効にするには:
- Braze で、Audience > Locations に移動します。
- ジオフェンス s が有効になっているワークスペース内のアプリの数がマップの下に表示されます。たとえば、ジオフェンス s が一部のアプリ s に対してのみ有効になっている場合、次のように表示されます。Geofences が有効な5 つのアプリのうち2 つ。追加のアプリs を有効にするには、マップでカレントカウントを選択します。
- アプリを選択してジオフェンスs を有効にし、Done. を選択します。

アプリ設定ページからジオフェンスsを有効にするには:
- Brazeで、設定> アプリ設定に移動します。
- ジオフェンスを有効にするアプリを選択します。
- Geofences Enabledをチェックし、Save.を選択します。

ステップ 2: アプリの位置情報サービスを有効にする
デフォルトでは、Brazeの位置情報サービスは有効になっていません。アプリで有効にするには、以下のステップを完了してください。ステップごとのチュートリアルについては、チュートリアル: Brazeのロケーションとジオフェンスを参照してください。
ステップ 2.1: BrazeLocationモジュールを追加する
Xcodeで、Generalタブを開きます。Frameworks, Libraries, and Embedded Contentの下に、BrazeLocationモジュールを追加します。

ステップ 2.2: Info.plistを更新する
info.plistで、アプリケーションが位置情報を追跡する必要がある理由を説明するString値を以下のキーのいずれかに割り当てます。この文字列は、ユーザーが位置情報サービスの許可を求められる際に表示されるため、この機能を有効にすることでアプリにどのような価値があるかを明確に説明してください。
NSLocationAlwaysAndWhenInUseUsageDescriptionNSLocationWhenInUseUsageDescription


AppleはNSLocationAlwaysUsageDescriptionを非推奨にしました。詳細については、Appleの開発者ドキュメントを参照してください。
ステップ 3: コード内でジオフェンスを有効にする
アプリのコード内で、Brazeインスタンスを初期化するconfigurationオブジェクトのlocation.geofencesEnabledをtrueに設定してジオフェンスを有効にします。その他のlocation設定オプションについては、Braze Swift SDKリファレンスを参照してください。
1
2
3
4
5
6
7
8
9
10
11
12
13
let configuration = Braze.Configuration(
apiKey: "<BRAZE_API_KEY>",
endpoint: "<BRAZE_ENDPOINT>"
)
configuration.location.brazeLocationProvider = BrazeLocationProvider()
configuration.location.automaticLocationCollection = true
configuration.location.geofencesEnabled = true
configuration.location.automaticGeofenceRequests = true
// Additional configuration customization...
let braze = Braze(configuration: configuration)
AppDelegate.braze = braze
BRZConfiguration *configuration =
[[BRZConfiguration alloc] initWithApiKey:brazeApiKey
endpoint:brazeEndpoint];
configuration.logger.level = BRZLoggerLevelInfo;
configuration.location.brazeLocationProvider = [[BrazeLocationProvider alloc] init];
configuration.location.automaticLocationCollection = YES;
configuration.location.geofencesEnabled = YES;
configuration.location.automaticGeofenceRequests = YES;
// Additional configuration customization...
Braze *braze = [[Braze alloc] initWithConfiguration:configuration];
AppDelegate.braze = braze;
ステップ 3.1: バックグラウンドレポートを有効にする(任意)
デフォルトでは、ジオフェンスイベントはアプリがフォアグラウンドにある場合、またはすべてのアプリケーション状態を監視するAlways権限を持っている場合にのみ監視されます。
ただし、アプリがバックグラウンドにある場合やWhen In Use権限を持っている場合にも、ジオフェンスイベントを監視することを選択できます。
これらの追加のジオフェンスイベントを監視するには、Xcodeプロジェクトを開き、Signing & Capabilitiesに移動します。Background Modesで、Location updatesにチェックを入れます。

次に、アプリのコードでallowBackgroundGeofenceUpdatesを有効にします。これにより、Brazeは位置情報の更新を継続的に監視することで、アプリの「When In Use」ステータスを延長できます。この設定は、アプリがバックグラウンドにある場合にのみ機能します。アプリが再度開かれると、既存のバックグラウンドプロセスはすべて一時停止され、代わりにフォアグラウンドプロセスが優先されます。
let configuration = Braze.Configuration(
apiKey: "<BRAZE_API_KEY>",
endpoint: "<BRAZE_ENDPOINT>"
)
// Additional configuration customization...
// Enable background geofence reporting with `When In Use` authorization.
configuration.location.allowBackgroundGeofenceUpdates = true
// Determines the number of meters required to trigger a new location update.
configuration.location.distanceFilter = 8000
let braze = Braze(configuration: configuration)
AppDelegate.braze = braze
BRZConfiguration *configuration =
[[BRZConfiguration alloc] initWithApiKey:brazeApiKey
endpoint:brazeEndpoint];
// Additional configuration customization...
// Enable background geofence reporting with `When In Use` authorization.
configuration.location.allowBackgroundGeofenceUpdates = YES;
// Determines the number of meters required to trigger a new location update.
configuration.location.distanceFilter = 8000;
Braze *braze = [[Braze alloc] initWithConfiguration:configuration];
AppDelegate.braze = braze;

バッテリーの消耗とレート制限を防ぐため、アプリの特定のニーズに合った値にdistanceFilterを設定してください。distanceFilterをより高い値に設定すると、アプリがユーザーの位置情報を頻繁にリクエストしすぎるのを防ぐことができます。
ステップ 4: 承認をリクエストする
ユーザーから承認をリクエストする際は、When In UseまたはAlwaysのいずれかの承認をリクエストします。
When In Use承認をリクエストするには、requestWhenInUseAuthorization()メソッドを使用します。
var locationManager = CLLocationManager()
locationManager.requestWhenInUseAuthorization()
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
[locationManager requestWhenInUseAuthorization];
デフォルトでは、requestAlwaysAuthorization()はアプリにWhen In Use承認のみを付与し、しばらく経過した後にAlways承認をユーザーに再度リクエストします。
ただし、最初にrequestWhenInUseAuthorization()を呼び出し、初回のWhen In Use承認を受け取った後にrequestAlwaysAuthorization()を呼び出すことで、ユーザーに即座にプロンプトを表示することもできます。

Always承認を求める即時プロンプトを出せるのは一度のみです。
var locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
[locationManager requestAlwaysAuthorization];
手動でジオフェンスをリクエストする
Braze SDKがバックエンドにジオフェンスをリクエストすると、ユーザーの現在位置をレポートし、レポートされた位置に基づいて最適に関連性が高いと判断されたジオフェンスを受け取ります。
最も関連性の高いジオフェンスを受信するためにSDKがレポートする位置をコントロールするには、希望する座標を提供してジオフェンスを手動でリクエストできます。
ステップ 1: automaticGeofenceRequestsをfalseに設定する
init(configuration)に渡されるconfigurationオブジェクトで、自動ジオフェンスリクエストを無効にできます。automaticGeofenceRequestsをfalseに設定します。
let configuration = Braze.Configuration(
apiKey: "{BRAZE_API_KEY}",
endpoint: "{BRAZE_ENDPOINT}"
)
configuration.automaticGeofencesRequest = false
let braze = Braze(configuration: configuration)
AppDelegate.braze = braze
BRZConfiguration *configuration =
[[BRZConfiguration alloc] initWithApiKey:{BRAZE_API_KEY}
endpoint:{BRAZE_ENDPOINT}];
configuration.automaticGeofencesRequest = NO;
Braze *braze = [[Braze alloc] initWithConfiguration:configuration];
AppDelegate.braze = braze;
ステップ 2: 手動でrequestGeofencesを呼び出す
コード内で、適切な緯度と経度を指定してジオフェンスをリクエストします。
AppDelegate.braze?.requestGeofences(latitude: latitude, longitude: longitude)
[AppDelegate.braze requestGeofencesWithLatitude:latitude
longitude:longitude];
よくある質問(FAQ)
デバイスでジオフェンスが受信されないのはなぜですか?
デバイスでジオフェンスが受信されているかどうかを確認するには、まずSDKデバッガーツールを使用してSDKのログを確認してください。サーバーからジオフェンスが正常に受信されているか、また顕著なエラーがあるかどうかを確認できます。
以下は、デバイスでジオフェンスが受信されないその他の考えられる理由です。
iOSオペレーティングシステムの制限
iOSオペレーティングシステムでは、特定のアプリに対して最大20個のジオフェンスしか保存できません。ジオフェンスを有効にすると、Brazeはこれら20個の利用可能スロットの一部を使用します。
アプリ内の他のジオフェンス関連機能が誤って、または意図せず妨げられるのを防ぐには、ダッシュボードで個々のアプリに対して位置情報ジオフェンスを有効にする必要があります。位置情報サービスが正しく動作するには、アプリで利用可能なジオフェンススポットがすべて使用されていないことを確認してください。
レート制限
Brazeは不要なリクエストを避けるため、1セッションあたり1回のジオフェンス更新に制限しています。
Brazeと非Brazeのジオフェンス機能を両方使っている場合、どのように動作しますか?
前述の通り、iOSでは単一のアプリが最大20個のジオフェンスを保存できます。このストレージは、Brazeと非Brazeのジオフェンスの両方で共有され、CLLocationManagerによって管理されます。
例えば、アプリに非Brazeのジオフェンスが20個含まれている場合、Brazeのジオフェンスを追跡するストレージは存在しません(逆も同様です)。新しいジオフェンスを受信するには、Appleの位置情報APIを使用して、デバイス上の既存のジオフェンスの一部の監視を停止する必要があります。
ジオフェンス機能は、デバイスがオフラインの状態で使用できますか?
デバイスは、更新が行われるときだけインターネットに接続する必要があります。サーバーからジオフェンスを正常に受信した後は、デバイスがオフライン状態であっても、ジオフェンスのエントリや退出を記録することが可能です。これは、デバイスの位置情報がインターネット接続とは別個に動作するためです。
例えば、あるデバイスがセッション開始時にジオフェンスを正常に受信・登録した後、オフライン状態になったとします。その後、登録済みのジオフェンスのいずれかに入ると、Braze キャンペーンをトリガーできます。
アプリがバックグラウンド状態になったり終了したりすると、なぜジオフェンスが監視されなくなるのですか?
Always権限がない場合、Appleはアプリが使用されていない間、位置情報サービスの動作を制限します。これはオペレーティングシステムによって強制されるものであり、Braze SDKのコントロール範囲外です。Brazeはアプリがバックグラウンドにある間もサービスを実行するための個別の設定を提供していますが、ユーザーからの明示的な承認を得ずに終了されたアプリについては、これらの制限を回避する方法はありません。
前提条件
この機能を使う前に、.NET MAUI Braze SDKを統合する必要がある。
前提条件
ジオフェンスの使用を開始するために必要な最小SDKバージョンは以下の通りです:
ジオフェンスの設定
ステップ 1: Brazeで有効にする
次のいずれかの場所で、アプリのジオフェンスs を有効にできます。
Locationsページからジオフェンスsを有効にするには:
- Braze で、Audience > Locations に移動します。
- ジオフェンス s が有効になっているワークスペース内のアプリの数がマップの下に表示されます。たとえば、ジオフェンス s が一部のアプリ s に対してのみ有効になっている場合、次のように表示されます。Geofences が有効な5 つのアプリのうち2 つ。追加のアプリs を有効にするには、マップでカレントカウントを選択します。
- アプリを選択してジオフェンスs を有効にし、Done. を選択します。

アプリ設定ページからジオフェンスsを有効にするには:
- Brazeで、設定> アプリ設定に移動します。
- ジオフェンスを有効にするアプリを選択します。
- Geofences Enabledをチェックし、Save.を選択します。

次に、AndroidまたはiOSのいずれかについて、以下のプラットフォーム固有の手順に従ってください:
ステップ 2: 依存関係を追加する
プロジェクトに次のNuGetパッケージ参照を追加します:
BrazePlatform.BrazeAndroidLocationBinding
ステップ 3: AndroidManifest.xmlを更新する
AndroidManifest.xmlに以下の権限を追加します:
1
2
3
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_BACKGROUND_LOCATION" />

Android 10以降のデバイスでは、アプリがバックグラウンドで動作している間ジオフェンスが機能するために、バックグラウンド位置情報アクセス権限が必要です。
ステップ 4: Brazeの位置情報収集を設定する
Brazeの設定で位置情報の収集が有効になっていることを確認してください。自動位置情報収集なしでジオフェンスを有効にしたい場合は、Braze.xmlに以下を設定します:
<bool name="com_braze_enable_location_collection">true</bool>
<bool name="com_braze_geofences_enabled">true</bool>
ステップ 5: 実行時に位置情報の権限をリクエストする
ジオフェンスを登録する前に、ユーザーから位置情報の権限をリクエストする必要があります。C#コードでは、次のパターンを使用します:
using AndroidX.Core.App;
using AndroidX.Core.Content;
private void RequestLocationPermission()
{
// ...existing code for checking and requesting permissions...
}
public override void OnRequestPermissionsResult(int requestCode, string[] permissions, Permission[] grantResults)
{
// ...existing code for handling permission result...
}
権限が付与された後、Brazeの位置情報収集を初期化します:
Braze.GetInstance(this).RequestLocationInitialization();
ステップ 6: ジオフェンスの更新を手動でリクエストする(オプション)
特定のロケーションに対してジオフェンスを手動でリクエストするには:
Braze.GetInstance(this).RequestGeofences(latitude, longitude);

ジオフェンスは、SDKによる自動リクエストまたはこのメソッドによる手動リクエストのいずれかで、セッションごとに1回のみリクエストできます。
ステップ 2: 依存関係を追加する
プロジェクトに次のNuGetパッケージ参照を追加します:
Braze.iOS.BrazeLocation
ステップ 3: Info.plistで位置情報の使用を設定する
Info.plistに位置情報サービスの使用説明文字列を追加します:
<key>NSLocationAlwaysAndWhenInUseUsageDescription</key>
<string>This app uses your location to enable geofences and location-based messaging.</string>
<key>NSLocationWhenInUseUsageDescription</key>
<string>This app uses your location to enable geofences and location-based messaging.</string>

AppleはNSLocationAlwaysUsageDescriptionを廃止しました。iOS 14以降では上記のキーを使用してください。
ステップ 4: Brazeの設定でジオフェンスを有効にする
アプリの起動コード(例:App.xaml.cs)で、ジオフェンスを有効にしてBrazeを設定します:
using BrazeKit;
using BrazeLocation;
var configuration = new BRZConfiguration("<BRAZE_API_KEY>", "<BRAZE_ENDPOINT>");
configuration.Location.BrazeLocationProvider = new BrazeLocationProvider();
configuration.Location.AutomaticLocationCollection = true;
configuration.Location.GeofencesEnabled = true;
configuration.Location.AutomaticGeofenceRequests = true;
// ...other configuration...
var braze = new Braze(configuration);
ステップ 5: バックグラウンド位置情報の更新を有効にする(オプション)
バックグラウンドでジオフェンスを監視するには、Info.plistに以下の設定を追加してLocation updatesバックグラウンドモードを有効にします:
<key>UIBackgroundModes</key>
<array>
<string>location</string>
</array>
次に、Brazeの設定で以下を設定します:
configuration.Location.AllowBackgroundGeofenceUpdates = true;
configuration.Location.DistanceFilter = 8000; // meters

バッテリーの消耗を防ぐため、DistanceFilterをアプリのニーズに合った値に設定してください。
ステップ 6: 位置情報の許可をリクエストする
ユーザーからWhen In UseまたはAlwaysの許可をリクエストします:
using CoreLocation;
var locationManager = new CLLocationManager();
locationManager.RequestWhenInUseAuthorization();
// or
locationManager.RequestAlwaysAuthorization();

Alwaysの許可がない場合、iOSはアプリが使用されていない間、位置情報サービスの実行を制限します。これはオペレーティングシステムによって強制されるものであり、Braze SDKでは回避できません。

React Native SDKでは、ジオフェンスはiOSとAndroidの両方でサポートされています。requestLocationInitializationメソッドはAndroid専用であり、iOSでは不要です。requestGeofencesメソッドは両方のプラットフォームで利用できます。デフォルトでは、SDKはロケーションが利用可能な場合にジオフェンスを自動的にリクエストし監視できます。この自動設定を利用するか、requestGeofencesを呼び出して手動でリクエストすることができます。
前提条件
この機能を使う前に、React Native Braze SDKを統合する必要がある。
ジオフェンスの設定
ステップ 1:Brazeで有効にする
次のいずれかの場所で、アプリのジオフェンスs を有効にできます。
Locationsページからジオフェンスsを有効にするには:
- Braze で、Audience > Locations に移動します。
- ジオフェンス s が有効になっているワークスペース内のアプリの数がマップの下に表示されます。たとえば、ジオフェンス s が一部のアプリ s に対してのみ有効になっている場合、次のように表示されます。Geofences が有効な5 つのアプリのうち2 つ。追加のアプリs を有効にするには、マップでカレントカウントを選択します。
- アプリを選択してジオフェンスs を有効にし、Done. を選択します。

アプリ設定ページからジオフェンスsを有効にするには:
- Brazeで、設定> アプリ設定に移動します。
- ジオフェンスを有効にするアプリを選択します。
- Geofences Enabledをチェックし、Save.を選択します。

ステップ 2:ネイティブAndroidセットアップを完了する
React Native SDKはネイティブのBraze Android SDKを使用するため、プロジェクトのネイティブAndroidジオフェンスセットアップを完了する必要があります。これらのステップに相当するiOS版は、ネイティブSwift SDKジオフェンスガイド(ステップ2.2から3.1)で説明されています。ステップ2.1(BrazeLocationモジュールの追加)はReact Nativeでは不要です。BrazeLocationはBraze React Native SDKに既に暗黙的に含まれているためです。
build.gradleを更新する:android-sdk-locationとGoogle Play Servicesのロケーションを追加します。Androidジオフェンスを参照してください。- マニフェストを更新する: ロケーション権限とBrazeブートレシーバーを追加します。Androidジオフェンスを参照してください。
- Brazeのロケーション収集を有効にする:
braze.xmlファイルを更新します。Androidジオフェンスを参照してください。
ステップ 3:ネイティブiOSセットアップを完了する
React Native SDKはネイティブのBraze iOS SDKを使用するため、プロジェクトのネイティブiOSジオフェンスセットアップを完了するには、ネイティブSwift SDKの手順に従い、ステップ2.2から開始します。具体的には、Info.plistをロケーション使用説明で更新し(ステップ2.2)、automaticGeofenceRequests = trueを含むBraze設定でジオフェンスを有効にし(ステップ3)、オプションでバックグラウンドレポートを有効にします(ステップ3.1)。ステップ2.1(BrazeLocationモジュールの追加)は不要です。BrazeLocationはBraze React Native SDKに既に暗黙的に含まれています。iOSジオフェンス、ステップ2.2から3.1を参照してください。
ステップ 4:JavaScriptからジオフェンスをリクエストする
Androidの場合: ユーザーがロケーション権限を付与した後、requestLocationInitialization()を呼び出してBrazeのロケーション機能を初期化し、Brazeサーバーからジオフェンスをリクエストします。このメソッドはiOSではサポートされておらず、iOSでは不要です。
iOSの場合: 対応する方法は、ネイティブのSwiftまたはObjective-CのBraze設定でautomaticGeofenceRequests設定を有効にすることです(ステップ3を参照)。これが有効になると、SDKはロケーションが利用可能な場合に自動的にジオフェンスをリクエストし監視します。requestLocationInitializationに相当するJavaScript呼び出しは不要です。
1
2
3
4
import Braze from '@braze/react-native-sdk';
// Android only: call this after the user grants location permission
Braze.requestLocationInitialization();
ステップ 5:ジオフェンスを手動でリクエストする(オプション)
iOSとAndroidの両方で、requestGeofencesを使用して特定のGPS座標に対するジオフェンスの更新を手動でリクエストできます。デフォルトでは、Brazeは自動的にデバイスのロケーションを取得し、ジオフェンスをリクエストします。代わりに手動で座標を指定するには:
- 自動ジオフェンスリクエストを無効にします。Androidでは、
braze.xmlでcom_braze_automatic_geofence_requests_enabledをfalseに設定します。iOSでは、Brazeの設定でautomaticGeofenceRequestsをfalseに設定します。 - 指定した緯度と経度で
requestGeofencesを呼び出します:
import Braze from '@braze/react-native-sdk';
Braze.requestGeofences(33.078947, -116.601356);

ジオフェンスは、SDKによる自動リクエストまたはこのメソッドによる手動リクエストのいずれかで、セッションごとに一度だけリクエストできます。