ios - 是否可以在带有推送通知的同一应用程序中同时使用 App Store 和 In House 配置文件?

标签 ios apple-push-notifications

首先,如果我缺少对苹果构建/部署模型的一些基本理解,我深表歉意,我对此非常陌生。

一点背景知识 - 我参与的应用程序是一个应用程序商店分发的应用程序,但该公司希望能够在发布到应用程序商店之前在内部分发测试版本和/或选择客户。 adhoc 分发模型实际上对此不起作用(提前不知道设备 ID),因此我们为此使用“InHouse”分发模型。这意味着在开发者控制台中,我们有 2 个不同的“组织”——一个负责应用商店构建,另一个“企业”组织负责内部构建。

该应用程序本身是一个“瘦”客户端,它与后端服务器交互以实现其大量功能。在服务器端,我们有生产环境,也有公共(public)“预启动”环境。客户端可以配置为使用其中一种环境(测试版和公开发布的客户端版本都可以使用生产服务器或预发布服务器)

一切正常。

但现在,我们正在添加推送通知。这看起来很简单 - 当应用程序连接到一个环境时,它会向它注册,并在另一个环境中取消注册......因此应用程序仅从它正在(或最后)连接的环境中获取通知。但是在服务器/配置端我不知道如何让它工作。因为苹果不支持同一组织的内部和应用程序商店配置文件,所以这两个构建是由不同的“组织”完成的,并被视为不同的应用程序 - 我如何才能使这两个“应用程序”被识别为同一个应用程序,并且能够使用来自服务器端的相同 key 向它们中的任何一个发送通知?

最佳答案

我们的系统上有一个非常相似的设置,一个 App Store 分布式应用程序和一个用于 Beta 测试的内部企业应用程序。要使推送起作用,您需要知道使用了哪个分发 channel 并使用适当的 key 。流程如下所示:

  1. 企业签名应用获取 application:didRegisterForRemoteNotificationsWithDeviceToken:

  2. 应用向您的服务器发送注册信息{"device-token":token, "distribution": "enterprise"}

  3. 您的服务器将这对值存储在数据库中。

  4. 当事件触发通知时,您会查找将通知发送给谁,将 token 和分发类型都视为目标地址。

  5. 发送通知时,使用分发类型选择键。像往常一样使用 token 和其他一切。

至于识别您的应用程序的哪个版本是企业签名的还是应用程序商店的,您只需要有一些方法来检测它。我们使用不同的包标识符:

if ([[NSBundle mainBundle].bundleIdentifier isEqualToString:@"com.stackexchange.stackexchange"]) {
    return @"app-store";
} else {
    return @"enterprise";
}

您可以类似地将某种信息注入(inject)您的 Info.plist 以帮助您区分两者。

关于ios - 是否可以在带有推送通知的同一应用程序中同时使用 App Store 和 In House 配置文件?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26151835/

相关文章:

ios - 对于已经登录的用户,直接转到主视图 Controller

ios - 关于APNS的问题

ios - 当应用程序在后台运行时,将通知从 Web 服务器拉取到 iOS 设备

ios - 如何使 UIButton 始终位于加载的 subview Controller 之上?

ios - 无法在所有设备上获取推送通知

iphone - iPhone 推送通知声音有限制吗?

ios - Windows 服务器上的 Apple 推送通知证书

iphone - 是否可以在 iphone 的 UILabel 中设置两种颜色?

ios - MFMailComposeViewController 出现一秒钟然后消失

ios - 如何在 Codable 类型中使用 Any