新浪项目--------首页技术点总结

一.微博未读数的小红点的实现

  设置小红点数字的方法:   self.tabBarItem.badgeValue = @"5";

示例代码:

HomeViewController.m文件

 

    //获得未读数  采用定时器的方法,每个一段时间向服务器发送请求时使用
    NSTimer *timer = [NSTimer scheduledTimerWithTimeInterval:4.0 target:self selector:@selector(setupUnreadCount) userInfo:nil repeats:YES];
    //主线程也会抽出时间处理一下timer (不管主线程是否正在做其他事情)
    [[NSRunLoop mainRunLoop] addTimer:timer forMode:NSRunLoopCommonModes];

 

 实现方法,里面有小红点的设置:

#pragma mark ---获取微博未读数
-(void)setupUnreadCount
{
    //1.请求管理者  创建AFHTTPRequestOperationManager对象
    AFHTTPRequestOperationManager *mgr = [AFHTTPRequestOperationManager manager];
    
    //2.拼接请求参数
    AccountModel *account = [AccountTool account];
    NSMutableDictionary *params = [NSMutableDictionary dictionary];
    params[@"access_token"] = account.access_token;
    params[@"uid"] = account.uid;
    
    //3.发送请求
    [mgr GET:@"https://rm.api.weibo.com/2/remind/unread_count.json" parameters:params success:^(AFHTTPRequestOperation *operation, NSDictionary *responseObject) {
        //打印参数
//        NSLog(@"%@",responseObject);
        //第一种方法
//        //设置微博的未读数
//        int status = [responseObject[@"status"] intValue];
//        //设置数字提醒
//        self.tabBarItem.badgeValue = [NSString stringWithFormat:@"%d",status];
        

        //第二种方法(进行一个简单的判断)
        // @20 --> @"20"
        // NSNumber --> NSString
        // 设置提醒数字(微博的未读数)
        NSString *status = [responseObject[@"status"] description];
        if ([status isEqualToString:@"0"]) {
            self.tabBarItem.badgeValue = nil;
        //设置Application右上角的小红数字图标
            [UIApplication sharedApplication].applicationIconBadgeNumber = 0;
        }  else { // 非0情况
            //小红点的设置(UITabBar上面的小红点)
            self.tabBarItem.badgeValue = status;
//设置应用程序图标右上角的小红点数字 [UIApplication sharedApplication].applicationIconBadgeNumber
= status.intValue; } } failure:^(AFHTTPRequestOperation *operation, NSError *error) { NSLog(@"请求失败--%@",error); }]; }

 

二.微博未读数小红点数字在后台的继续运行

 1.注意:下面是让小红点在程序退出之后继续存在并计数的方法(及在后台继续运行) 这里注意一点在Info.plst里面要设置后台模式,设置成允许音频播放的模式才能够保持程序你继续运行.

AppDelegate.m文件

//当app进入后台时调用  写在程序进入后台的方法里面
- (void)applicationDidEnterBackground:(UIApplication *)application {
    //通知NSNotiifcation不可见
    //本地通知
    //远程推送通知
  
    /*
     app的状态
     1.死亡状态:没有打开app
     2. 前台运行状态
     3.后台暂停状态 : 停止一切动画,定时器,多媒体,联网媒体 很难进行其他操作
     4.后台运行状态
     
     */
    //向操作系统申请后台运行资格 能维持多久不确定
   UIBackgroundTaskIdentifier task =  [application beginBackgroundTaskWithExpirationHandler:^{
        //赶紧结束任务
       [application endBackgroundTask:task];
        
    }];
    
    // 在Info.plst中设置后台模式:Required background modes == App plays audio or streams audio/video using AirPlay
    // 搞一个0kb的MP3文件,没有声音
    // 循环播放
    
    // 以前的后台模式只有3种
    // 保持网络连接
    // 多媒体应用
    // VOIP:网络电话

   }

 

   Info.plst里面要设置后台模式

 

 
   2.在ios8之后,后台运行在一定程度要得到用户许可才可以,因此如果不能正常请求的话还向用户法许可获得使用户的同意(不是必须使用,有需要在使用)
 
AppDelegate.m文件
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {

   /** 应用右上角图标数字小红点的开启,要向用户发送请求通知获得用户许可  */
    float sysVersion=[[UIDevice currentDevice]systemVersion].floatValue;
    if (sysVersion>=8.0) {
        UIUserNotificationType type=UIUserNotificationTypeBadge | UIUserNotificationTypeAlert | UIUserNotificationTypeSound;
        UIUserNotificationSettings *setting=[UIUserNotificationSettings settingsForTypes:type categories:nil];
        [[UIApplication sharedApplication]registerUserNotificationSettings:setting];
    }

    return YES;
}

 

 
 
 
 
 
 
 
 

转载于:https://www.cnblogs.com/erdeng/p/4915665.html

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值