【问题标题】:Determine if device token is sandbox or distribution确定设备令牌是沙盒还是分发
【发布时间】:2011-08-18 07:02:34
【问题描述】:

有没有办法确定设备令牌是沙盒还是分发?我们正在测试,应用程序有时使用开发证书签名,而其他应用程序使用临时证书(分发证书)签名。这是因为我们正在将应用程序传递给提供的 100 个临时测试设备中的一些设备,并且还在我们的设备上构建开发签名的应用程序。 因为发送推送通知需要我们选择合适的推送服务器和 pem 文件,所以如果能够确定令牌是沙盒还是分发,以适当的方式发送通知,以便推送通知成功,那就太好了。 我们有时必须使用分发配置文件来签署我们的应用程序,因此测试推送通知系统需要我们正确传递这些通知。

【问题讨论】:

    标签: apple-push-notifications devicetoken


    【解决方案1】:
    1. 打开项目构建设置
    2. 进入预处理设置
    3. 在“Preprocessor macros not used in precompiled headers”下(假设您没有在 .pch 文件中分支代码),在 Release 下添加 TOKEN_ENV_SANDBOX=0,在 Debug and Ad Hoc 下添加 TOKEN_ENV_SANDBOX=1。
    4. 在您的代码中,只要使用编译器指令即可

    #if !TOKEN_ENV_SANDBOX
    NSLog(@"TOKEN_ENV==PRODUCTION");
    #endif

    #if TOKEN_ENV_SANDBOX
    NSLog(@"TOKEN_ENV==SANDBOX");
    #endif

    编辑: 更正了上面的一个问题。

    【讨论】:

    • 如何将 Adhoc 添加到我的“预编译头文件中未使用的预处理器宏”
    • 我可以知道这是否仍然有效?我注意到一些用户被标识为沙盒令牌,与 App Store 的版本相同。
    • 为什么对于 Ad Hoc,TOKEN_ENV_SANDBOX 为 0?对于调试,TOKEN_ENV_SANDBOX=1?有错吗?
    • @neobie 不错。非常古老的答案,我很惊讶没有人抓住它:)
    • 另外,如果您使用的是 HTTP/2,“新”方式是可用于沙盒和生产 APN 的单一令牌
    【解决方案2】:

    这是苹果要说的

    您可以通过选择代码签名身份来确定您在 Xcode 中所处的环境。如果您看到“iPhone Developer: Firstname Lastname”证书/配置配置文件对,则您处于沙盒环境中。如果您看到“iPhone Distribution: Companyname”证书/配置文件对,则说明您处于生产环境中。

    【讨论】:

      【解决方案3】:

      在 Apple LLVM 7.0 - 预处理下将预处理器宏添加到目标的构建设置。然后在调试下添加类似:

      isRunningInDevModeWithDevProfile=1

      然后在您的 .pch 中,您可以执行以下操作:

      // AZ - 01282016 - Determine which environment we are running in for APNS
      # ifdef isRunningInDevModeWithDevProfile
      #     define isAPNSSandbox YES
      #else
      #    define isAPNSSandbox NO
      #endif
      

      然后你需要在你的代码中检查它,你可以这样做:

      NSString *ifAppIsRunningFromXcodeUsingNonReleaseProfile;
      
      if (isAPNSSandbox) {
          ifAppIsRunningFromXcodeUsingNonReleaseProfile = @"dev";
      } else {
          ifAppIsRunningFromXcodeUsingNonReleaseProfile = @"prod";
      }
      

      我们将此值传递回我们的 APNS 服务器,以便它知道在调用 Apple 的 APNS 时要走哪条路径。

      我建议这样做的原因是,在这种情况下,如果您在非调试目标中未定义预处理器宏,则在您尝试构建它时不会导致错误。

      当然,有更好形式的解决方案,但这是启动和运行此功能的一种相当安全且快速的方法。

      【讨论】:

        【解决方案4】:

        我阅读了上面的所有答案,它们都是正确的,但没有回答基本问题:“设备令牌是沙箱还是分发?”。

        这是因为他们检测构建配置,不是令牌质量

        在解决了这个问题几天后,我得到了直接的解决方案:

        您使用真正的 Apple Push Notification Server 获得的测试令牌。您可以使用与服务器对话的简单应用程序,您只需要对其进行配置。

        我确实为 macOS 或其他任何地方使用了这个简单的应用程序“Easy APNs Provider”。

        https://itunes.apple.com/us/app/easy-apns-provider-push-notification/id989622350?mt=12

        我在 macOS 应用程序中的核心问题是,我不断在调试和发布配置中获取生产令牌。

        当您检测到问题所在时,您可以使证书无效以 100% 确保它不会受到损害。

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2020-06-29
          • 2018-01-21
          • 1970-01-01
          • 1970-01-01
          • 2013-12-11
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多