区分苹果推送通知的分发和开发

Distinguish between distribution and development for apple push notificiations

当我启动该应用程序时,它会注册推送通知,并根据配置文件生成不同的推送令牌。

由于 AdHoc 和 AppStore 配置文件都连接到同一台服务器,我必须以某种方式区分它是哪种令牌,以便服务器可以连接到正确的苹果服务器。 (sandbox/production)

如何实现?

我认为实现此目标的最佳方法是在将令牌发送到服务器时进行 development/production 区分,并让服务器在数据库中注释令牌的类型。

您肯定对您的服务器进行了某种 API 调用,该调用正在传递令牌。在该调用中,还要传入令牌类型。例如:

{ "token" : "abcd....", "type" : "development" }

要在构建时真正做出区分,您可以使用预处理器指令来检测它是调试构建、发布构建还是 App Store 构建。

检查调试是否启用很容易,但要区分它是 AdHoc 还是 App Store,请考虑创建用户定义的变量。为此,克隆 Release 方案并创建一个名为 App Store 的方案。然后在您的 Build Settings 中,转到用户定义的变量并创建一个名为 APP_STORE 的变量,但仅限于 App Store 方案。当您发布到商店时,确保您在存档时使用该方案而不是 Release 构建。

然后,检查要传递给 API 的类型就像这样做一样简单:

NSString *type = nil;
#ifdef DEBUG
    type = @"debug";
#elseif APP_STORE
    type = @"app_store";
#else
    type = @"release";
#endif