iOS本地推送UILocalNotification

  本地通知主要是基于app本身定时器的行为。即使app在后台,也会发送本地通知。一个app只能有有限数量的预定通知,最多允许最近的64条通知,其余通知将会被系统忽略。

  推送通知的呈现效果:

  • 在屏幕顶部显示的一条横幅
  • 在屏幕中间弹出一个UIAlertView
  • 在锁屏界面显示一块横幅
  • 更新app图标的数字
  • 播放音效

1 在application: didFinishLaunchingWithOptions:方法中注册本地推送

  func application(application: UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject: AnyObject]?) -> Bool {

     //启动应用时,将badge设为0

        let badge = application.applicationIconBadgeNumber

        if badge > 0 {

            application.applicationIconBadgeNumber = 0

     }

//注册本地通知
        application.registerUserNotificationSettings(UIUserNotificationSettings(forTypes: .Badge, categories: nil))return true}

UIUserNotificationSettings的初始化方法 : 

    public convenience init(forTypes types: UIUserNotificationType, categories: Set<UIUserNotificationCategory>?)

其中UIUserNotificationType有四种类型:.None, .Badge, .Sound, .Alert。

2 创建本地通知UILocalNotification后,有两种方式可以添加到UIApplication中。

  (1) scheduledLocalNotifications,通过fireDate时间来发送通知

  (2) presentLocalNotificationNow, 会立刻发送通知,跟fireDate时间无关。

  添加一个本地通知,并在130s后取消该通知

override func viewDidLoad(){
     super.viewDidLoad() 
  
     let localNotif = UILocalNotification()//推送的时间localNotif.fireDate = NSDate(timeIntervalSinceNow: 10)//设置时区localNotif.timeZone = NSTimeZone.defaultTimeZone()//设置重复间隔localNotif.repeatInterval = .Minute//推送声音localNotif.soundName = UILocalNotificationDefaultSoundName//系统默认声音
    
localNotif.soundName = “shake.wav”              //自定义文件
     //推送内容 
     localNotif.alertBody = "推送内容"

     //显示在icon上的红色圈中的数子
     localNotif.applicationIconBadgeNumber = 1

     //设置userinfo 方便在之后需要撤销的时候使用
    localNotif.userInfo = ["key1": "name1"]

     let app
= UIApplication.sharedApplication()
    
//添加到系统的本地推送列表
     app.scheduledLocalNotifications = [localNotif]

          dispatch_after(dispatch_time(DISPATCH_TIME_NOW, Int64( Double(NSEC_PER_SEC) * 130.0 )), dispatch_get_main_queue()) {

              self.cancelLocalNotif()

         }

}

3 取消本地通知 cancelLocalNotification: 或者 cancelAllLocalNotifications

func cancalLocalNotif() {

     var
localNotif: UILocalNotification?let app = UIApplication.sharedApplication()let array = app.scheduledLocalNotificationsif array != nil && array?.count > 0 {for notif in array! {let dict = notif.userInfoif dict != nil {let value = dict!["key1"] as? String ?? ""if value == "name1" {localNotif = notifbreak}}}}if localNotif != nil {app.cancelLocalNotification(localNotif!)}
}

4 如果接受到通知时,应用在后台,通知会通过alert,sound,badge方式来体现。点击通知后,会触发application:didReceiveLocalNotification:方法。

如果接受到通知时,应用在前台,则没有alert,sound,badge,但是收到通知时仍会触发application:didReceiveLocalNotification:方法。

如果本地通知只有badge,则启动app后,在application:didFinishLaunchingWithOptions的options字典中不包含UILocalNotification对象。

   func application(application: UIApplication, didReceiveLocalNotification notification: UILocalNotification) {

     //点击通知后,将badge设为0

        let badge = application.applicationIconBadgeNumber

        if badge > 0 {

            application.applicationIconBadgeNumber = 0

     }

print(notification)print(notification.alertBody)let a = notification.userInfoif a != nil {print(a)}}

打印结果为:

