با مجموعهها، منظم بمانید
ذخیره و طبقهبندی محتوا براساس اولویتهای شما.
دستور پخت بکاستک مصنوعی دیپ لینک
این دستورالعمل نحوه اعمال اصول ناوبری در زمینه لینکهای عمیق را با مدیریت یک backStack مصنوعی و پشتههای وظیفه نشان میدهد.
ساختار دستور پخت
این دستورالعمل یک سناریوی دنیای واقعی را شبیهسازی میکند که در آن «برنامه A» به «برنامه B» لینک عمیق میدهد.
«برنامه A» توسط ماژول syntheticbackstack شبیهسازی میشود، که شامل SyntheticBackStackDeepLinkActivity است که به شما امکان میدهد یک intent لینک عمیق ایجاد کنید و آن را در Task موجود یا در یک Task جدید فعال کنید.
«برنامه B» توسط ماژول syntheticbackstackapp شبیهسازی میشود، که شامل SyntheticBackStackAppActivity است که شما به آن deeplink میکنید. این ماژول به شما نشان میدهد که چگونه یک backStack مصنوعی بسازید و چگونه پشته Task را به درستی مدیریت کنید تا از دکمههای Back و Up پشتیبانی کند.
نحوه استفاده
مطمئن شوید که هم app اصلی و هم syntheticbackstackapp روی شبیهساز یا دستگاه متصل نصب شدهاند. مطمئن شوید که syntheticbackstackapp نصب شده از لینک "www.nav3deeplink.com" پشتیبانی میکند.
در صفحه فرود دستور پخت، فیلترها را انتخاب کنید و روی دکمه پیوند عمیق کلیک کنید. این کار شما را به فعالیت syntheticbackstackapp میبرد.
چگونه کار میکند؟
این دستورالعمل از دستورالعمل لینکهای عمیق که در اینجا خلاصه شده است، پیروی میکند.
برای مشاهده رفتار Existing Task :
- باز کردن لینک عمیق با استفاده از وظیفه فعلی
- در دستگاه، برای دیدن همه برنامههای اخیر، انگشت خود را به بالا بکشید
- توجه داشته باشید که Activity جدید درون برنامه Nav3Recipes باز شده است.
- برای بازگشت به اکتیویتی اصلی، روی دکمهی برگشت کلیک کنید.
- مرحله ۱ را تکرار کنید
- برای رفتن به صفحه اصلی، روی دکمه بالا کلیک کنید
- در دستگاه، برای دیدن همه برنامههای اخیر، انگشت خود را به بالا بکشید
- توجه داشته باشید که Activity جدید اکنون در برنامه Nav3SyntheticBackStack باز شده است.
برای مشاهده رفتار New Task :
- باز کردن لینک عمیق با استفاده از وظیفه جدید
- در دستگاه، برای دیدن همه برنامههای اخیر، انگشت خود را به بالا بکشید
- توجه داشته باشید که Activity جدید در برنامه Nav3SyntheticBackStack باز شده است.
- برای رفتن به صفحه اصلی، روی دکمه بالا یا عقب کلیک کنید
پیادهسازی اصلی
توابع کمکی اصلی برای navigationUp و ساخت backStack مصنوعی را میتوانید اینجا پیدا کنید.
ادامه مطلب
برای راهنمای جامع در مورد اصول لینکسازی عمیق و نحوهی اعمال آنها در ناوبری ۳، به راهنمای لینکسازی عمیق مراجعه کنید.

