【问题标题】:Detect if mobile app was installed from Production Track or Beta Track in AppStore/Play Store检测移动应用程序是从 AppStore/Play Store 中的 Production Track 还是 Beta Track 安装的
【发布时间】:2019-10-14 09:34:06
【问题描述】:

我有一个适用于 AndroidiOS 的移动应用程序,它们都是使用 Xamarin 构建的。

Android - 应用被上传到 Beta Track 上的 Play 商店,一旦测试完成,它就会被推广到 Production Track

iOS - 测试完成后,应用将上传到 Test Flight,在 AppStoreConnect 中创建一个新版本,构建设置为当前处于测试飞行中的应用,并且然后准备出售(因此显示在 Apple AppStore 中)。

有没有办法在移动应用中检测应用是从 Play 商店的 Beta Track 还是 Production Track 安装的(适用于 Android)。对于 iOS,检测应用程序是从 Test flight 还是 App Store 安装的?

我还有 2 个不同的 WCF Web 服务供移动应用程序连接,一个是 Beta 服务,另一个是生产服务,这些端点是在应用程序中硬编码的。

我想要完成的是,当应用程序从生产轨道/应用商店安装然后连接到生产服务端点时,当应用程序从其他任何地方(即 Beta 跟踪/试飞)安装时,然后使用 Beta服务。

我目前正在做的是,当应用程序打开时,用户可以选择在 2 之间进行选择。当涉及到生产版本时,我会从用户那里删除这个选择,只让应用程序进入生产状态。我希望根据用户安装应用程序的位置做出选择。

明确地说,这样做的目的是构建一个可用于 Beta 和 Production 的单一 APK/IPA 应用。

更新 - 有一些有趣的建议使用 API 根据版本号重新路由 Web 服务调用,但这些仍然涉及为应用程序的 Beta 和生产版本构建单独的 APK 文件(这不能解决题)。至于我试图通过检测来自 Beta Track 的安装来完成的工作,目前看来这是不可能的。

【问题讨论】:

  • 使用 android 的 versionCode 区分 Production Track 和 Beta Track
  • @RahulKhurana versionCode 将如何实现它,因为要求在运行时更改同一构建上的域?
  • @RahulKhurana 不幸的是,这意味着要重新构建应用程序并再次将其上传到 Play 商店,这是我目前正在做的并且希望摆脱的。
  • 您可以通过每个API获取versionCode,然后根据版本到服务器索引文件。如果 versionCode 用于生产轨道,则将调用重定向到生产 URL,否则将调用重定向到 beta 轨道 URL
  • @RahulKhurana 我不确定我是否关注?您是说将生产移动版本存储在 WCF 服务上,如果连接到它的移动应用程序匹配,那么它应该只连接到生产服务?这是一个好主意,但会产生更多问题然后修复,例如,一旦您更新服务,测试版用户会发现他们正在连接到生产环境。我仍然想保持这种分离。

标签: android ios xamarin xamarin.forms


【解决方案1】:

对你来说可能有点晚了,但这个答案仍然可以帮助其他人......

在iOS上可以这样找到安装源:

#if DEBUG
    // XCODE INSTALL
#else
    NSURL *receiptURL = [[NSBundle mainBundle] appStoreReceiptURL];
    NSString *receiptURLString = [receiptURL path];
    BOOL isRunningTestFlightBeta =  ([receiptURLString rangeOfString:@"sandboxReceipt"].location != NSNotFound);
    if (isRunningTestFlightBeta) {
        // TESTFLIGHT INSTALL
    }
    else {
        // STORE INSTALL
    }
#endif

我仍然没有 Android 的答案。

【讨论】:

    【解决方案2】:

    我认为目前还不可能。但是,如果您想针对两个不同的 API 域集测试相同的 android 构建,您可以使用 content provider 方法。您可以创建一个管理员/实用程序类型的应用程序,它将通过使用content providers 在您的原始应用程序中传递/更新域。

    我在我的一个产品中遵循了同样的做法,它真的很酷。

    【讨论】:

    • 我认为您是对的,不幸的是,目前不可能。
    猜你喜欢
    • 2019-11-21
    • 2016-09-29
    • 2013-01-03
    • 2023-04-10
    • 1970-01-01
    • 2012-06-04
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多