zoukankan      html  css  js  c++  java
  • Apple的通知

    Apple的通知

    1. 本地通知  

    //取消原来的通知,可设可不设

      [[UIApplication sharedApplication]cancelAllLocalNotifications];

        //初始化一个通知

    UILocalNotification *noti = [[UILocalNotification alloc]init];

    //下面就是设置该通知的各个属性了

    //发送通知时,计时的时区,一般是设置为本地默认时区

    noti.timeZone = [NSTimeZone defaultTimeZone];

    //通知发送后让应用程序的图标上加上一个小图标,就像QQ来短消息一样,但记得在接受了通知后在程序中取消它,只要把他的值设为0就够了

    noti.applicationIconBadgeNumber = 1;

    //消息的主要内容

    noti.alertBody = @"hflewofjwofioaw";

    //设置通知到来时播放的声音,但如果通知触发时该程序正在运行,则没有任何反应

        NSString *path = [[NSBundle mainBundle]pathForResource:@"sub" ofType:@"caf"];

        NSLog(@"%@",path);

        noti.soundName = path;

        

      //  noti.soundName = nil;

    //设置通知触发的时间

    noti.fireDate = [NSDate dateWithTimeIntervalSinceNow:10];

    //下面是设置通知是否要重复等,不设置时默认就是发送一次

        //noti.repeatInterval= NSSecondCalendarUnit;

        //开始发送

        [[UIApplication sharedApplication]scheduleLocalNotification:noti];

     

     

     

    2. 运程通知,

    该通知是通过appleAPNS服务器将消息发送至客户端的

    首先来看看客户端

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

    {

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

        // Override point for customization after application launch.

        self.viewController = [[ViewController alloc] initWithNibName:@"ViewController" bundle:nil];

        self.window.rootViewController = self.viewController;

        [self.window makeKeyAndVisible];

        

        //1.第一步---在该方法中注册该程序可以接受远程推送通知

        //注册时要指定该程序可以接受的通知的类型,目前总共就这三种类型,最好全部注册,

        //UIRemoteNotificationTypeAlert 指该通知是显示警告试图的

        //UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound 这两个是指

        //在程序图标上显示类似QQ有短消息的红色图标  和到来时会发出声音的通知

        

        

        //如果要取消用下面的代码

        //[[UIApplication sharedApplication]unregisterForRemoteNotifications];

        [[UIApplication sharedApplication]registerForRemoteNotificationTypes:UIRemoteNotificationTypeAlert|UIRemoteNotificationTypeBadge|UIRemoteNotificationTypeSound];

        

        

        //5.这里是第五步,可以先跳过这里,当用户点击通知上的按钮启动了程序时

        if (launchOptions!=nil) {

            //获得该通知的用户信息

            NSDictionary *userInfo = [launchOptions objectForKey:UIApplicationLaunchOptionsRemoteNotificationKey];

            //做一些想做的事

            

        }

        

        //但上述的第五步中的方法有时候会有问题,得到的launchOptions可能为空,解决方法为

    //    [[NSNotificationCenter defaultCenter]addObserver:self selector:@selector(dealRemoteNotification) name:UIApplicationLaunchOptionsRemoteNotificationKey object:nil];

        return YES;

    }

     

    //该方法属于第五步

    -(void)dealRemoteNotification{

        //你可以在该方法中处理程序是因为通知到来而启动的情况

    }

     

    //2.如果程序注册成功了,程序运行时会实行这个方法

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

        //在这个方法中你要将这个(NSData *)deviceToken东西的数据发送给服务器,因为我们的服务器就是靠这个来通过 APNS推送消息到你的设备上的

    }

     

     

    //3.如果程序注册接受远程通知没有成功,则该方法会只是,原因可能是用户禁止接受远程通知

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

        //你可以在这里给用户发送一个警告视图,当然也可以做点别的

    //    UIAlertView *alert = [[UIAlertView alloc]initWithTitle:@"" message:<#(NSString *)#> delegate:<#(id)#> cancelButtonTitle:<#(NSString *)#> otherButtonTitles:<#(NSString *), ...#>, nil]

    }

     

     

    //4.该方法是在程序运行时接到了远程通知时才执行的,此时你可以通过userInfo获得远程通知的信息,然后决定做点什么

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

        //注意,当程序正在运行时来了通知,则该通知会被默默的忽略掉,所以这里要做一些你想做的事

        //当然,如果通知到来时,你的程序处于为运行状态,则如果用户点击了确定功能的键,则此时该程序会被唤醒,它会执行第五步

        

       

        

    }

    按照步骤一步步看吧

    再开看看服务端:

    服务器要通过APNS推送通知到用户则首先必需要从apple官网上获得一个用于远程推送的证书

    或的证书可以参考

    http://mobiforge.com/developing/story/programming-apple-push-notification-services

    apple规定通知的大小不能超过256B,而且通知的格式必需满足下面的样式

     @"{

           //自定义参数

           "userinfo":

                  {

                     "name":"remote notice"

                  },

           //标准写法

           "aps":

                  {

                     "alert":

                               {

                                  "action-loc-key":"Open",//支持多语言

                                  "body":"messgae content"//消息正文

                               },

                     "badge":1,//App icon  标记 具体数值

                     "sound":"default" //播放的音频文fw件,default 表示系统默认的选择列铃声

                 } 

    }"

     

     

    注意:我们的销售终端实现了语言国际化,所以服务器发送的通知主题信息应使用键值获得,而这些键值是在客户端本来定义好了的并且已经国际化了的字符串,

     

    我们的服务器发送给APNS的数据还必须是大端字节对其的

    总结出来服务器要做下面这些事

    1. 用推送证书采用SSL连接APNS

    2. 包装消息,消息必须是复合规则的JSON数据

    3. 发送消息到APNSAPNS会等到用户打开了数据连接后就将通知发送到客户端;

  • 相关阅读:
    扫雷游戏:C++生成一个扫雷底板
    为《信息学奥赛一本通》平反(除了OJ很差和代码用宋体)
    关于最大公约数欧几里得算法辗转相除及最小公倍数算法拓展C++学习记录
    【Python】如何用较快速度用Python程序增加博客访问量——CSDN、博客园、知乎(应该包括简书)
    STL学习笔记之next_permutation函数
    C++集合容器STL结构Set
    11111111111
    express + mysql实践
    express实践
    ws:一个 Node.js WebSocket 库
  • 原文地址:https://www.cnblogs.com/ctaodream/p/3187399.html
Copyright © 2011-2022 走看看