延迟深度链接到 android 上的外部应用程序

Posted

技术标签:

【中文标题】延迟深度链接到 android 上的外部应用程序【英文标题】:Deferred deep-linking to an external app on android 【发布时间】:2019-11-02 04:48:31 【问题描述】:

我想在 android 上执行从我的应用到外部应用(我无法控制的应用)的延迟深层链接。 如果设备上没有安装应用程序,它可以完美地在 Playstore 中打开应用程序,如果确实安装了应用程序并在应用程序的特定位置打开意图,它也可以正常工作。 我正在努力安装应用程序,然后当用户打开应用程序时,重定向到 Intent 指定的位置。

我现在这样做的方式是检查应用程序是否已安装,如果已安装,我会以在所需位置打开应用程序的意图打开它。这两个意图符合我的预期:首先打开 Play 商店并安装应用,另一个在特定位置打开应用。

    fun start() 
        if (isAppInstalled()) 
            startAppWithIntent(deepLink)
         else 
            goToPlayStore()
        
    

    private fun isAppInstalled(): Boolean =
        activity.packageManager.getLaunchIntentForPackage("com.myapp.xx") != null

    private fun startAppWithIntent(deepLink: String) 
        val startAssetIntent = Intent(Intent.ACTION_VIEW, Uri.parse(deepLink))
        activity.startActivity(startAssetIntent)
    

    private fun goToPlayStore() 
        val goToPlayStoreIntent = Intent(
            Intent.ACTION_VIEW, Uri.parse("https://play.google.com/store/apps/details?id=com.myapp.xx")
        ).apply 
            setPackage("com.android.vending")
        

        activity.startActivity(goToPlayStoreIntent)
        activity.finish()
    

然而问题在于,当应用程序未安装并且用户安装并打开应用程序时,它会在应用程序的主页上打开。

如何构建一个 Intent,首先安装应用程序,然后在所需位置一次性打开应用程序?甚至可能吗?或者这是已安装应用的责任?

【问题讨论】:

当您点击sharedLink 时,如果设备上未安装应用程序,Android 将不会显示该应用程序。你的问题有点令人困惑。您能否详细说明您的要求? 另一个应用程序应该像这样处理特定的深层链接developer.android.com/studio/write/app-link-indexing 是的,@pantos27 说的是正确的。接收应用似乎需要有一个BroadcastReceiver(),它可以在安装应用时监听事件。 【参考方案1】:

@pantos27 所说的是正确的。似乎接收应用程序需要有一个BroadcastReceiver(),它可以在安装应用程序时收听event。 详情请见Official Docs

【讨论】:

以上是关于延迟深度链接到 android 上的外部应用程序的主要内容,如果未能解决你的问题,请参考以下文章

XING - 如何在 iOS 上的 Android 上进行深度链接?

在 React Native 应用程序中使用 Branch.io 在 iOS 中延迟深度链接

如果用户没有安装应用程序,Android 深度链接

我无法检索应在 Android 上的意图数据内的 Firebase 动态链接

iOS 中的延迟深度链接

从 Facebook 广告到第 3 方应用的深度链接