标签: android-deep-link

隐式深层链接无法正常工作 - onCreate 调用了两次

当我从链接打开我的应用程序时,如果它已经在堆栈上(打开),什么也不会发生。应用程序的现有实例被打开,没有任何重定向。我发现这个意图的原因被称为。所以,我在 onNewIntent 方法中添加了 setIntent(newIntent) ,但它没有帮助。然后我添加了以下代码:

    override fun onNewIntent(intent: Intent?) {
        super.onNewIntent(intent)
        //did not help
        //setIntent(intent)
        findNavController(R.id.container).handleDeepLink(intent)
    }
Run Code Online (Sandbox Code Playgroud)

但是,然后 onNewIntent 被调用两次。点击链接后的日志结果为:(存在app实例时)

2019-11-19 10:43:18.758 D/CORN_DEBUG: onNewIntent
2019-11-19 10:43:18.805 D/CORN_DEBUG: onNewIntent
2019-11-19 10:43:19.248 D/CORN_DEBUG: onCreate Main Activity
Run Code Online (Sandbox Code Playgroud)

否则,结果是:

2019-11-19 10:45:05.272 D/CORN_DEBUG: onCreate Main Activity
2019-11-19 10:45:05.524 D/CORN_DEBUG: onNewIntent
2019-11-19 10:45:06.041 D/CORN_DEBUG: onCreate Main Activity
Run Code Online (Sandbox Code Playgroud)

由于 onCreate 被调用两次,屏幕闪烁。问题是什么?

PS 启动模式是单任务。

android kotlin android-architecture-navigation android-deep-link

6
推荐指数
1
解决办法
448
查看次数

深层链接不适用于 Instragram 故事向上滑动

我有一个指向我们 Android 应用程序的深层链接。当我从 Slack、Whatsapp 或类似这些应用程序中单击它时,该链接工作正常。但是,它不适用于 Instagram Story Swipe Up 功能。当我向上滑动并在我们的移动网站上看到该页面时,它会打开他们的浏览器。

有什么问题?

mobile android mobile-website instagram android-deep-link

6
推荐指数
0
解决办法
393
查看次数

深度链接在 Android 上的 React Native 应用程序中不起作用

我已经将我的 React Native 应用程序设置为将深度链接与 expo-linking 结合使用,但由于某种原因,它无法在 Android 上运行(尚未在 iOS 上实现)。打开链接只会在网络浏览器中打开它,而不会按应有的方式打开应用程序。知道为什么吗?

应用程序.json

"android": {
  "adaptiveIcon": {
    "foregroundImage": "./assets/adaptive-icon.png",
    "backgroundColor": "#FFFFFF"
  },
  "package": "com.example.myapp",
  "intentFilters": [
    {
      "action": "VIEW",
      "data": [
        {
          "scheme": "https",
          "host": "testlink.com",
        }
      ],
      "category": [
        "BROWSABLE",
        "DEFAULT"
      ]
    }
  ]
},
Run Code Online (Sandbox Code Playgroud)

这并没有更新AndroidManifest,所以我手动编辑了它:

AndroidManifest.xml

<intent-filter>
  <action android:name="android.intent.action.MAIN"/>
  <category android:name="android.intent.category.LAUNCHER"/>
</intent-filter>
<intent-filter>
   <action android:name="android.intent.action.VIEW"/>
   <category android:name="android.intent.category.DEFAULT"/>
   <category android:name="android.intent.category.BROWSABLE"/>
   <data android:scheme="https" android:host="testlink.com"/>
</intent-filter>
Run Code Online (Sandbox Code Playgroud)

应用程序.js

const linking = {
    prefixes: ["https://testlink.com"],    
};

