gol*_*rox 17 push-notification apple-push-notifications ios
我在我的应用中设置了推送通知.我正在尝试确定我在application:didRegisterForRemoteNotificationsWithDeviceToken:方法中从APNS收到的设备令牌是来自沙箱还是开发环境.如果我可以区分哪个环境初始化了令牌,我将能够告诉我的服务器向哪个环境发送推送通知.
我已经尝试使用DEBUG宏来确定这一点,但我已经看到了一些奇怪的行为,并且不相信它是100%正确的.
#ifdef DEBUG
BOOL isProd = YES;
#else
BOOL isProd = NO;
#endif
Run Code Online (Sandbox Code Playgroud)
理想情况下,我可以aps-environment在代码中检查权利(值是开发或生产),但我不确定这是否可行.
确定您的应用是否正在与APNS沙箱或生产环境进行通信的正确方法是什么?我假设服务器首先需要知道这一点.如果假设不正确,请纠正我.
编辑:Apple关于提供商与APNS通信的文档详细说明了与沙箱进行通信和生产之间的区别.但是,文档未提供有关如何与注册令牌(来自iOS客户端应用程序)以及与服务器通信一致的信息.
tcu*_*rdt 17
您可以阅读并检查嵌入式配置文件.
https://github.com/tcurdt/TCMobileProvision
这就是我做的:
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"];
Run Code Online (Sandbox Code Playgroud)
这是一个黑客,但它的努力XCode 8与Swift 3
我们基本上打开embedded.mobileprovision文件,将其转换为字符串,然后检查表明应用程序正在使用开发aps环境的字符串.
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
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
10432 次 |
| 最近记录: |