<UIConcreteLocalNotification: 0x12e58db10>{fire date = 2016年8月9日 星期二 中国标准时间 下午4:27:58, time zone = Asia/Shanghai (GMT+8) offset 28800, repeat interval = NSCalendarUnitMinute, repeat count = UILocalNotificationInfiniteRepeatCount, next fire date = 2016年8月9日 星期二 中国标准时间 下午4:28:58, user info = {key1 = name1;
}}
Optional("推送内容")
Optional([key1: name1])

转载于:https://www.cnblogs.com/muzijie/p/5753774.html

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/430287.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

RxJava之PublishSubject、BehaviorSubject、ReplaySubject和AsyncSubject

public class T2 {/*** subject 是一个神奇的对象&#xff0c;它可以是一个Observable同时也可以是一个Observer&#xff1a;它作为连接这两个世界的一座桥梁。* 一个主题可以订阅一个Observable&#xff0c;就像一个观察者&#xff0c;并且它可以发射新的数据&#xff0c;或者…

3d人脸识别算法opencv_热招职位算法类

1.资深算法工程师leader-AI平台地点&#xff1a;深圳工作职责1、推进机器学习及计算机视觉领域的核心算法&#xff1b;2、构建机器学习及计算机视觉领域的关键应用&#xff1b;3、将算法于实际应用场景相结合&#xff0c;构建算法和应用的正反馈机制。任职资格1、较强的学术背景…

Android Gradle编译问题

1. Could not find lint-gradle-api.jar (com.android.tools.lint:lint-gradle-api:26.1.2). Searched in the following locations:https://jcenter.bintray.com/com/android/tools/lint/lint-gradle-api/26.1.2/lint-gradle-api-26.1.2.jar 解决方法&#xff1a; 根build.gr…

python vtk_VTK在python环境下的安装和调用

vtk,很好玩的一个可视化工具&#xff0c;有python接口。 一、安装&#xff1a; 1、平台&#xff1a;window7, python2.7 2、下载vtk: vtkpython-7.1.1-Windows-64bit.exe (http://www.vtk.org/files/release/7.1/vtkpython-7.1.1-Windows-64bit.exe 或 http://download.csdn.ne…

CruiseControl.NET与TFS结合的配置文件

配置如下&#xff1a; <cruisecontrol xmlns:cb"urn:ccnet.config.builder"><project name"测试项目" ><webURL>http://192.168.1.168/ccnet/</webURL><labeller type"dateLabeller"/><workingDirectory>D:…

Android File.listFiles()返回null问题

File.listFiles()返回null可能原因是没读取sdcard权限(READ_EXTERNAL_STORAGE WRITE_EXTERNAL_STORAGE)。 system/private-app默认都有权限&#xff0c;system/app某些系统模式下初始化后没权限&#xff0c;系统重启后有权限&#xff0c;第三方app的权限大部分是询问。 使用C…

android中实现简单的播放

1 MediaPlayer mediaPlayer1; 2 mediaPlayer1 MediaPlayer.create(getBaseContext(), R.raw.ic_yanyuan); 3 mediaPlayer1.start(); 需要在res下面新建个raw&#xff0c;然后拖拽进去一个音乐文件。转载于:https://www.cnblogs.com/yi-mi-yangguang/p/5765401.html

python能代替vba吗_VBA会被Python代替吗?

最近内测版Excel中的vlookup函数被xlookup函数代替了&#xff0c;但vlookup函数依然得到了保留。类似的&#xff0c;对于生产力工具Office套件而言&#xff0c;保证兼容性是重要的&#xff0c;Office诞生以来出现的所有功能在最新版中依然会找得到&#xff0c;因此作为内建在Of…

获取apk安装包sha1的值

1. 解压apk&#xff0c;进入解压目录&#xff0c;找到META-INF/CERT.RSA&#xff0c; 2.执行命令 keytool -printcert -file .../META-INF/CERT.RSA 可以得到md5和sha1值 证书指纹: MD5: 8D:DB:34:2F:2D:A5:40:84:02:D7:56:8A:F2:1E:29:F9 SHA1: 27:19:6E:38:6B:…

nginx 不带www到www域名的重定向

如果是单次重定向用 redirect, 如果永久跳转用 permanent&#xff0c;这里用 permanent { listen 80; server_name xxx.com www.xxx.com; index index.html index.php; root /data/www/wwwroot; if ($http_host !~ "^www.xxx.com$") { rewrite ^(.*) ht…

python dropna失败_使用Python部署机器学习模型的10个实践经验

作者&#xff1a;Pratik Bhavsar编译&#xff1a;ronghuaiyang导读使用python部署ML项目的一些经验。有时候&#xff0c;作为数据科学家&#xff0c;我们会忘记公司付钱让我们干什么。我们首先是开发人员&#xff0c;然后是研究人员&#xff0c;然后可能是数学家。我们的首要责…

ClassCastException:AdaptiveIconDrawable cannot be cast to BitmapDrawable

Caused by: java.lang.ClassCastException: android.graphics.drawable.AdaptiveIconDrawable cannot be cast to android.graphics.drawable.BitmapDrawable 出现原因是因为应用适配了API 26的自适配图标adaptive-icon&#xff0c;使用下面的方法读取icon&#xff0c;读取到应…

【JDK1.8】Java HashMap实现细节

底层是用数组实现的 /*** The table, initialized on first use, and resized as* necessary. When allocated, length is always a power of two.* (We also tolerate length zero in some operations to allow* bootstrapping mechanics that are currently not needed.)*/tr…

Android实现圆角照片和圆形照片

方法1: 使用RoundedBitmapDrawable public static RoundedBitmapDrawable bitmapToRoundedDrawable(NonNull Resources res, NonNull Bitmap bitmap,boolean circular, float cornerRadius) {RoundedBitmapDrawable drawable RoundedBitmapDrawableFactory.create(res, bitma…

python判断字符串长度_Python|判断字符串是否符合日期要求

问题描述 1.题目要求&#xff1a; 输入一串字符,由字母、数字和空格组成&#xff0c;长度<1000,判断其中是否存在日期格式的数据。日期格式的数据具有如下的特征&#xff0c;连续包含年份和月份信息。年份信息是指连续的四个数字,之后是Jan, Feb, Mar,Apr, May, Jun, Jul, A…

剑客决斗(NYOJ 110)

T3、题目110剑客决斗 &#xff08;http://acm.nyist.net/JudgeOnline/problem.php?pid110&#xff09; 描述 在路易十三和红衣主教黎塞留当权的时代&#xff0c;发生了一场决斗。n个人站成一个圈&#xff0c;依次抽签。抽中的人和他右边的人决斗&#xff0c;负者出圈。这场决斗…

Android P 网络报错 : java.io.IOException: Cleartext HTTP traffic to ***.com not permitted

在Android P 使用HttpUrlConnection进行http请求会出现以下异常 java.io.IOException: Cleartext HTTP traffic to ***.com not permitted at com.android.okhttp.HttpHandler$CleartextURLFilter.checkURLPermitted(HttpHandler.java:115) at com.android.ok…

linux免密登录_Linux SSH免密钥登录总结

Linux下生成密钥通过命令”ssh-keygen -t rsa“生成之后会在用户的根目录生成一个 “.ssh”的文件夹进入“.ssh”会生成以下几个文件authorized_keys:存放远程免密登录的公钥,主要通过这个文件记录多台机器的公钥id_rsa : 生成的私钥文件id_rsa.pub &#xff1a; 生成的公钥文件…

Android studio aar包多层嵌套,Add library ‘Gradle: __local_aars__: 。。。unspecified@jar‘ to classpath

编译出错报的日志&#xff1a; FAILURE: Build failed with an exception. * What went wrong: Execution failed for task :toolbox:compileReleaseJavaWithJavac. > Compilation failed; see the compiler error output for details. 出错的代码提示&#xff1a; Add …

约瑟夫环数数

题目&#xff1a; 有n个孩子站成一圈&#xff0c;从第一个孩子开始顺时针方向报数&#xff0c;报到3的人出列&#xff0c;下一个人继续从1报数&#xff0c;直到最后剩下一个孩子为止。问剩下第几个孩子。 (另一种题型 -> 约瑟夫环 -> 递归算法 http://www.cnblogs.com/…