کاوش
دستور پخت کامل را در گیتهاب ببینید.
arrow_forward package com.example.nav3recipes.deeplink.handlerequests.syntheticbackstack
import android.content.Intent
import android.os.Bundle
import androidx.activity.ComponentActivity
import androidx.activity.compose.setContent
import androidx.compose.runtime.getValue
import androidx.compose.runtime.mutableStateOf
import androidx.compose.runtime.remember
import androidx.compose.runtime.setValue
import androidx.core.net.toUri
import androidx.lifecycle.compose.dropUnlessResumed
import com.example.nav3recipes.common.deeplink.EntryScreen
import com.example.nav3recipes.common.deeplink.LIST_FIRST_NAMES
import com.example.nav3recipes.common.deeplink.LIST_LOCATIONS
import com.example.nav3recipes.common.deeplink.MenuDropDown
import com.example.nav3recipes.common.deeplink.PaddedButton
import com.example.nav3recipes.common.deeplink.TextContent
import com.example.nav3recipes.ui.setEdgeToEdgeConfig
internal const val ADVANCED_PATH_BASE = "https://www.nav3deeplink.com"
/**
* The recipe entry point that allows users to create a deep link and make a request with it.
*
* **HOW THIS RECIPE WORKS** This recipe simulates a real-world scenario where "App A" deep links
* into "App B".
*
* "App A" is simulated by this current module `syntheticbackstack`, which
* contains the [SyntheticBackStackDeepLinkActivity] that allows you to create a deeplink intent and
* trigger that in either the existing Task, or in a new Task.
*
* "App B" is simulated by the module `syntheticbackstackapp`, which contains
* the SyntheticBackStackAppActivity that you deeplink into. That module shows you how to build a synthetic backStack
* and how to manage the Task stack properly in order to support both Back and Up buttons.
*
* See the [README](README.md) file of current module for more info on advanced deep linking.
*/
class SyntheticBackStackDeepLinkActivity: ComponentActivity() {
override fun onCreate(savedInstanceState: Bundle?) {
setEdgeToEdgeConfig()
super.onCreate(savedInstanceState)
setContent {
EntryScreen("Sandbox - Build Your Deeplink Intent") {
val initFirstName = MENU_OPTIONS_FIRST_NAME.values.first().first()
val initLocation = MENU_OPTIONS_LOCATION.values.last().first()
val initTaskStack = MENU_OPTIONS_TASK_STACK.values.first().first()
var firstName by remember { mutableStateOf(initFirstName) }
var location by remember { mutableStateOf(initLocation) }
var taskStack by remember { mutableStateOf(initTaskStack) }
// select first name
MenuDropDown(
menuOptions = MENU_OPTIONS_FIRST_NAME,
) { _, selected ->
firstName = selected
}
// select first name
MenuDropDown(
menuOptions = MENU_OPTIONS_LOCATION,
) { _, selected ->
location = selected
}
// select current task stack or build new task stack
MenuDropDown(
menuOptions = MENU_OPTIONS_TASK_STACK,
) { _, selected ->
taskStack = selected
}
// build final deeplink URL and Intent
val finalUrl = "${ADVANCED_PATH_BASE}/user/$firstName/$location"
// display Intent info
val flagString = if (taskStack == TAG_NEW_TASK) {
"Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK"
} else "<none>"
val intentString = """
| Final Intent:
| data = "$finalUrl"
| action = Intent.ACTION_VIEW
| flags = $flagString
""".trimMargin()
TextContent(intentString)
// deeplink to target
PaddedButton("Deeplink Away!", onClick = dropUnlessResumed {
val intent = Intent().apply {
data = finalUrl.toUri()
action = Intent.ACTION_VIEW
if (taskStack == TAG_NEW_TASK) {
flags = Intent.FLAG_ACTIVITY_NEW_TASK or Intent.FLAG_ACTIVITY_CLEAR_TASK
}
}
startActivity(intent)
})
}
}
}
}
private const val TAG_FIRST_NAME = "firstName"
private const val TAG_LOCATION = "location"
private const val TAG_TASK_STACK = "Task stack"
private const val TAG_CURRENT_TASK = "Use Current Task Stack"
private const val TAG_NEW_TASK = "Start New Task Stack"
private val MENU_OPTIONS_FIRST_NAME = mapOf(
TAG_FIRST_NAME to LIST_FIRST_NAMES
)
private val MENU_OPTIONS_LOCATION = mapOf(
TAG_LOCATION to LIST_LOCATIONS
)
private val MENU_OPTIONS_TASK_STACK = mapOf(
TAG_TASK_STACK to listOf(TAG_CURRENT_TASK, TAG_NEW_TASK),
)
محتوا و نمونه کدها در این صفحه مشمول پروانههای توصیفشده در پروانه محتوا هستند. جاوا و OpenJDK علامتهای تجاری یا علامتهای تجاری ثبتشده Oracle و/یا وابستههای آن هستند.
تاریخ آخرین بهروزرسانی 2026-09-17 بهوقت ساعت هماهنگ جهانی.
[[["درک آسان","easyToUnderstand","thumb-up"],["مشکلم را برطرف کرد","solvedMyProblem","thumb-up"],["غیره","otherUp","thumb-up"]],[["اطلاعاتی که نیاز دارم وجود ندارد","missingTheInformationINeed","thumb-down"],["بیشازحد پیچیده/ مراحل بسیار زیاد","tooComplicatedTooManySteps","thumb-down"],["قدیمی","outOfDate","thumb-down"],["مشکل ترجمه","translationIssue","thumb-down"],["مشکل کد / نمونهها","samplesCodeIssue","thumb-down"],["غیره","otherDown","thumb-down"]],["تاریخ آخرین بهروزرسانی 2026-09-17 بهوقت ساعت هماهنگ جهانی."],[],[]]