アプリ内でスナップショット ウィジェットを固定する

Android 8.0(API レベル 26)以上では、アプリ内でウィジェットをホーム画面に固定できるようにすることができます。アプリ内で直接ウィジェットを宣伝することは、ユーザー エンゲージメントを高めるうえで非常に効果的です。特に、ユーザーが関連するタスクを完了した後や、アプリ内の機能を繰り返し利用している場合に効果があります。

PIN リクエストを作成する

ウィジェットのピン留めを開始するには、GlanceAppWidgetManager クラスの requestPinGlanceAppWidget メソッドを使用します。Android の下位バージョンで実行されているアプリの場合、これは false を返します。ただし、リクエストがシステムに正常に送信された場合は true を返します。

PIN リクエストを作成する方法の例を次に示します。

@Composable
fun AnInAppComposable() {
    val context = LocalContext.current
    val coroutineScope = rememberCoroutineScope()
    Button(
        onClick = {
            coroutineScope.launch {
                GlanceAppWidgetManager(context).requestPinGlanceAppWidget(
                    receiver = MyWidgetReceiver::class.java,
                    preview = MyWidget(),
                    previewState = DpSize(245.dp, 115.dp)
                )
            }
        }
    ) {}
}

この例では、MyWidgetReceiver はウィジェットのコールバックを受け取るクラスで、MyWidget は固定する Glance ウィジェットです。successCallback は、ウィジェットが正常に固定されたときにトリガーされる PendingIntent です。

PIN リクエストのレスポンスを処理する

ユーザーが PIN リクエスト ダイアログに応答すると、アプリはレスポンスを受け取ります。ユーザーがリクエストを承認すると、ウィジェットがホーム画面に固定され、successCallback PendingIntent がトリガーされます。ユーザーがリクエストを拒否した場合、何も起こりません。

successCallback は、ウィジェットがホーム画面に正常に追加された場合にのみトリガーされることに注意してください。ユーザーがリクエストを拒否した場合や、ランチャーが固定をサポートしていない場合はトリガーされません。