首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >确定应用程序是否与app沙箱或生产环境通信。

确定应用程序是否与app沙箱或生产环境通信。
EN

Stack Overflow用户
提问于 2012-04-13 19:12:02
回答 5查看 12.2K关注 0票数 20

我在我的应用程序中设置了推送通知。我正在尝试确定从application:didRegisterForRemoteNotificationsWithDeviceToken:方法中的APNS接收到的设备令牌是来自沙箱还是来自开发环境。如果我能够区分初始化令牌的环境,我将能够告诉服务器向哪个环境发送推送通知。

我尝试过使用DEBUG宏来确定这一点,但是我看到了一些奇怪的行为,并且不相信它是100%正确的。

代码语言:javascript
复制
#ifdef DEBUG
BOOL isProd = YES;
#else
BOOL isProd = NO;
#endif

理想情况下,我可以在代码中检查aps-environment权限(值是开发或生产),但我不确定这是否可能。

确定您的应用程序是与APNS沙箱还是生产环境通信的正确方法是什么?我假设服务器首先需要知道这一点。如果这是错误的假设,请纠正我。

编辑的:苹果关于提供者与APNS的通信的文档详细介绍了与沙箱通信和生产之间的区别。但是,文档并没有提供关于如何与注册令牌(来自iOS客户端应用程序)以及如何与服务器通信保持一致的信息。

EN

回答 5

Stack Overflow用户

回答已采纳

发布于 2014-05-28 10:44:36

您可以读取和检查嵌入式供应配置文件。

https://github.com/tcurdt/TCMobileProvision

我就是这样做的:

代码语言:javascript
复制
NSString *mobileprovisionPath = [[[NSBundle mainBundle] bundlePath]
        stringByAppendingPathComponent:@"embedded.mobileprovision"];
TCMobileProvision *mobileprovision = [[TCMobileProvision alloc] initWithData:[NSData dataWithContentsOfFile:mobileprovisionPath]];
NSDictionary *entitlements = mobileprovision.dict[@"Entitlements"];
NSString *apsEnvironment = entitlements[@"aps-environment"];
BOOL production = entitlements && apsEnvironment && [apsEnvironment isEqualToString:@"production"];
票数 17
EN

Stack Overflow用户

发布于 2016-11-02 15:51:07

这是一个黑客,但它在XCode 8Swift 3上工作。

我们基本上是打开embedded.mobileprovision文件,将其转换为字符串,然后检查是否有一个字符串表明应用程序正在使用开发aps-环境。

代码语言:javascript
复制
func isDevelopmentEnvironment() -> Bool {
    guard let filePath = Bundle.main.path(forResource: "embedded", ofType:"mobileprovision") else {
        return false
    }
    do {
        let url = URL(fileURLWithPath: filePath)
        let data = try Data(contentsOf: url)
        guard let string = String(data: data, encoding: .ascii) else {
            return false
        }
        if string.contains("<key>aps-environment</key>\n\t\t<string>development</string>") {
            return true
        }
    } catch {}
    return false
}
票数 12
EN

Stack Overflow用户

发布于 2012-04-13 23:43:07

  1. APNS环境是根据与您的代码符号标识相匹配的代码签名权限(很好的post 这里)来确定的--虽然识别您的构建配置可能有效,但如果您将该构建配置与错误匹配的权限相匹配,则可能也是错误的。
  2. 请记住,使用调试作为确定应享待遇的一种手段应该有效(如果您发现调试很棘手,可以在"Apple .“->”其他C标志“->”DEBUG“下添加自己的链接器标志),例如添加-DDEBUGGING,然后使用:
代码语言:javascript
复制
 `#ifdef DEBUGGING     BOOL isProd = YES;     #else     BOOL isProd = NO;     #endif`
票数 4
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10146911

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档