iOS 推送的实现

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

self.window = [[UIWindow alloc]initWithFrame:[UIScreen mainScreen].bounds];

// 处理远程推送

if (launchOptions && [launchOptions valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey]) {

[self checkRemoteNotification:[launchOptions valueForKey:UIApplicationLaunchOptionsRemoteNotificationKey]];

}

//后台(未激活状态)接到服务器消息时执行

if ([UIApplication sharedApplication].applicationIconBadgeNumber != 0) {

添加接到推送消息时需求

}

//进图APP将对通知相应的提示去掉

[UIApplication sharedApplication].applicationIconBadgeNumber = 0;

// 开启远程推送

[self openRemoteNotification];

return YES;

}

// 开启推送

- (void)openRemoteNotification {

// 开启推送

if (!iOS7) {

[[UIApplication sharedApplication] registerForRemoteNotifications];

UIUserNotificationSettings* requestedSettings = [UIUserNotificationSettings settingsForTypes:(UIUserNotificationTypeAlert | UIUserNotificationTypeSound | UIUserNotificationTypeBadge)  categories:nil];

[[UIApplication sharedApplication] registerUserNotificationSettings:requestedSettings];

} else {

// Enable APNS

[[UIApplication sharedApplication]

registerForRemoteNotificationTypes:(UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];

}

}

#pragma mark - ANPS

注册成功

- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {

if (deviceToken) {

NSString * deviceTokenString = [[[deviceToken description] stringByTrimmingCharactersInSet:[NSCharacterSet characterSetWithCharactersInString:@"<>"]] stringByReplacingOccurrencesOfString:@" " withString:@""];

.............

此处将deviceTokenString上传给服务器

}

}

//接收到远程推送

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {

// 远程推送处理

[self checkRemoteNotification:userInfo];

}

注册设备失败

- (void)application:(UIApplication*)application didFailToRegisterForRemoteNotificationsWithError:(NSError*)error

{

NSLog(@"Failed to get token, error: %@", error);

}

从后台点击APP图标进入

- (void)applicationWillEnterForeground:(UIApplication *)application {

判断是否有接到消息通知

if ([UIApplication sharedApplication].applicationIconBadgeNumber != 0) {

添加接到推送消息时需求

}

[UIApplication sharedApplication].applicationIconBadgeNumber = 0;

}

远程推送处理

- (void)checkRemoteNotification:(NSDictionary*)userInfo {

if (userInfo == nil || [userInfo isKindOfClass:[NSNull class]]) {

return;

}

#if !TARGET_IPHONE_SIMULATOR

NSLog(@"remote notification: %@",[userInfo description]);

NSDictionary *apsInfo = [userInfo valueForKey:@"aps"];

NSString *alert = [apsInfo valueForKey:@"alert"];

NSNumber *badge = [apsInfo valueForKey:@"badge"];此body中必须有

NSNumber *type = [userInfo valueForKey:@"type"];

NSNumber *menu = [userInfo valueForKey:@"menu"];

NSString *text = [userInfo valueForKey:@"text"];

NSString *link = [userInfo valueForKey:@"link"];

NSString *val  = [userInfo valueForKey:@"val"];

if ((!menu || [menu isKindOfClass:[NSNull class]]) ||

(!type || [type isKindOfClass:[NSNull class]]) ){

return;

}

//APP icon消息提示的显示

if ([apsInfo valueForKey:@"badge"] && ![[apsInfo valueForKey:@"badge"] isKindOfClass:[NSNull class]]) {

if([self canSendNotifications]) {

[UIApplication sharedApplication].applicationIconBadgeNumber = [[apsInfo valueForKey:@"badge"] integerValue];

}

}

// 服务器喊我打开应用去干活啦

if ([type integerValue] == 3) {

NSMutableDictionary *apnsInfo = [NSMutableDictionary dictionaryWithDictionary:userInfo];

[apnsInfo setObject:@([UIApplication sharedApplication].applicationState == UIApplicationStateActive) forKey:@"isActive"];

// 推送通知

[[NSNotificationCenter defaultCenter] postNotificationName:k_NOTI_APNS_PUSH object:apnsInfo];

}

#endif

}

// 判断是否能接收推送

- (BOOL)canSendNotifications;

{

if (iOS7) {

return YES;

}

UIUserNotificationSettings* notificationSettings = [[UIApplication sharedApplication] currentUserNotificationSettings];

BOOL canSendNotifications = NO;

if (notificationSettings.types == (UIUserNotificationTypeBadge | UIUserNotificationTypeSound | UIUserNotificationTypeAlert)) {

canSendNotifications =YES;

}

return canSendNotifications;

}

时间: 2024-10-25 21:00:11

iOS 推送的实现的相关文章

iOS 推送证书

push 服务器证书 钥匙串:登入-->证书,选项里面导出证书命名为cert.p12,跟密钥命名为key.p12 需要将上面的2个.p12文件转成.pem格式: openssl pkcs12 -clcerts -nokeys -out cert.pem -in cert.p12 openssl pkcs12 -nocerts -out key.pem -in key.p12 如果需要对 key不进行加密: openssl rsa -in key.pem -out key.unencrypted.

申请iOS推送证书.p12

iOS APP需要推送通知,要用到iOS推送证书,分为测试调试用的iOS推送证书(开发环境)和上架到App Store的ios 推送证书(生产环境)! 一.iOS发布推送证书(开发环境)测试APP iOS证书申请这里用到一个工具Appuploader,可以在win系统中辅助快速申请iOS证书,如果没有Mac也无所谓. 可以很快速的创建iOS推送证书 先安装好Appuploader安装教程 1.打开Appuploader,选择Certification. 2.点击+ADD\选择Push Notif

IOS推送功能push

笔记:ios推送功能 推送可实时提醒用户你想要让客户端用户知道的信息,那怕用户并没有开启这个应用.应用场景很广泛,如淘宝应用:在你使用淘宝客户端的时候,假如你拍的东西发货了,如果没有推送功能,你不会及时知道你拍下的东西已经发货.但使用了推送后,淘宝就会发送一条推送通知,告知使用客户端App的你,你拍下的东西已经发货.使用推送的场景很多,在用户的体验度上更人性. 苹果的推送机制(APNS)咯(ps:其实每一篇教程都有),先来看一张苹果官方对其推送做出解释的概要图. Provider是给你手机应用发

iOS推送小结

iOS推送小结 (吐槽,md的代码编辑功能不知道是不会用还是确实不好用) 1.推送配置 1.1证书配置 请自行谷百. 1.2注册推送 //代码来源:环信Demo //In method application:(UIApplication *)application didFinishLaunchingWithOptions: UIApplication *application = [UIApplication sharedApplication]; //注册APNS if([applicat

iOS推送 再备

这是一篇编译的文章,内容均出自Parse.com的iOS开发教程,同时作者还提供了视频讲解.本文将带领开发者一步一步向着iOS推送通知的深处探寻,掌握如何配置iOS推送通知的奥义. 介绍一点点背景资料 众所周知,使用推送通知是一个很棒的.给应用添加实时消息通知的方式.这样做的结局是,开发者和用户之间,彼此永远保持着一种令人愉悦的亲密关系. 然而不幸的是,iOS的推送通知并非那么容易驾驭,往往会搞的开发者精疲力尽,灰心丧气,无法持久.现在,救星来了!只要通读本教程,你就能摆脱这些烦恼,成为一名活力

iOS 推送证书制作(JAVA/PHP)

iOS 推送证书制作(JAVA/PHP) 在使用Java或者PHP制作iOS推送服务器的时候,需要自己从开发者网站上导出的aps_developer_identity证书和Apple Development Push Services证书进行合成,生成可以供Java使用的p12证书或供PHP使用的pem证书.aps_developer_identity证书和Apple Development Push Services证书的申请过程可以参考:http://www.cnblogs.com/hubj

教你做IOS推送 包会!

最近在研究iOS的推送问题,遇到了一些问题,最终整理了一下,放在这里和大家分享. APNS的推送机制 首先我们看一下苹果官方给出的对iOS推送机制的解释.如下图 Provider就是我们自己程序的后台服务器,APNS是Apple Push Notification Service的缩写,也就是苹果的推送服务器. 上图可以分为三个阶段: 第一阶段:应用程序的服务器端把要发送的消息.目的iPhone的标识打包,发给APNS. 第二阶段:APNS在自身的已注册Push服务的iPhone列表中,查找有相

ios推送消息php做推送服务器

<?php /** * Main method to run the object * $message 消息内容 * $deviceToken 这里是iphone手机唯一的Token码(记得去掉空格) * $badge 就是应用图标右上角那个数字 * $sound 消息的声音 * $apnsCert 证书路径 * $passphrase 私钥的密码(可以不写) */ public function iosPush($message,$deviceToken,$badge=1,$sound='D

IOS推送通知测试工具PushMeBaby

下载了PushMeBaby在xcode5里中不能使用,类库变了.需要添加Carbon.framework库,在引用的地方改成: #include <Carbon/Carbon.h>,程序就可以 运行了.测试时要变成自己的证书. 下载地址:点击打开链接 IOS推送通知测试工具PushMeBaby,码迷,mamicode.com

iOS推送证书申请

iOS APP需要推送通知,要用到iOS推送证书,分为测试调试用的iOS推送证书和上架到App Store的ios 推送证书! iOS证书申请这里用到一个工具Appuploader,可以在win系统中辅助快速申请iOS证书,如果没有Mac也无所谓. 可以很快速的创建iOS推送证书 先安装好Appuploader安装教程 一.iOS发布推送证书(上架到App Store使用) 1.打开Appuploader,选择Certification. 2.点击+ADD\选择Push Notification