区分苹果推送通知的分发和开发
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
当我启动该应用程序时,它会注册推送通知,并根据配置文件生成不同的推送令牌。
由于 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