ios百度主动推送token值的devicetoken有空格吗

iOS Remote Notification远程消息推送处理
作者:hou0716
字体:[ ] 类型:转载 时间:
这篇文章主要为大家详细介绍了iOS Remote Notification远程消息推送处理,感兴趣的小伙伴们可以参考一下
远程消息推送处理场景有三种:分别是app还没有运行、app在前台运行以及app在后台运行,下面介绍相关流程及三种场景下处理步骤
(1)注册通知
首先是在注册远程消息推送,需要注意的是iOS8及以后的系统中注册方法有所改变(同时证书设置以及push权限也需要开启)。这一步的目的是,允许app接收远程消息推送。
(2)绑定deviceToken
deviceToken相当于设备的一个标识,服务器根据这个标识来进行消息推送。
①当用户同意app接收远程消息推送后,手机会向APNs发起一个请求去获取deviceToken;
②APNs收到请求,根据其相应流程及算法发送对应的deviceToken给手机;
③手机再将deviceToken传递给app;
④app再将deviceToken发送到后台服务器进行保存。
后台服务器以后就是根据deviceToken发送推送消息给APNs,APNs再根据deviceToken将消息推送到对应设备,设备再唤起app,显示推送而来的消息。
(3)针对远程推送消息进行处理
远程推送消息发送过来时,点开消息常常会有一些针对性处理或流程,最常见的就是跳转页面等,这里不再展开,下面将介绍不同场景下接收到推送后的处理步骤。
2.不同场景下推送消息的流程
(1)app在前台运行时收到推送
会调用“didReceiveRemoteNotification”方法,推送的数据在userInfo里,针对处理即可。
(2)app退出到后台状态时收到推送
屏幕上会出现通知提醒,如果点开消息进入app,app运行到前台时会调用“didReceiveRemoteNotification”方法,这也就是之前为什么要区分一下applicationState的原因,因为二者都是通过这一步来处理。
(3)app处于关闭退出状态时收到推送
同样屏幕上出现通知提醒,点开消息进入app,启动时“didFinishLaunchingWithOptions”方法里的launchOptions对应UIApplicationLaunchOptionsRemoteNotificationKey部分内容不再为空,含有的即是推送内容,针对处理即可。
(1)网络状况不佳时远程消息推送情况
如果手机不在网的时候,APNs会有一个QoS的东西把消息保存很短的时间,等手机在网时再推送过来,当然离线时间久了,消息也就收不到了,但在实际中发现貌似网络不佳的时候一般就收不到了。
如果手机离线时,服务器推送了多条消息,即时上线了收到消息,也只会收到最新的一条
(2)推送的内容格式
推送的内容都有固定格式和长度,包括title(iOS8.2后增加的)、body、sound等,如果本地没有设置对应的声音文件,sound的值为default,收到推送的时候响起的是默认的提示音,并且推送消息的长度限制为256个字节(iOS8中这一限制放大到2kb),具体参考Local and Remote Notification Programming Guide中The Notification Payload这一节。
本文已被整理到了《》,欢迎大家学习阅读。
以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持脚本之家。
您可能感兴趣的文章:
大家感兴趣的内容
12345678910
最近更新的内容
常用在线小工具问题对人有帮助,内容完整,我也想知道答案
问题没有实际价值,缺少关键内容,没有改进余地
昨天下午还能收到推送,晚上好像是收不到了,当时没在意,今天下午跟了代码发现应该是走过一次didRegisterForRemoteNotificationsWithDeviceToken拿到过deviceToken后面再运行或者卸载了再运行 didRegisterForRemoteNotificationsWithDeviceTokendidFailToRegisterForRemoteNotificationsWithError这两个方法都不走了。
func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:AnyObject]?) -& Bool {
let types: UIUserNotificationType = [.Alert, .Badge, .Sound]
let settings = UIUserNotificationSettings(forTypes: types, categories: nil)
UIApplication.sharedApplication().registerUserNotificationSettings(settings)
UIApplication.sharedApplication().registerForRemoteNotifications()
return true
func application(application: UIApplication, didRegisterUserNotificationSettings notificationSettings: UIUserNotificationSettings) {
if (notificationSettings.types != UIUserNotificationType.None) {
application.registerForRemoteNotifications()
didRegisterUserNotificationSettings 这个是走了的。然而上面两个是不走的。
搞了一下午 换Provisioning Profile好几次也无济于事。才学ios没多久感觉总是遇到一些奇怪的问题
请问下有人遇到过这样的问题吗?感谢大家!!!
答案对人有帮助,有参考价值
答案没帮助,是错误的答案,答非所问
昨天一天我也是拿不到 devicetoken 后来换了一下证书就好了
分享到微博?
你好!看起来你挺喜欢这个内容,但是你还没有注册帐号。 当你创建了帐号,我们能准确地追踪你关注的问题,在有新答案或内容的时候收到网页和邮件通知。还能直接向作者咨询更多细节。如果上面的内容有帮助,记得点赞 (????)? 表示感谢。
明天提醒我
关闭理由:
删除理由:
忽略理由:
推广(招聘、广告、SEO 等)方面的内容
与已有问题重复(请编辑该提问指向已有相同问题)
答非所问,不符合答题要求
宜作评论而非答案
带有人身攻击、辱骂、仇恨等违反条款的内容
无法获得确切结果的问题
非开发直接相关的问题
非技术提问的讨论型问题
其他原因(请补充说明)
我要该,理由是:本帖子已过去太久远了,不再提供回复功能。匿名用户不能发表回复!|
每天回帖即可获得10分可用分!小技巧:
你还可以输入10000个字符
(Ctrl+Enter)
请遵守CSDN,不得违反国家法律法规。
转载文章请注明出自“CSDN(www.csdn.net)”。如是商业用途请联系原作者。随笔:iOS远程通知获取不到deviceToken回调问题 - 简书
随笔:iOS远程通知获取不到deviceToken回调问题
今天最近做了个远程推送功能,未使用第三方开发。发现一个问题:在保证证书正确、网络连接正常、首次进入允许通知的情况下,获取不到APNs的deviceTonken回调。既不调用application:didRegisterForRemoteNotificationsWithDeviceT方法也不调用application:didFailToRegisterForRemoteNotificationsWithError:方法。网上搜了不少资料,结果大家给的解决方案几乎都一致,把原因引向了iOS8.0+和iOS7系统问题,并给出根据不同系统版本对remotNotifi进行注册的方法:iOS8.0+ registerUserNotificationSettings:iOS8.0- registerForRemoteNotificationTypes:(还有人说自己也不知道怎么了,后来就突然好了!!!!)找了很久很久很久...,都特么都是这个方法。我想说:这特么谁不知道。被逼无奈,我只能一步一步的从申请证书到代码编写一步一步的检查,一步一步的看...还是没找到原因。我累个艹了。没办法了,只能从appdelegate代理方法入手,找原因和解决方法。原因是没找到,但是解决方法却找到了,直接贴代码:// This callback will be made upon calling -[UIApplication registerUserNotificationSettings:]. The settings the user has granted to the application will be passed in as the second argument.- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings NS_AVAILABLE_IOS(8_0) __TVOS_PROHIBITED;iOS8.0以后可以用这个作为second argument。然后:- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings{[application registerForRemoteNotifications];}果断解决了,什么deviceToken问题都没有了。一个推送做的我心累,虽然我不知道什么原因导致的获取不到deviceToken,但是问题总算解决了。代码://remote 授权- (void)registRemoteNotification{#ifdef __IPHONE_8_0if ([[UIApplication sharedApplication] respondsToSelector:@selector(registerUserNotificationSettings:)]) {UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeBadge|UIUserNotificationTypeSound|UIUserNotificationTypeAlert categories:nil];[[UIApplication sharedApplication] registerUserNotificationSettings:settings];} else {UIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeS[[UIApplication sharedApplication] registerForRemoteNotificationTypes:myTypes];}#elseUIRemoteNotificationType myTypes = UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeS[[UIApplication sharedApplication] registerForRemoteNotificationTypes:myTypes];#endif}#pragma mark - remote Notification- (void)application:(UIApplication *)application didRegisterUserNotificationSettings:(UIUserNotificationSettings *)notificationSettings{[application registerForRemoteNotifications];}- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(nonnull NSData *)deviceToken{NSString *token = [[[[deviceToken description] stringByReplacingOccurrencesOfString:@"&" withString:@""] stringByReplacingOccurrencesOfString:@"&" withString:@""] stringByReplacingOccurrencesOfString:@" " withString:@""];NSLog(@"device token is %@",token);[[NSUserDefaults standardUserDefaults] setValue:token forKey:@"video_deviceToken"];}- (void) application:(UIApplication *)application didFailToRegisterForRemoteNotificationsWithError:(NSError *)error{NSLog(@"%@",error);}//ios 7.0- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo{NSLog(@"did recevive remote noti userInfo %@ for ios 7 ",userInfo);}- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler{/***
系统会估量App消耗的电量,并根据传递的UIBackgroundFetchResult 参数记录新数据是否可用*
调用完成的处理代码时,应用的界面缩略图会自动更新*/NSLog(@"did Receive Remote Notification userInfo %@",userInfo);switch (application.applicationState) {case UIApplicationStateActive:completionHandler(UIBackgroundFetchResultNewData);case UIApplicationStateInactive:completionHandler(UIBackgroundFetchResultNewData);case UIApplicationStateBackground:completionHandler(UIBackgroundFetchResultNewData);default:}}

我要回帖

更多关于 ios获取devicetoken 的文章

 

随机推荐