首先,如果我错过了对苹果构建/部署模型的一些基本理解,我很抱歉,我对此非常陌生。
一点背景 - 我参与的应用程序是appstore-distributed应用程序,但该公司希望能够在发布到appstore之前在内部分发beta版本和/或选择客户。 adhoc分布模型并不真正适用于此(设备ID未提前知道),因此我们使用“InHouse”分布模型。这意味着在开发者控制台中我们有两个不同的“组织” - 一个用于构建appstore,另一个用于内部构建。
应用程序本身是一个“瘦身”客户端,它与后端服务器交互以实现其大量功能。在服务器端,我们有生产环境,我们也有一个公共的“预启动”环境。可以将客户端配置为使用这些环境中的任何一个(测试版和公开发布的客户端版本都可以使用生产服务器或预启动服务器)
一切正常。
但现在,我们正在添加推送通知。这似乎是直截了当 - 当应用程序连接到它注册的1个环境时,并注销其他...因此应用程序仅从它所连接的环境(或最后一个)获取通知。但是在服务器/配置方面,我不知道如何使它工作。因为苹果不支持同一组织的内部和appstore配置文件,所以这两个版本由不同的“组织”完成并被视为不同的应用程序 - 我如何才能将这两个“应用程序”识别为同一个应用程序,能否使用服务器端的相同密钥向其中任何一个发送通知?
答案 0 :(得分:1)
我们的系统设置非常相似,App Store分布式应用程序和用于beta测试的内部企业应用程序。为了推动工作,您需要知道使用了哪个分发渠道并使用适当的密钥。流程看起来像这样:
企业签名的应用获得application:didRegisterForRemoteNotificationsWithDeviceToken:
。
应用程序将注册发送到您的服务器{"device-token":token, "distribution": "enterprise"}
您的服务器将这对值存储在数据库中。
当事件触发通知时,您会查找将其发送给将令牌和分发类型视为目标地址的人。
发送通知时,请使用分发类型选择密钥。像往常一样使用令牌和其他所有内容。
至于识别哪个版本的应用是企业签名而不是应用商店,您只需要有一些方法来检测它。我们使用不同的包标识符:
if ([[NSBundle mainBundle].bundleIdentifier isEqualToString:@"com.stackexchange.stackexchange"]) {
return @"app-store";
} else {
return @"enterprise";
}
您可以在Info.plist中同样注入某种信息,以帮助您区分这两种信息。