前言
ios开发在测试推送的时候,联机运行的包,无法收到推送消息。只能是打包发布到appstore上,或者一些常见的内测分发平台,如fir、蒲公英等(目前所在公司就是这样的蛋疼,我记得以前推送可以联调的)。而为了验证一个推送就要打包一次,这个打包的过程又相当的漫长,着实蛋疼。因此有了有了本地推送数据联调的想法。
为了适应这种环境,调研下,发现还有不少的好东西,如pusher的应用,极大的方便了应用的开发联调。在次记录一下。
1、准备
下载 NWPusher ,有现成的别人家的轮子,拿来用用不要介意,哈哈哈~
2、NWPusher应用
2.1、下载并导入
2.2、页面说明
如上图所示:
我们需要选择相应的Push开发测试证书,如果创建推送证书,可以参考【iOS推送证书(开发环境|生产环境)创建教程】,这里不介绍了,类似文章很多。
添加相应的deviceToken。
选择过期时间:有8种选择。
Expiry:None : 不会过期 immediate(0) :立即 1 minute :1分钟时 5 minutes :5分钟时 1 hour :1小时时 1 day :1天时 Far past(1) :遥远的过去 Far future: :永远
选择优先级:3个
Pirority:None :没有优先级 Conserve power(5) : 电量优先 immediately(10) : 立刻,其优先级最高
Payload输入内容就是我们要传送的数据了:这个数据传输以JSON的格式存储。是必要按照APNs发送的Push格式的。Push消息常用的key如下:
1、aps:是其value是我们需要传送的内容。 2、alert: 是其value就是弹出框需要展示的内容。 3、badge: 是其value就是APP icon,展示的信息个数。 4、sound: 是其value就是表示当有Push消息的时候,是否需要声音提示。
另外,alert中value值,可以是字符串,可以是字典。这个字典可以使用多对值,比如其key是title,subtitle,body等。其格式如下
{ "aps": { "alert": { "title": "title", "subtitle": "subTitle", "body": "body" }, "badge": 1, "sound": "default" } }
当然不容的项目有不同的设计规则,下面一个格式,就是我近期项目的推送格式:
{ "_ge_":"1", "_gmid_":"1dnnjj7Jbc9dRt922w9nWA,OSAPNS-0119_mf4G4Pu25n5VqswIQmKjqA:d48abe211c63440fb1e255ebf773294d:", "_gurl_":"sdk.open.extension.getui.com:8123", "aps":{"alert":{ "body":"弹窗内容!", "title":"弹窗标题!", }, "badge":"1", "mutable-content":"1", "sound":"default", }, "msg":"{\"msgcode\":\"推送id\",\"extend\":\"{\\\"msgid\\\":\\\"1B5C19200B0D4B0F97B52A0E737AA712\\\"}\",\"classId\":\"班级id\",\"schoolId\":\"学校id\",\"msgid\":\"消息id\",\"taskId\":\"任务id\"}", }
3、device token获取
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken { __block NSString *__tokenStr = [self getHexStringForData:deviceToken]; NSLog(@"deviceToken:%@",__tokenStr); UIPasteboard *pasteboard = [UIPasteboard generalPasteboard]; pasteboard.string = __tokenStr; } - (NSString *)getHexStringForData:(NSData *)data { if ([[[UIDevice currentDevice] systemVersion] floatValue] >= 13) { if (![data isKindOfClass:[NSData class]]) { return @""; } NSUInteger len = [data length]; char *chars = (char *)[data bytes]; NSMutableString *hexString = [[NSMutableString alloc]init]; for (NSUInteger i=0; i<len; i++) { [hexString appendString:[NSString stringWithFormat:@"%0.2hhx" , chars[i]]]; } return hexString; } else { NSString *myToken = [[data description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]]; myToken = [myToken stringByReplacingOccurrencesOfString:@" " withString:@""]; return myToken; }