ジオフェンス
Braze SDKのジオフェンスの設定方法を学習する。ジオフェンスとは、特定のグローバルな位置を中心に円を形成する仮想的な地理的領域のことで、緯度、経度、半径を組み合わせて表されます。
前提条件
この機能を使用する前に、Android Braze SDKを統合する必要がある。 さらに、サイレント・プッシュ通知の設定も必要だ。
ジオフェンスの設定
ステップ 1: イネーブルメント in 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にブート、精度の高い位置情報、バックグラウンド位置情報の権限を追加します。
1
2
3
<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 ブートレシーバーを追加します。
1
2
3
4
5
<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に設定されていることを確認します。
1
<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に設定することで、選択的に有効にすることができます。
1
<bool name="com_braze_geofences_enabled">true</bool>
ステップ 5: エンドユーザーから位置情報の許可を得る
Android M 以降のバージョンでは、位置情報を収集したりジオフェンスを登録したりする前に、エンドユーザーに位置情報の許可を求める必要があります。
ユーザーがアプリに位置情報の許可を付与したときに Braze に通知するために、以下の呼び出しを追加します。
1
Braze.getInstance(context).requestLocationInitialization();
1
Braze.getInstance(context).requestLocationInitialization()
これにより、SDK は Braze サーバーにジオフェンスを要求し、ジオフェンスの追跡を初期化します。
実装例については、RuntimePermissionUtils.javaを参照してください。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
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;
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
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
}
}
先のサンプルコードの使用は、以下の方法で行います。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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);
}
}
}
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
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ファイルで無効にすることができます。
1
<bool name="com_braze_automatic_geofence_requests_enabled">false</bool>
これはさらに、ランタイム時に以下の方法で行うことができます。
1
2
3
BrazeConfig.Builder brazeConfigBuilder = new BrazeConfig.Builder()
.setAutomaticGeofenceRequestsEnabled(false);
Braze.configure(getApplicationContext(), brazeConfigBuilder.build());
1
2
3
val brazeConfigBuilder = BrazeConfig.Builder()
.setAutomaticGeofenceRequestsEnabled(false)
Braze.configure(applicationContext, brazeConfigBuilder.build())
ステップ6.2: GPS 座標で Braze のジオフェンスを手動でリクエストする
Braze のジオフェンスは、requestGeofences()メソッドを使用して手動でリクエストします。
1
Braze.getInstance(getApplicationContext()).requestGeofences(latitude, longitude);
1
Braze.getInstance(applicationContext).requestGeofences(33.078947, -116.601356)
ジオフェンスは、SDK により自動的に、またはこのメソッドにより手動で、セッションごとに一度だけリクエストできます。
プッシュ・トゥ・シンクをイネーブルメントにする
Braze では、バックグラウンドプッシュを使用してジオフェンスをデバイスに同期します。ほとんどの場合、この機能はアプリ側でのさらなる統合を必要としないため、コードの変更を伴いません。
しかし、アプリケーションが停止している場合にバックグラウンドプッシュを受信すると、バックグラウンドで起動し、そのApplication.onCreate()メソッドが呼び出されることに注意してください。カスタムのApplication.onCreate()実装がある場合は、自動サーバーコールやバックグラウンドプッシュでトリガーしないアクションを延期する必要があります。
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で、一般タブを開け。フレームワーク、ライブラリー、および埋め込みコンテンツの下に、モジュBrazeLocationールを追加する。

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

Appleは廃止したNSLocationAlwaysUsageDescription。詳細については、Appleの開発者ドキュメントを参照せよ。
ステップ 3:コード内でジオフェンスをイネーブルメントする
アプリコード内で、ジオフェンスを有効にするには、`Geofence`インスタンスBrazeを初期化するGeofenceオブジェクトconfigurationの`enabled`プロパティtrueをtruelocation.geofencesEnabledに設定する。その他の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
1
2
3
4
5
6
7
8
9
10
11
12
13
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プロジェクトを開封し、次に「署名」→&「機能」に移動する。バックグラウンドモードで、位置情報の更新にチェックを入れる。

