ディープリンク
Android SDK 実装プロセスの一環として、アプリがディープリンクを使用する機能を設定します。この記事では、ディープリンクのユースケースの追加例を紹介します。
ディープリンクの基本情報については、ユーザーガイドの記事を参照してください。
この記事には、廃止予定のニュースフィードの情報が含まれています。Braze は、ニュースフィードツールを使っている顧客には、コンテンツカードのメッセージングチャネルに移行することを勧めています。詳しくはマイグレーションガイドをご覧ください。
ユニバーサルディープリンクデリゲート
Android SDK は、コンテンツカード、アプリ内メッセージ、プッシュ通知にわたって Braze によって開かれたすべてのディープリンクをカスタム処理するように単一のデリゲートオブジェクトを設定する機能を提供しています。
デリゲートオブジェクトはIBrazeDeeplinkHandler
インターフェイスを実装し、BrazeDeeplinkHandler.setBrazeDeeplinkHandler()
を使用して設定する必要があります。ほとんどの場合、デリゲートはアプリのApplication.onCreate()
で設定する必要があります。
以下は、カスタムインテントフラグと YouTube URL のカスタム動作でデフォルトのUriAction
動作を上書きする例です。
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
33
34
35
36
37
38
public class CustomDeeplinkHandler implements IBrazeDeeplinkHandler {
private static final String TAG = BrazeLogger.getBrazeLogTag(CustomDeeplinkHandler.class);
@Override
public void gotoNewsFeed(Context context, NewsfeedAction newsfeedAction) {
newsfeedAction.execute(context);
}
@Override
public void gotoUri(Context context, UriAction uriAction) {
String uri = uriAction.getUri().toString();
// Open YouTube URLs in the YouTube app and not our app
if (!StringUtils.isNullOrBlank(uri) && uri.contains("youtube.com")) {
uriAction.setUseWebView(false);
}
CustomUriAction customUriAction = new CustomUriAction(uriAction);
customUriAction.execute(context);
}
public static class CustomUriAction extends UriAction {
public CustomUriAction(@NonNull UriAction uriAction) {
super(uriAction);
}
@Override
protected void openUriWithActionView(Context context, Uri uri, Bundle extras) {
Intent intent = getActionViewIntent(context, uri, extras);
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP | Intent.FLAG_ACTIVITY_SINGLE_TOP);
if (intent.resolveActivity(context.getPackageManager()) != null) {
context.startActivity(intent);
} else {
BrazeLogger.w(TAG, "Could not find appropriate activity to open for deep link " + uri + ".");
}
}
}
}
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
33
34
class CustomDeeplinkHandler : IBrazeDeeplinkHandler {
override fun gotoNewsFeed(context: Context, newsfeedAction: NewsfeedAction) {
newsfeedAction.execute(context)
}
override fun gotoUri(context: Context, uriAction: UriAction) {
val uri = uriAction.uri.toString()
// Open YouTube URLs in the YouTube app and not our app
if (!StringUtils.isNullOrBlank(uri) && uri.contains("youtube.com")) {
uriAction.useWebView = false
}
val customUriAction = CustomUriAction(uriAction)
customUriAction.execute(context)
}
class CustomUriAction(uriAction: UriAction) : UriAction(uriAction) {
override fun openUriWithActionView(context: Context, uri: Uri, extras: Bundle) {
val intent = getActionViewIntent(context, uri, extras)
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TOP or Intent.FLAG_ACTIVITY_SINGLE_TOP
if (intent.resolveActivity(context.packageManager) != null) {
context.startActivity(intent)
} else {
BrazeLogger.w(TAG, "Could not find appropriate activity to open for deep link $uri.")
}
}
}
companion object {
private val TAG = BrazeLogger.getBrazeLogTag(CustomDeeplinkHandler::class.java)
}
}
アプリ設定へのディープリンク
ディープリンクでアプリの設定を直接開くようにするには、カスタムのBrazeDeeplinkHandler
が必要です。以下の例では、open_notification_page
と呼ばれるカスタムのキーと値のペアが存在すると、ディープリンクがアプリの設定ページを開きます。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
BrazeDeeplinkHandler.setBrazeDeeplinkHandler(new IBrazeDeeplinkHandler() {
@Override
public void gotoUri(Context context, UriAction uriAction) {
final Bundle extras = uriAction.getExtras();
if (extras.containsKey("open_notification_page")) {
Intent intent = new Intent();
intent.setAction("android.settings.APP_NOTIFICATION_SETTINGS");
intent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
//for Android 5-7
intent.putExtra("app_package", context.getPackageName());
intent.putExtra("app_uid", context.getApplicationInfo().uid);
// for Android 8 and later
intent.putExtra("android.provider.extra.APP_PACKAGE", context.getPackageName());
context.startActivity(intent);
}
}
@Override
public void gotoNewsFeed(Context context, NewsfeedAction newsfeedAction) {}
});
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
BrazeDeeplinkHandler.setBrazeDeeplinkHandler(object : IBrazeDeeplinkHandler {
override fun gotoUri(context: Context, uriAction: UriAction) {
val extras = uriAction.extras
if (extras.containsKey("open_notification_page")) {
val intent = Intent()
intent.action = "android.settings.APP_NOTIFICATION_SETTINGS"
intent.flags = Intent.FLAG_ACTIVITY_NEW_TASK
//for Android 5-7
intent.putExtra("app_package", context.packageName)
intent.putExtra("app_uid", context.applicationInfo.uid)
// for Android 8 and later
intent.putExtra("android.provider.extra.APP_PACKAGE", context.packageName)
context.startActivity(intent)
}
}
override fun gotoNewsFeed(context: Context, newsfeedAction: NewsfeedAction) {}
})
ニュースフィードへのディープリンク{#Android_Deep_Advance}
ニュースフィードは非推奨になります。Braze では、News Feed ツールを使用するお客様は、コンテンツカードメッセージングチャネルに移動することを推奨しています。これは、より柔軟でカスタマイズ可能で、信頼性が高いチャネルです。詳しくはマイグレーションガイドをご覧ください。
プッシュ通知から Braze ニュースフィードにディープリンクするには、ニュースフィードアクティビティのカスタムディープリンクを作成します。
次に、プッシュ通知キャンペーンを設定する際に (ダッシュボードまたは API を通じて) 、 ニュースフィードのディープリンクに移動するように通知を構成します。
カスタム WebView アクティビティ{#Custom_Webview_Activity}
デフォルトでは、Braze によってアプリ内でウェブサイトのディープリンクが開かれると、BrazeWebViewActivity
によって処理されます。これを変更するには、以下を行います。
1.キーcom.braze.Constants.BRAZE_WEBVIEW_URL_EXTRA
でIntent.getExtras()
から対象の URL を扱うアクティビティを新規作成します。例については、BrazeWebViewActivity.java
を参照してください。
2.そのアクティビティをAndroidManifest.xml
に追加し、exported
をfalse
に設定します。
1
2
3
<activity
android:name=".MyCustomWebViewActivity"
android:exported="false" />
3.カスタムアクティビティをBrazeConfig
ビルダーオブジェクトに設定します。ビルダーをビルドし、Application.onCreate()
内のBraze.configure()
に渡します。
1
2
3
4
5
BrazeConfig brazeConfig = new BrazeConfig.Builder()
.setCustomWebViewActivityClass(MyCustomWebViewActivity::class)
...
.build();
Braze.configure(this, brazeConfig);
1
2
3
4
5
val brazeConfig = BrazeConfig.Builder()
.setCustomWebViewActivityClass(MyCustomWebViewActivity::class.java)
...
.build()
Braze.configure(this, brazeConfig)