首页 > 解决方案 > 检测移动应用程序是从 AppStore/Play Store 中的 Production Track 还是 Beta Track 安装的

问题描述

我有一个适用于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 文件(这不能解决问题)。至于我试图通过 Detecting installs from the Beta Track 来完成什么,看起来这目前是不可能的。

标签: androidiosxamarinxamarin.forms

解决方案


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

可以在 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 的答案。


推荐阅读