次に、アプリのコードでallowBackgroundGeofenceUpdatesをイネーブルメントする。これにより、Brazeは位置情報の更新を継続的に監視することで、アプリの「使用中」ステータスを延長できる。この設定は、アプリがバックグラウンドにある時だけ機能する。アプリが再起動すると、既存のバックグラウンドプロセスはすべて一時停止され、代わりにフォアグラウンドプロセスが優先される。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
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
1
2
3
4
5
6
7
8
9
10
11
12
13
14
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: 承認を要求する
ユーザーから権限を要求する際は、権限Alwaysか権限When In Useのいずれかを要求する。
When In Use 権限を要求するには、requestWhenInUseAuthorization() メソッドを使用します。
1
2
var locationManager = CLLocationManager()
locationManager.requestWhenInUseAuthorization()
1
2
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
[locationManager requestWhenInUseAuthorization];
デフォルトでは、requestAlwaysAuthorization() はアプリに When In Use 権限のみを付与し、しばらく経過した後に、Always 権限をユーザーにもう一度要求します。
ただし、最初に を呼び出しrequestWhenInUseAuthorization()、最初のWhen In Use 認証を受け取った後に requestAlwaysAuthorization()を呼び出すことで、ユーザーに即座にプロンプトを表示させることもできる。
Always 権限を求める即時プロンプトを出せるのは一度のみです。
1
2
var locationManager = CLLocationManager()
locationManager.requestAlwaysAuthorization()
1
2
CLLocationManager *locationManager = [[CLLocationManager alloc] init];
[locationManager requestAlwaysAuthorization];
ステップ 5: バックグラウンドプッシュを確認する
Braze では、バックグラウンドプッシュ通知を使用してジオフェンスがデバイスと同期されます。サーバーからのジオフェンス更新を適切に処理するため、サイレントプッシュ通知を設定するには以下の手順に従うこと。
手動でジオフェンスをリクエストする
Braze SDKがバックエンドにジオフェンスを要求すると、ユーザーの現在位置をレポートし、レポートされた位置に基づいて最適に関連性が高いと判断されたジオフェンスを受け取る。
最も関連性の高いジオフェンスを受信するために、SDKがレポートする位置をコントロールするには、希望する座標を提供してジオフェンスを手動でリクエストできる。
ステップ 1: automaticGeofenceRequests を false に設定します
init(configuration) に渡される configuration オブジェクトで、自動ジオフェンスリクエストを無効にできます。automaticGeofenceRequests を false に設定します。
1
2
3
4
5
6
7
let configuration = Braze.Configuration(
apiKey: "{BRAZE_API_KEY}",
endpoint: "{BRAZE_ENDPOINT}"
)
configuration.automaticGeofencesRequest = false
let braze = Braze(configuration: configuration)
AppDelegate.braze = braze
1
2
3
4
5
6
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呼び出す
コードでは、適切な緯度と経度でジオフェンスをリクエストする。
1
AppDelegate.braze?.requestGeofences(latitude: latitude, longitude: longitude)
1
2
[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を記述する:
1
2
<bool name="com_braze_enable_location_collection">true</bool>
<bool name="com_braze_geofences_enabled">true</bool>
ステップ 5: 実行時に位置情報の権限を求める
ジオフェンスを登録する前に、ユーザーから位置情報の権限を求めなければならない。C#のコードでは、次のパターンを使うんだ:
1
2
3
4
5
6
7
8
9
10
11
12
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の位置情報収集を初期化する:
1
Braze.GetInstance(this).RequestLocationInitialization();
ステップ 6: ジオフェンスの更新を手動でリクエストする (オプション)
特定の場所に対してジオフェンスを手動でリクエストするには:
1
Braze.GetInstance(this).RequestGeofences(latitude, longitude);
ジオフェンスは、SDK により自動的に、またはこのメソッドにより手動で、セッションごとに一度だけリクエストできます。
ステップ 2:依存関係を追加する
プロジェクトに次のNuGetパッケージ参照を追加する:
Braze.iOS.BrazeLocation
ステップ 3:位置情報の使用を設定する Info.plist
位置情報サービスに関する使用説明文字Info.plist列を追加する。
1
2
3
4
<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の設定でジオフェンスをイネーブルメントする
アプリの起動コード(e.g., App.xaml.cs)で、ジオフェンスを有効にしてBrazeを設定する:
1
2
3
4
5
6
7
8
9
10
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モードのイネーブルメントを有効にせよ:
1
2
3
4
<key>UIBackgroundModes</key>
<array>
<string>location</string>
</array>
次に、Brazeの設定で以下を設定する:
1
2
configuration.Location.AllowBackgroundGeofenceUpdates = true;
configuration.Location.DistanceFilter = 8000; // meters
バッテリーの消耗を防ぐため、アプリの必要に応じた値にDistanceFilter設定せよ。
ステップ 6: 位置情報の許可を要求する
ユーザーから、またはWhen In UseのAlways許可を求める:
1
2
3
4
5
6
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は位置情報が利用可能な場合にジオフェンスを自動的に要求し監視する。この自動設定を利用するか、手動で要求するために`requestGeofencesgeofenceRequest()`を呼び出すことができる。
前提条件
この機能を使う前に、React Native Braze SDKを統合する必要がある。 Androidでは、ジオフェンス同期のためにサイレントプッシュ通知を設定する必要がある。
ジオフェンスの設定
ステップ 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:Google Play Servicesの位置情報機能を追加するandroid-sdk-location。Androidのジオフェンスを参照せよ。 - マニフェストを更新する:位置情報の権限を追加し、Brazeのブートレシーバーを追加する。Androidのジオフェンスを参照せよ。
- Brazeの位置情報収集のイネーブルメント:ファイルを
braze.xml更新しろ。Androidのジオフェンスを参照せよ。
ステップ 3:完全なネイティブiOS設定
React Native SDKはネイティブのBraze iOS SDKを使用するため、プロジェクトのネイティブiOSジオフェンス設定を完了するには、ネイティブSWIFT SDKの手順に従い、ステップ2.2から開始する。具体的にはInfo.plist、位置情報使用説明を更新する(ステップ2.2)、Braze設定でジオフェンスをイネーブルメントする(automaticGeofenceRequests = trueステップ3)、オプションでバックグラウンドレポートをイネーブルメントする(ステップ3.1)こと。ステップ2.1(BrazeLocationモジュールの追加)は不要だ。BrazeLocationはBraze React Native SDKに既に暗黙的に含まれている。iOSのジオフェンスを参照せよ。ステップ2.2から3.1まで。
ステップ 4: JavaScriptからジオフェンスをリクエストする
Android の場合:ユーザーが位置情報の許可を与えた後、Brazeの位置情報機能を初期化し、Brazeサーバーからジオフェンスをリクエストするために`BrazeLocationrequestLocationInitialization().initialize()`を呼び出す。この方法はiOSではサポートされておらず、iOSでは必要とされない。
iOSの場合:対応する設定automaticGeofenceRequestsは、ネイティブのSWIFTまたはObjective CのBraze設定でイネーブルメントする(ステップ3を参照)。このイネーブルメントが有効になると、SDKは位置情報が利用可能な場合に自動的にジオフェンスを要求し監視する。`geofence.request()`に相当するJavaScript呼び出しはrequestLocationInitialization不要だ。
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の両方で、特定のGPS座標に対してジオフェンスの更新を手動でリクエストrequestGeofencesできる。デフォルトでは、Brazeは自動的にデバイスの位置情報を取得し、ジオフェンスをリクエストする。代わりに手動で座標を指定するには:
- 自動的なジオフェンスリクエストを無効にする。Androidでは、設定ファイルで を
com_braze_automatic_geofence_requests_enabledbraze.xmlfalseに設定する。iOSでは、Brazefalseの設定で をautomaticGeofenceRequestsに設定する。 - 指定した緯度と経度で
requestGeofences呼び出す:
1
2
3
import Braze from '@braze/react-native-sdk';
Braze.requestGeofences(33.078947, -116.601356);
ジオフェンスは、SDK により自動的に、またはこのメソッドにより手動で、セッションごとに一度だけリクエストできます。
GitHub でこのページを編集