useEffect(() => {
    Linking.addEventListener("url", handleDeepLink);

    return () => { …
Run Code Online (Sandbox Code Playgroud)

android react-native expo android-deep-link expo-linking

6
推荐指数
1
解决办法
4407
查看次数

在 Compose 中使用 DeepLinks 会导致无法向后导航

我有一个 FirebaseMessagingService 子类,它接收通知负载,然后使用以下 PendingIntent 创建推送通知:

        TaskStackBuilder.create(this).run {
            addNextIntentWithParentStack(
                Intent(
                    Intent.ACTION_VIEW,
                    "eway://traversals_monthly_bill_details".toUri()
                )
            )
            getPendingIntent(2345, PendingIntent.FLAG_UPDATE_CURRENT)
        }
Run Code Online (Sandbox Code Playgroud)

以下是导航的各个嵌套图的可组合项:

    composable(Screens.INTERMEDIATE_MONTHLY_BILLINGS.navRoute,
        deepLinks =
        listOf(
            navDeepLink {
                uriPattern =
                    "eway://traversals_monthly_bill_details"
            }
        )) {
        IntermediateMonthlyBillings({ statements ->
            val lastIndex = statements.lastIndex
            val gson = GsonBuilder().create()
            val statementsByYearJson = gson.toJson(statements)
            navController.navigate("${Screens.MONTHLY_BILLINGS}/$statementsByYearJson/$lastIndex")
        })
    }
    composable("${Screens.MONTHLY_BILLINGS.navRoute}/{statementsByYear}/{initialIndex}",
        arguments = listOf(
            navArgument("statementsByYear") {},
            navArgument("initialIndex") {
                type = NavType.IntType
            }
        )
    ) {
        val gson = GsonBuilder().create()
        val statementsByYear = gson.fromJson(
            it.arguments?.getString("statementsByYear"),
            AllStatementsByYear::class.java
        )
        MonthlyBillings(statementsByYear, it.arguments?.getInt("initialIndex")!!)
        updateCurrentScreen(Screens.MONTHLY_BILLINGS)
    }
Run Code Online (Sandbox Code Playgroud)

这是中间屏幕:

@Composable
fun …
Run Code Online (Sandbox Code Playgroud)

android kotlin android-deep-link android-jetpack-compose

6
推荐指数
1
解决办法
1095
查看次数

升级gradle后Deeplink问题

我有使用带有导航组件的深层链接的应用程序。在使用 AGP 8.0.2 和 gradlewrapper 8.0 之前,一切都很完美。我已验证,仅此更新会导致系统中识别我的深层链接崩溃,从而导致错误“活动未启动,无法解析意图”

我的深层链接配置如下:

//MAnifest
<activity
            android:name=".delivery.DeliveryActivity"
            android:exported="true"
            android:launchMode="singleTask"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="adjustPan"
            tools:ignore="LockedOrientationActivity">
            <nav-graph android:value="@navigation/delivery_nav_graph" />

            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data
                    android:scheme="myschemea://"
                    android:host="myhost.com"
                    android:pathPrefix="/receipt/delivery" />
            </intent-filter>
        </activity>
/**
* Graph
*/

 <fragment
        android:id="@+id/delivery_payment_result"
        android:name="mypackage.delivery.payment.DeliveryPaymentResultFragment"
        android:label="@string/payment_result_title">

        <deepLink
            android:autoVerify="false"
            app:mimeType="type/subtype"
            app:uri="myschema://myhost/receipt/delivery" />
     
    </fragment>
Run Code Online (Sandbox Code Playgroud)

我没有权利(WTF)将其发布在谷歌问题跟踪器上,所以写在这里。也许有人知道发生了什么事?如前所述 - 比较当前版本的应用程序和相同但具有反向 gradle 更新的结果,结果非常清晰

编辑:我运行了更多检查,似乎仅更新 AGP 就会造成麻烦。他们现在已经发布了 8.1.1,问题保持不变。

android gradle android-manifest android-gradle-plugin android-deep-link

6
推荐指数
1
解决办法
218
查看次数

NavDeepLinkBuilder:到 startDestination 的深层链接

我们试图实现的是,当用户点击通知时,他/她应该被重定向到某个片段。该目标片段被标记为startDestination图中所示(它有自己的.xml文件)。

为此PendinIntent,我们使用NavDeepLinkBuilder如下命令:

// `this` represents the notification service.
NavDeepLinkBuilder(this)
    .setGraph(R.navigation.destination_graph)
    .setDestination(R.id.start_destination)
    .createPendingIntent()
Run Code Online (Sandbox Code Playgroud)

其中是在根标记的属性R.id.start_destination中指定的片段的 id,也称为该图的起始目的地。app:startDestinationnavigationR.navigation.destination_graph

如果我们尝试使用它,我们会收到以下错误。如果我们使用除标记为 的片段之外的任何其他片段startDestination,它可以无缝工作。

我们的图表是这样的

实际情况可能是什么?解决方法是什么?

编辑:如果图表与上面的图表类似,但缺少其android:id属性并且未包含在 中BottomNavigationView,则错误将更改为Caused by: java.lang.IllegalStateException: unknown destination during deep link: 0(第 3 行)

EDIT2:上面的场景,但是这次图表有一个ID,并且没有在任何BottomNavigationView中使用。错误变成Caused by: java.lang.IllegalStateException: unknown destination during deep link: test.ourapp.app:id/messages

android android-architecture-navigation android-deep-link

5
推荐指数
0
解决办法
1730
查看次数

使用 Android 导航组件的深层链接和动画

我正在尝试实现忘记密码流程。我想做的是在应用程序内处理收到的电子邮件,其中包含指向忘记密码网页的链接。

我使用导航组件创建了一个深层链接,该链接打开正确的片段(带有密码字段的片段)。所以我可以更改密码。单击“返回”,我返回到登录屏幕,这是导航图的起点。

除了动画之外,一切都按预期进行。当我在目的地之间创建操作时,我可以分配进入/退出/popenter/popexit 动画,但通过深层链接,我不会创建任何操作,因此当我推回时,我到达了预期的片段,但没有动画玩过。

我尝试了一下代码,但没有结果,而且我在文档中找不到任何可能的解决方案。

我尝试在导航图中创建一些操作(右键单击目的地有 4 个不同的选项:

  • 到目的地(最常见也是我经常使用的)
  • 对自己(我不明白这样做的目的)
  • 返回源(我不明白这样做的目的)
  • 全球的

他们似乎都没有解决我的问题。有想法吗?提前致谢。

animation android fragmenttransaction android-architecture-navigation android-deep-link

5
推荐指数
1
解决办法
1591
查看次数

来自 Notification 的深层链接 - 如何通过 backstack 向上传递数据?

在我的应用程序中,用户可以选择一个类别,然后在该类别中选择一个项目以最终查看项目详细信息。标准/转发流程是:

SelectCategoryFragment-> SelectItemFragment->ViewItemDetailsFragment

在选择类别时,selectedCatId通过Bundlefrom SelectCategoryFragmentto传递SelectItemFragment

    NavController navController = Navigation.findNavController(v);
    Bundle args = new Bundle();
    args.putLong(SelectItemFragment.ARG_CATEGORY_ID, selectedCatId);
    navController.navigate(R.id.action_nav_categories_to_items, args);
Run Code Online (Sandbox Code Playgroud)

SelectItemFragment然后将使用该getArguments().getLong(ARG_CATEGORY_ID)值来查询和显示所选类别中的相应项目。

这很好用。但是我现在正在尝试在用户点击通知时实现深度链接,将他们直接跳转到ViewItemDetailsFragment一个可以将他们带到SelectItemFragment, then的后台堆栈SelectCategoryFragment

我的问题是,如上所述,SelectItemFragment取决于ARG_CATEGORY_ID传递给它的参数以检索/显示其数据。我已经阅读了深层链接嵌套导航图,但真的不知道如何通过ARG_CATEGORY_ID深层链接/反向堆栈。

当用户按回时,是否有一种整洁的方式可以将数据从 传递ViewItemDetailsFragmentSelectItemFragment

android android-architecture-components android-architecture-navigation android-deep-link android-navigation-graph

5
推荐指数
1
解决办法
620
查看次数

在 Flutter 移动应用程序中打开重置密码链接

在我的 Flutter 移动应用程序中,身份验证由我自己的服务器 API 处理

\n

目前,我的移动应用程序中有一个询问重置密码功能,它将重置密码链接发送到用户\xe2\x80\x99s 电子邮件收件箱。

\n

此链接会在用户\xe2\x80\x99s浏览器中打开一个网页,用户可以在其中输入新密码。

\n
\n

我不打开网页,而是喜欢此链接,在特定的重置密码路线上打开我的移动应用程序+坚持并向该路线提供重置密码代码

\n

我的链接应该具有什么样的属性才能实现此行为并向路由提供重置代码

\n

有没有办法在不使用 Firebase 动态链接的情况下实现这一切?

\n

我需要在 Flutter 应用程序中设置什么才能实现这些逻辑?

\n

I\xe2\x80\x99m 使用 BLoC 状态管理。

\n

deep-linking ios-universal-links flutter android-deep-link

5
推荐指数
1
解决办法
1388
查看次数

原生Android应用程序如何支持多个SSO提供商并允许用户使用不同的帐户登录而无需在Chrome中手动注销

我正在尝试在本机 Android 应用程序中实现 SSO 登录,并希望遵循RFC 8252 (OAuth 2.0 for Native Apps)中概述的最佳实践。这需要使用自定义选项卡而不是 WebViews

B.2. Android 实现细节

应用程序可以通过 Android 自定义选项卡功能在浏览器中发起授权请求,而无需用户离开应用程序,该功能实现了应用程序内浏览器选项卡模式。当没有浏览器支持自定义选项卡时,可以使用用户的默认浏览器来处理请求。

登录过程正常工作,但是一旦用户在 Chrome 自定义选项卡中使用特定帐户登录,则如果不手动在 Chrome 中注销,则无法使用其他帐户登录。

在 iOS 上,可以使用参数设置为 的 来解决此问题ASWebAuthenticationSessionprefersEphemeralWebBrowserSessiontrue此解决方案在 Android 上不可用。

Chrome 确实为隐身自定义选项卡提供了实验性支持,但这需要用户选择加入,并在触发应用程序的深层链接时显示隐私警告。

我正在寻找一种解决方案,允许本机 Android 应用程序支持多个 SSO 提供商,并允许用户使用不同的帐户登录,而无需在 Chrome 中手动注销。

android single-sign-on oauth-2.0 chrome-custom-tabs android-deep-link

5
推荐指数
0
解决办法
413
查看次数