我的应用程序可以知道使用哪个二维码下载它吗

Can my App know which QR code was used to download it

我正在构建一个 Android 应用程序 (SDK 24+),使用 Google Firebase 等云服务作为我的后端。

我想要实现的是拥有多个唯一的 QR 码,所有这些都会导致我的应用程序被下载。 同时,我希望我的应用知道它是从哪个 QR 下载的。
实际上,除了使用不同的二维码下载我的应用程序外,我还希望它们在我的应用程序中充当唯一 ID。

示例:
假设我们有 5 个不同的 QR:QR-a、QR-b、QR-c、QR-d、QR-e。 我希望他们中的所有 5 个都导致我的应用程序被下载,并且一旦下载完成,我希望我的应用程序知道用于下载它的 QR,无论是 QR-a、QR-b 还是其他任何一个。

我自己的想法:
根据我的理解,第一部分 (不同的 QR 下载相同的应用程序) 应该是可行的,但第二部分 (应用程序知道它是从哪个 QR 下载的)偶可行吗?
我知道像 Google Analytics 这样的服务提供了很多关于使用二维码的 device/user 的细节。 也许,在使用 QR 下载应用程序后,应用程序可以查询 Google Analytics 关于用户使用哪个 QR 码下载它。

我是第一次使用二维码,所以我对它们的理解可能存在根本性的缺陷。
任何关于如何解决这个问题的想法或想法将不胜感激。

如果您的所有链接都指向 Google Play 商店,则可以使用 Google Play Store Install Referrer API.

正在将数据传递到 Google Play 商店

您的二维码需要将用户指向您应用的商店页面。此外,他们需要使用 referrer URL 参数传递更多数据。

您的其中一个链接可能如下所示:

https://play.google.com/store/apps/details?id=com.example.okariotisapp&referrer=qrdata%3DQR-a

这个URL由以下部分组成:

  • URL Google Play 商店中应用商店页面的基础:
    • https://play.google.com/store/apps/details?id=
  • 您的申请ID:
    • com.example.okariotisapp
  • referrerURL参数:
    • &referrer=
  • 您可以自由选择的键值数据。在这种情况下,qrdata 作为键,QR-a 作为值(注意,%3D 是 HTML URL 对 = 的编码) :
    • qrdata%3DQR-a

在应用程序中访问引荐数据

访问引用数据的最简单方法是使用 Play Install Referrer Library

将依赖项添加到库中,并在您的应用安装并启动后建立与 Play 商店的连接。在 onInstallReferrerSetupFinished 回调中,如果连接的 responseCode 等于 InstallReferrerResponse.OK

,则访问 referrer 数据
private lateinit var referrerClient: InstallReferrerClient

referrerClient = InstallReferrerClient.newBuilder(this).build()
referrerClient.startConnection(object : InstallReferrerStateListener {

    override fun onInstallReferrerSetupFinished(responseCode: Int) {
        when (responseCode) {
            InstallReferrerResponse.OK -> {
                // Connection established, access your data
                val response: ReferrerDetails = referrerClient.installReferrer
                val referrerUrl: String = response.installReferrer
                //TODO: Evaluate which Play Store URL was used to install your app
            }
            InstallReferrerResponse.FEATURE_NOT_SUPPORTED -> {
                // API not available on the current Play Store app.
            }
            InstallReferrerResponse.SERVICE_UNAVAILABLE -> {
                // Connection couldn't be established.
            }
        }
    }

    override fun onInstallReferrerServiceDisconnected() {
        // Try to restart the connection on the next request to
        // Google Play by calling the startConnection() method.
    }
})

来源:https://developer.android.com/google/play/installreferrer/library

测试

为了对此进行测试,您需要将您的应用程序上传到 Play 商店,进入内部、alpha、beta 或生产轨道。据我所知,这不适用于 internal app sharing.