【问题标题】:Is there an API to allow an android app to determine whether a Google Play user is a tester for the app?是否有 API 允许 Android 应用程序确定 Google Play 用户是否是该应用程序的测试人员?
【发布时间】:2013-12-21 08:58:51
【问题描述】:

我正在开发一个基于 Google Play 服务的应用。我正在使用建议的 BaseGameActivity 超类来继承许多功能。用户可以通过他们的 Google 帐户登录。

我想为 Android 应用的测试人员提供一个特殊的偏好设置。 查看SDKreference后, 我无法找到是否有任何方法可以确定登录用户是否配置为应用程序的测试人员。这可能吗?

是否有其他推荐的方法可以为应用测试人员提供与测试相关的额外功能?例如,在我的游戏应用中,我想让测试人员重置他们的成就和排行榜条目,我发现这可以通过网络服务 call 来完成。

谢谢

【问题讨论】:

  • 您可以将应用的 Alpha 版或 Beta 版添加到 Google Play。然后,您需要邀请电子邮件加入 alpha/beta 组。您的两个 apk 可能几乎相同,但减去一个表明它们是 alpha/beta 测试人员的标志。

标签: android google-play-services


【解决方案1】:

据我所知,没有这样的 API。

我一直在使用的技巧,也欢迎您使用 通过ANDROID_ID判断一个设备是否为测试设备,并fork不同 相应的行为。像这样的:

 static String androidId;
 static boolean isTesterDevice;

 boolean isTesterDevice() {
      if (androidId != null) {
           return isTesterDevice; // optimization: run string compares only once
      }
      androidId = Secure.getString(context.getContentResolver(),Secure.ANDROID_ID);
      isTesterDevice = Arrays.asList(ALL_TESTER_DEVICES).contains(androidId);
      return isTesterDevice;
 }

其中 ALL_TESTER_DEVICES 是一个包含所有测试人员 ANDROID_ID 的字符串数组:

 static final String[] ALL_TESTER_DEVICES = {
     "46ba345347f7909d", 
     "46b345j327f7909d" ... };

一旦我们完成这项工作,我们就可以在我们的代码中创建特定于测试器的逻辑:

 if (isTesterDevice()) {
     perform tester logic
 }

我们还可以将 isTester 字段作为握手的一部分传递给后端服务器 过程,允许它执行自己的一组测试程序处理。

这对于小型测试团队非常有效。当 QA 团队变大时,或 当您无法从某些测试设备中获取其 ID 时,我们会找到它 有助于让我们的测试人员通过添加一个特殊文件来标记他们的身份 SD卡。在这种情况下 isTesterDevice() 将更改为:

 boolean isTesterDevice() {
      if (androidId != null) {
           return isTesterDevice; // optimization: run string compares only once
      }
      // check by device ID
      androidId = Secure.getString(context.getContentResolver(),Secure.ANDROID_ID);
      isTesterDevice = Arrays.asList(ALL_TESTER_DEVICES).contains(androidId);
      if (!isTesterDevice) {
          // check by tester file
          File sdcard = Environment.getExternalStorageDirectory();
          File testerFile = new File(sdcard.getAbsolutePath(), "I_AM_TESTER.txt");
          isTesterDevice = testerFile.exists();
      }
      return isTesterDevice;
 }

希望对你有帮助。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-11-16
    • 1970-01-01
    相关资源
    最近更新 更多