ios推送
来源:互联网 发布:arcgis js 事件关闭 编辑:程序博客网 时间:2024/05/16 07:42
原文地址:blog.csdn.net/ios_che/article/details/7428413
推送通知的步骤:1、询问是否允许推送通知。2、如果用户允许在APPDELEGATE 中实现
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{
}
3、将token发送到服务器上
4、服务器收到toke后 发送推送通知,客户端相应该推送同通知
- (void)applicationDidBecomeActive:(UIApplication *)application{ /* Restart any tasks that were paused (or not yet started) while the application was inactive. If the application was previously in the background, optionally refresh the user interface. */ //每次醒来都需要去判断是否得到device token [NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(registerForRemoteNotificationToGetToken) userInfo:nil repeats:NO]; //hide the badge application.applicationIconBadgeNumber = 0; [[CheckVersion sharedCVInstance] checkVersionOfServer]; [[AnalyticsUtil sharedAnalyticsUtil] appLaunch]; AnalyticsJSONElement *viewElement = [[AnalyticsJSONElement alloc] init]; viewElement.jsonType = AnalyticsJSONTypeView; viewElement.typeID = @"0"; [[AnalyticsUtil sharedAnalyticsUtil] postAnalyticsMsgToServerWithElement:viewElement]; [viewElement release]; }- (void)applicationWillTerminate:(UIApplication *)application{ /* Called when the application is about to terminate. Save data if appropriate. See also applicationDidEnterBackground:. */}#pragma mark -#pragma mark - Getting Device token for Notification support//向服务器申请发送token 判断事前有没有发送过- (void)registerForRemoteNotificationToGetToken{ NSLog(@"Registering for push notifications..."); //注册Device Token, 需要注册remote notification NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; if (![userDefaults boolForKey:DeviceTokenRegisteredKEY]) //如果没有注册到令牌 则重新发送注册请求{dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_HIGH, 0), ^{ [[UIApplication sharedApplication] registerForRemoteNotificationTypes: (UIRemoteNotificationTypeNewsstandContentAvailability | UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound)];});} //将远程通知的数量置零 dispatch_async(dispatch_get_global_queue(0,0), ^{ //1 hide the local badge if ([[UIApplication sharedApplication] applicationIconBadgeNumber] == 0) { return; } // [[UIApplication sharedApplication] setApplicationIconBadgeNumber:0]; //2 ask the provider to set the BadgeNumber to zeroNSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];NSString *deviceTokenStr = [userDefaults objectForKey:DeviceTokenStringKEY];[self resetBadgeNumberOnProviderWithDeviceToken:deviceTokenStr];}); }//允许的话 自动回调的函数- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken{ //将device token转换为字符串NSString *deviceTokenStr = [NSString stringWithFormat:@"%@",deviceToken]; //modify the token, remove the "<, >"NSLog(@" deviceTokenStr lentgh: %d ->%@", [deviceTokenStr length], [[deviceTokenStr substringWithRange:NSMakeRange(0, 72)] substringWithRange:NSMakeRange(1, 71)]);deviceTokenStr = [[deviceTokenStr substringWithRange:NSMakeRange(0, 72)] substringWithRange:NSMakeRange(1, 71)]; NSLog(@"deviceTokenStr = %@",deviceTokenStr); //将deviceToken保存在NSUserDefaults NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; //保存 device token 令牌,并且去掉空格[userDefaults setObject:[deviceTokenStr stringByReplacingOccurrencesOfString:@" " withString:@""] forKey:DeviceTokenStringKEY]; //send deviceToken to the service provider dispatch_async(dispatch_get_global_queue(0,0), ^{ //没有在service provider注册Device Token, 需要发送令牌到服务器 if ( ![userDefaults boolForKey:DeviceTokenRegisteredKEY] ) { NSLog(@" 没有 注册Device Token"); [self sendProviderDeviceToken:deviceTokenStr]; } }); }- (void)application:(UIApplication *)app didFailToRegisterForRemoteNotificationsWithError:(NSError *)err { NSString *str = [NSString stringWithFormat: @"Error: %@", err]; NSLog(@"获取令牌失败: %@",str); //如果device token获取失败则需要重新获取一次 //[NSTimer scheduledTimerWithTimeInterval:0.5 target:self selector:@selector(registerForRemoteNotificationToGetToken) userInfo:nil repeats:NO];}//获取远程通知- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)userInfo {NSLog(@"received badge number ---%@ ----",[[userInfo objectForKey:@"aps"] objectForKey:@"badge"]); for (id key in userInfo) { NSLog(@"key: %@, value: %@", key, [userInfo objectForKey:key]); } NSLog(@"the badge number is %d", [[UIApplication sharedApplication] applicationIconBadgeNumber]); NSLog(@"the application badge number is %d", application.applicationIconBadgeNumber); application.applicationIconBadgeNumber += 1; // We can determine whether an application is launched as a result of the user tapping the action // button or whether the notification was delivered to the already-running application by examining // the application state. //当用户打开程序时候收到远程通知后执行if (application.applicationState == UIApplicationStateActive) { // Nothing to do if applicationState is Inactive, the iOS already displayed an alert view.UIAlertView *alertView = [[UIAlertView alloc] initWithTitle:@"温馨提示"message:[NSString stringWithFormat:@"\n%@", [[userInfo objectForKey:@"aps"] objectForKey:@"alert"]] delegate:self cancelButtonTitle:@"OK" otherButtonTitles:nil]; dispatch_async(dispatch_get_global_queue(0,0), ^{ //hide the badge application.applicationIconBadgeNumber = 0; //ask the provider to set the BadgeNumber to zero NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults]; NSString *deviceTokenStr = [userDefaults objectForKey:DeviceTokenStringKEY]; [self resetBadgeNumberOnProviderWithDeviceToken:deviceTokenStr]; }); [alertView show];[alertView release]; } }// http://192.168.11.24/ClientInterface.ashx?action= savetoken&clientid=3898329492492424924932&token=343424324242#pragma mark -#pragma mark - Getting Device token for Notification support
//发送token- (void)sendProviderDeviceToken: (NSString *)deviceTokenString{ // Establish the requestNSLog(@"sendProviderDeviceToken = %@", deviceTokenString); NSString *UDIDString = [[UIDevice currentDevice] uniqueIdentifier];NSString *body = [NSString stringWithFormat:@"action=savetoken&clientid=%@&token=%@", UDIDString, deviceTokenString]; NSString *baseurl = [NSString stringWithFormat:@"%@?",URL_OF_PUSH_NOTIFICATION_SERVER]; //服务器地址 NSLog(@"send provider device token = %@", baseurl); NSURL *url = [NSURL URLWithString:baseurl];NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url]; [urlRequest setHTTPMethod: @"POST"];[urlRequest setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding]];[urlRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"]; NSURLConnection *tConnection = [[NSURLConnection alloc] initWithRequest: urlRequest delegate: self];self.deviceTokenConnetion = [tConnection retain];[tConnection release];}#pragma mark -#pragma mark - reset Badge Number- (void)resetBadgeNumberOnProviderWithDeviceToken: (NSString *)deviceTokenString{NSLog(@" reset Provider DeviceToken %@", deviceTokenString);isNotificationSetBadge = YES; // Establish the requestNSString *body = [NSString stringWithFormat:@"action=setbadge&token=%@", [deviceTokenString stringByReplacingOccurrencesOfString:@" " withString:@""]]; NSString *baseurl = [NSString stringWithFormat:@"%@?", URL_OF_PUSH_NOTIFICATION_SERVER]; //服务器地址NSURL *url = [NSURL URLWithString:baseurl];NSMutableURLRequest *urlRequest = [NSMutableURLRequest requestWithURL:url];[urlRequest setHTTPMethod: @"POST"];[urlRequest setHTTPBody:[body dataUsingEncoding:NSUTF8StringEncoding]];[urlRequest setValue:@"application/x-www-form-urlencoded" forHTTPHeaderField:@"Content-Type"];NSURLConnection *tConnection = [[NSURLConnection alloc] initWithRequest: urlRequest delegate: self];self.deviceTokenConnetion = [tConnection retain];[tConnection release];}#pragma mark -#pragma mark - NSURLConnection delegate function- (void)connection:(NSURLConnection *)connection didReceiveResponse:(NSURLResponse *)response{NSHTTPURLResponse *resp = (NSHTTPURLResponse *)response;NSLog(@"Response statusCode: %d", resp.statusCode);}- (void)connection:(NSURLConnection *)connection didReceiveData:(NSData *)data{NSString *rsp = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];NSLog(@"connection 2 Received data = %@ ", rsp); //if the string from provider is "true", means the devicetoken is stored in the provider server //so the app won't send the devicetoken next time.if (isNotificationSetBadge == NO) { NSUserDefaults *userDefaults = [NSUserDefaults standardUserDefaults];if([rsp isEqualToString:@"true"]){ NSLog(@"connection 2.2 Received data = %@ ", rsp);[userDefaults setBool:YES forKey:DeviceTokenRegisteredKEY]; } }else{//isNotificationSetBadge == YES;NSLog(@"connection 2 reset");isNotificationSetBadge = NO;}[rsp release];}- (void)connectionDidFinishLoading:(NSURLConnection *)connection{NSLog(@"connection 3 Did Finish Loading ");[self.deviceTokenConnetion cancel];}
0 0
- iOS推送 (百度推送)
- iOS推送 (百度推送)
- iOS- 推送极光推送
- iOS推送
- IOS推送
- ios推送。。。
- IOS推送
- ios 推送
- IOS 推送
- iOS推送
- IOS推送
- IOS推送
- IOS推送
- IOS推送
- iOS 推送
- ios推送
- iOS 推送
- IOS推送
- OCP-1Z0-051 第120题 NATURAL JOIN自然连接
- socket编程基础2
- UVA 10253 - Series-Parallel Networks(数论+计数问题+递推)
- leetcode第一刷_Search a 2D Matrix
- 仓央嘉措灵魂驻足的地方——香巴林卡
- ios推送
- Linux环境编程之文件I/O(一):文件描述符
- 安卓Theme属性简介
- 高海拔之恋-我的香巴林卡
- 通配符与正则表达式
- 为何被主流抛弃-江西IDC机房价格为何居高不下缺少竞争力-2014年5月江西IDC排行榜
- Commons-FileUpload实现文件上传
- s:iterator的用法
- ListView中嵌套ListView的事件处理