IOS 推送通知 本地推送和远程推送

Unity如何接入本地推送 Mobile Notifications 一. 前言: 当一款游戏发展到一定阶段,必不可少的要接入推送SDK,推送功能,分为以下两种: 本地推送:玩家打开游戏后,给手机系统通知设置推送的倒计时,等游戏关闭后,倒计时结束时,手机会自动打开通知给用户。由于是提前设定死的内容和计时器,所以灵活性差。 远程通知:有一个服务器后台,可以随时随地给玩家发送通知提醒。好处是灵活,但是坏处就是无法根据用户的进度,定制推送内容。所有用户一把抓,走统一逻辑推送。 二.本地推送 本地推送我们接入的是Unity自带的工具包Mobile Notification 阅读详情

什么是推送通知?

首先明确:**此处的推送通知跟我们的”NSNotification”没有半毛钱关系
可以理解为: 向用户推送一条信息来通知用户某件事情
作用: 可以在APP退到后台,或者关闭时;继续推送一条消息告诉用户某件事情

推送通知的应用场景?

  • (1) 一些任务管理APP,会在任务时间即将到达时,通知你做该任务;
    (2) 健身App定时提醒你应该健身了;
    (3) 买过电影票后,提前半小时告诉你,电影即将开场;
    (4) 当你QQ或者微信收到消息时,即使退到后台,或者关闭APP,也可以收到信息通知告诉我们;
    (5) 电商APP,推送一条消息通知我们有新品上架等等

推送通知的分类

  • 本地推送通知

    “本地”可以理解为”不联网”;即使没有网络情况下,也可以推送通知消息
    应用场景: 确定知道未来某个时间点应该提醒用户什么
    通知发送方:开发人员负责在app内部发送

  • 远程推送通知

    与“本地”相对,表示,必须在联网情况下才会向用户推送通知消息
    远程推送服务,又称为APNs(Apple Push Notification Services)

    应用场景:

    1. 不确定未来某个时间点应该提醒用户什么,临时性的
    2. 当APP彻底退出时也想继续让用户获取一些最新消息
  • 使用原则: 谁能确定通知时间和内容, 谁就可以发送(开发人员在APP内部通过代码发送=本地通知; 服务器可以确定通知时间和内容=远程通知)*

远程推送的呈现效果

image.png

本地推送通知

在iOS8.0之后 使用本地通知需要得到用户的许可 在didFinishLaunchingWithOptions里面添加请求

if(系统版本 >= 8.0)
{
    // 注册接收通知的类型
    UIUserNotificationSettings *settings = [UIUserNotificationSettings settingsForTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound categories:nil];
    [application registerUserNotificationSettings:settings];

    // 注册允许接收远程推送通知
    [application registerForRemoteNotifications];
}
else
{
    // 如果是iOS7.0,使用以下方法注册
    [application registerForRemoteNotificationTypes:UIUserNotificationTypeAlert | UIUserNotificationTypeBadge | UIUserNotificationTypeSound];
}

//swfit:

 if #available(iOS 8.0, *)
        {
            // 注册接收通知的类型
            let type = UIUserNotificationType.alert.rawValue | UIUserNotificationType.badge.rawValue | UIUserNotificationType.sound.rawValue
            let settings = UIUserNotificationSettings(types: UIUserNotificationType(rawValue: type), categories: nil)
            
            UIApplication.shared.registerUserNotificationSettings(settings)
            // 注册允许接收远程推送通知
            UIApplication.shared.registerForRemoteNotifications()
        }

发送一个本地通知

@IBAction func puchNotionfication(_ sender: Any)
    {
    // 如果是ios8.0以前, 以下代码, 可以直接发送一个本地通知,
    // 但是, 如果是ios8.0以后, 你需要主动的请求授权, 才可以
    // 通知显示的条件
    // 必须不能再前台
        
        //1.创建一个t本地通知
        let localNoti = UILocalNotification()
        //2. 设置通知内容
        localNoti.alertBody = "这是一个好日字"
        //3. 设置发送通知的时间触发时间
        localNoti.fireDate = Date(timeIntervalSinceNow: 4) 
    
        //重复周期
        // localNoti.repeatInterval = .weekday
        //设置滑动文字
        localNoti.hasAction = true
        localNoti.alertAction = "回复"
        // 启动图片(当用户点击了本地通知, 启动我们APP 的时候, 带的启动图片)
               // 如果是在ios9.0以前, 当锁屏界面, 出现一个通知, 用户点击了通知, 启动APP 的时候, 会自动将我们设置的图片, 当做启动图像 来显示
               // ios9.0, 这个属性, 不太灵
               // 如果这个图片,找不到, 会使用系统默认的启动图片
        localNoti.alertLaunchImage = "2"
        
        
               // 设置通知弹框的标题
               // 标题, 这对于, 通知中心的通知有效
        if #available(iOS 8.2, *)
        {
            localNoti.alertTitle = "斗地主"
        }

        // 设置图标右上角的数字(0 代表不显示)
        localNoti.applicationIconBadgeNumber = 3
         // userInfo 额外信息
        localNoti.userInfo = ["name":"哥哥", "sex":"女"]
        

    
        //应用程序级别的操作 ,调度本地通知,完成之后,会在特定的fireDate发出通知

        UIApplication.shared.scheduleLocalNotification(localNoti)
        
    }

其他的属性和方法

调度本地推送通知(调度完毕后,推送通知会在特地时间fireDate发出)
[[UIApplication sharedApplication] scheduleLocalNotification:ln];

获得被调度(定制)的所有本地推送通知
@property(nonatomic,copy) NSArray *scheduledLocalNotifications;
(已经发出且过期的推送通知就算调度结束,会自动从这个数组中移除)

取消调度本地推送通知
- (void)cancelLocalNotification:(UILocalNotification *)notification;
- (void)cancelAllLocalNotifications;

立即发出本地推送通知
- (void)presentLocalNotificationNow:(UILocalNotification *)notification;


每隔多久重复发一次推送通知
@property(nonatomic) NSCalendarUnit repeatInterval;

点击推送通知打开app时显示的启动图片
@property(nonatomic,copy) NSString *alertLaunchImage;

附加的额外信息
@property(nonatomic,copy) NSDictionary *userInfo;

时区
@property(nonatomic,copy) NSTimeZone *timeZone;
(一般设置为[NSTimeZone defaultTimeZone] ,跟随手机的时区)

点击本地通知

当用户点击本地推送通知,会自动打开app,这里有2种情况

  1. app并没有关闭,一直隐藏在后台
    让app进入前台,并会调用AppDelegate的下面方法(并非重新启动app)
- (void)application:(UIApplication *)application didReceiveLocalNotification:(UILocalNotification *)notification;
  1. app已经被关闭(进程已死)
    启动app,启动完毕会调用AppDelegate的下面方法
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
launchOptions参数通过UIApplicationLaunchOptionsLocalNotificationKey取出本地推送通知对象

添加一些额外的操作

IMG_0497.PNG
func registerAuthor()
    {
        // Override point for customization after application launch.
           if #available(iOS 8.0, *)
           {
               // 注册接收通知的类型
               let type = UIUserNotificationType.alert.rawValue | UIUserNotificationType.badge.rawValue | UIUserNotificationType.sound.rawValue
            
               
            
            
            //1.创建z一组操作行为
            let category = UIMutableUserNotificationCategory()
            //1.1设置组标识
            category.identifier = "select"
            //1.2设置组里面的行为
            let action1 = UIMutableUserNotificationAction()
            action1.identifier = "queding"
            action1.title = "确定"
            // behavior todo
                       
            // 代表, 用户如果点击了这个动作, 拉到底, 是在前台运行这个动作, 还是在后台
            action1.activationMode = .foreground
             // 必须要解锁之后, 行为才会执行(如果activationMode, 是前台状态, 那这个属性, 就会被忽略)
            action1.isAuthenticationRequired = true
            // 是否是破坏性行为(会使用一个红色的标识, 来标识这个按钮)
            action1.isDestructive = false
            
            //1.1设置组标识
            category.identifier = "select"
            
            //1.2设置组里面的行为
            let action2 = UIMutableUserNotificationAction()
            action2.identifier = "huifu"
            action2.title = "回复"
            
            // behavior todo
            if #available(iOS 9.0, *)
            {
                action2.behavior = .textInput
                action2.parameters = [UIUserNotificationTextInputActionButtonTitleKey: "确定"]
                    
            }
                                      
            // 代表, 用户如果点击了这个动作, 拉到底, 是在前台运行这个动作, 还是在后台
            action2.activationMode = .background
            // 必须要解锁之后, 行为才会执行(如果activationMode, 是前台状态, 那这个属性, 就会被忽略)
            action2.isAuthenticationRequired = false
            // 是否是破坏性行为(会使用一个红色的标识, 来标识这个按钮)
            action2.isDestructive = false
            
            
            let actions = [action1, action2]
            
            // 如果针对于弹框样式的通知
            // default 代表, 最多可以显示4个按钮
            // minimal, 代表,最多可以显示2个按钮
            category.setActions(actions, for: .default)
            
            //附加操作行为组
            let categorys : Set<UIUserNotificationCategory> = [category]
            
               let settings = UIUserNotificationSettings(types: UIUserNotificationType(rawValue: type), categories: categorys)
                UIApplication.shared.registerUserNotificationSettings(settings)
            
               // 注册允许接收远程推送通知
               UIApplication.shared.registerForRemoteNotifications()
           }
               
        
    }
     // completionHandler, 系统提供的回调代码块, 执行这个代码块, 到时候, 系统会采集一些信息
    func application(_ application: UIApplication, handleActionWithIdentifier identifier: String?, for notification: UILocalNotification, completionHandler: @escaping () -> Void)
    {
        print(identifier,notification)
        print("old")
        completionHandler()
    }
    // 9.0
    // 如果实现了这个方法, 那么上面一个方法, 就不再执行
    func application(_ application: UIApplication, handleActionWithIdentifier identifier: String?, for notification: UILocalNotification, withResponseInfo responseInfo: [AnyHashable : Any], completionHandler: @escaping () -> Void) {
        print("new")
        print(identifier,responseInfo)
        completionHandler()
    }

远程推送

什么是远程推送通知

  • 顾名思义,就是从远程服务器推送给客户端的通知(需要联网)
  • 远程推送服务,又称为APNs(Apple Push Notification Services
为什么需要远程推送通知?

传统获取数据的局限性
只要用户关闭了app,就无法跟app的服务器沟通,无法从服务器上获得最新的数据内容
不管用户打开还是关闭app,只要联网了,都能接收到服务器推送的远程通知

所有的苹果设备,在联网状态下,都会与苹果的服务器建立长连接

  • 什么是长连接
    只要联网了,就一直建立连接

  • 长连接的作用
    时间校准
    系统升级
    查找我的iPhone
    .. ...

  • 长连接的好处
    数据传输速度快
    数据保持最新状态

获取deviceToken

苹果需要用户的UDID和bundleID

获取过程

qq案例分析

  1. app 发送设备的UDID和
    应用的Bundle Identifier
    给APNs服务器

  2. 经苹果加密生成一个
    deviceToken 返还给当前app

  3. app发送当前用户的deviceToken
    和用户的标志(比如id或者qq) 给qq服务器

  4. qq服务器将用户的deviceToken存进数据库

  5. 当有人发送消息 李四的手机(昵称:李四 QQ:56789)
    发给张三(QQ12345):吃饭没?

  6. 消息先到qq服务器,然后去数据库查询张三的deviceToken

  7. qq服务器通知苹果服务器
    deviceTokoen:888
    body:李四:吃饭没?

  8. 苹果服务器通过deviceToken找到张三现在的设备

一.开发iOS程序的推送功能, iOS端需要做的事

1.请求苹果获得deviceToken
2.得到苹果返回的deviceToken,发送deviceToken给公司的服务器

  1. 监听用户对通知的点击

二.调试iOS的远程推送功能, 必备条件:

1.真机

2.调试推送需要的证书文件
1> aps_development.cer : 某台电脑就能调试某个app的推送服务
2> iphone5_qq.mobileprovision : 某台电脑就能利用某台设备调试某个程序

三.发布具有推送服务的app

1> aps_production.cer : 如果发布的程序中包含了推送服务,就必须安装这个证书
2> qq.mobileprovision : 某台电脑就能发布某个程序

制作证书

截屏2020-05-27下午4.42.59.png
截屏2020-05-27下午4.43.18.png
截屏2020-05-27下午4.43.09.png
截屏2020-05-27下午4.43.25.png
截屏2020-05-27下午4.43.35.png
截屏2020-05-27下午4.43.44.png

注册远程推送通知

客户端如果想接收APNs的远程推送通知,必须先注册(得到用户的授权)
一般在App启动完毕后就马上注册

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{
    // 注册远程通知
       UIRemoteNotificationType type = UIRemoteNotificationTypeAlert | UIRemoteNotificationTypeBadge | UIRemoteNotificationTypeSound;
    [application registerForRemoteNotificationTypes:type];
    return YES;
}
  • 注册成功后会调用AppDelegate的下面方法,得到设备的deviceToken
- (void)application:(UIApplication *)application didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken
{
    NSLog(@"%@", deviceToken);
}

点击远程推送通知

当用户点击远程推送通知,会自动打开app,这里有2种情况
app并没有关闭,一直隐藏在后台
让app进入前台,并会调用AppDelegate的下面方法(并非重新启动app)

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

app已经被关闭(进程已死)
启动app,启动完毕会调用AppDelegate的下面方法

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions;
launchOptions参数通过UIApplicationLaunchOptionsRemoteNotificationKey取出服务器返回的字典内容
iOS学习笔记之远程推送、静默推送与自定义消息推送 远程推送时 , 应用可能处于下列三种状态:      (1) . 应用开启时 , 应用在前台     (2) . 应用开启时 , 应用在后台     (3) . 应用未启动(应用被杀死) 从苹果APNS服务器远程推送时: 1 . 如果应用处于 (1) 状态 , 则不会发出声音 , 会直接调用appDelegate的代理方法didReceiveRemoteNotification,此时如果想收到类似系统的弹窗提示,则需要自定义弹窗,提示音,振动(弹窗可以参考 : ForeNotification  (本地下载)) AudioServicesPlaySystemSound(1007);/ 立即下载

相关推荐

AURIX™ TC49x芯片手册中文分享(二)

主要内容为第一章、功能模块的特征

xibaofenqi的博客 1561

iOS 消息推送原理及简单实现(远程和本地)

从图中可以很清楚的看出来推送的原理主要分为以下几步: 1.由App向iOS设备发送一个注册通知,用户需要同意系统发送推送。 2.iOS向APNs远程推送服务器发送App的Bundle Id和设备的UDID。 3.APNs根据设备的UDID和App的Bundle Id生成deviceToken再发回给App。 4.App再将deviceToken发送给远程推送服务器(自己的服务器), 由服务器保存在数据库中。 5.当自己的服务器想发送推送时, 在远程推送服务器中输入要发送的消息并选择发给哪些用户的devi..

u013712343的博客 3493

LRTimelapse Pro v7.0.0 激活版下载安装教程 (延迟摄影后期渲染)

LRTimelapse Pro 是一款优秀的高级延时摄影解决方案,使用将为用户提供最全面的工具和功能,从导入和组织您的延时摄影序列、视觉工作流程、在 LRTimelapse 中直接编辑和渲染、视觉去闪烁等等,功能齐全,可以使用 LRTimelapse Pro 编辑多个序列时显著提高您的效率,轻松在 LRTimelapse 中配置和使用色彩管理,进行长期延时编辑,在 LRTimelapse Pro 中使用长期工作流程。为延时编辑、关键帧、分级和渲染提供最全面的解决方案。

wyqshusan的博客 3464

iOS推送总结之远程推送(基础)

参考:iOS推送之远程推送(iOS Notification Of Remote Notification) 1.远程推送原理 iOS APP大多数是基于client/server模式下开发的,client就是安装在我们设备上的APP,server就是远程服务器,主要给我们APP提供数据,因此也被称为Provide。当APP处于Terminate状态的时候,当client与server断开的时

leiyutinghua的博客 935

专有钉钉小程序(浙政钉)开发搭建流程总览

最近公司有一个项目要做浙政钉,让我来负责做。靠,我一脸懵,开发了两年多不知道浙政钉是啥,感觉我眼界还是低了。然后就去百度、同事问了一圈才知道就是个钉钉小程序嘛,然后发布到浙政钉上了。就搭建项目跑起来我都肥了很多事,中间走了很多坑。正好领导让我写《钉钉小程序前端开发流程》,这想着也写个博客吧。下面就是整个流程及我所遇到的坑!

m0_53910290的博客 6355

OpenCV实战系列——图像线条提取

基于内容的图像分析,需要从构成图像的像素集合中提取有意义的特征。轮廓、线条、区域等是基本的图像基元,可用于描述图像中包含的元素。本节将介绍如何提取重要的图像线条特征。

m0_58523831的博客 1万+

ios客户端学习笔记(八):iOS客户端的推送通知

iOS客户端的推送通知是指通过苹果的推送通知服务(APNs)向已安装应用程序的设备发送通知消息。这些通知可以在设备的锁屏屏幕、通知中心和应用程序内展示,以提醒用户有新的消息或事件需要处理。

goodgoodstudy___的博客 1985

【RT-DETR实战】112、NCNN模型转换与层实现支持:从模型文件到推理引擎的硬核实战

本文详细记录了将RT-DETR模型部署到NCNN框架的全过程及关键要点。作者首先遇到MultiHeadAttention等算子不支持的问题,通过ONNX中间转换和自定义层实现解决。文章具体介绍了PyTorch到NCNN的权重转换技巧、模型优化方法(包括量化和线程优化)以及调试经验,强调逐层对比输出、预处理检查和边界情况测试的重要性。最后分享了保持转换流程可复现性的实用建议,指出手动调试虽然耗时但能加深对模型的理解,体现了工程师在解决技术难题时的专业精神与成就感。

企鹅码农的专属播客,分享10多年的实战案例和经验解读,包含YOLO、RT-DETR、AI等各个工作领域。 41

苹果远程推送通知 APNs 详解,官方,iOS | Swift | UNNotification

本文是翻译的 APNs 的官方说明 自己英文不是太好,花了不少时间来翻译,其实之前我是看不进去的。后来发现,只要你一点一点的看,总是能看进去的。 APNs 概述APNs (Apple Push Ontification service) 服务是远程通知的核心。该服务健全、安全、高效,开发者可以方便的向 iOS tvOS macOS 终端设备推送通知。当应用在用户设备上运行的时候会在用户设备

学习笔记 3216

YOLOv11训练:Roboflow免费数据集获取与格式转换超详细教程

公共数据集库:包含超过20,000个开源数据集数据标注工具:支持在线标注和团队协作数据预处理:自动增强、扩充和格式化版本控制:像管理代码一样管理数据集版本多格式导出:支持所有主流目标检测格式import cv2# 加载图像# 加载标注# 数据增强# 调整尺寸# 调整标注坐标# 转换为Tensor# 实现保持长宽比的resize逻辑pass# 坐标转换逻辑pass# 数据增强实现pass数据集选择优先选择Roboflow上标注质量高的官方数据集。

weixin_39818775的博客 2359

TEA-Tiny Encryption算法在FPGA的实现

在FPGA原型中,我们定义了一个TEA_FPGA模块,该模块包含一个输入数据端口(plain)、一个输入密钥端口(key)和一个输出数据端口(cipher)。在模块中,我们通过32轮的循环处理来实现TEA算法的加密过程,并将最终结果存储在cipher变量中。由于FPGA硬件的高速性能,这种基于HDL的TEA算法实现可以在短时间内完成大量的数据加密处理,从而提高加密效率和性能。总之,在FPGA中实现TEA算法可以大大提高加密效率和性能,通过使用硬件描述语言HDL来实现可以更高效、更快速地完成数据加密操作。

BitSlinger的博客 272

IOS之推送通知(本地推送和远程推送)

推送通知和NSNotification是有区别的: NSNotification:是看不到的 推送通知:是可以看到的 IOS中提供了两种推送通知 本地推送通知:(Local Notification):手机应用本身的通知,比如:闹铃 远程推送通知:(Remote Notification)从服务器发送过来的通知 推送通知的作用:让不在前台运行的App,告知用户App内部...

Jackzhang640830的博客 458

PyTorch深度学习实战(1)——神经网络与模型训练过程详解

在本节中,我们将了解传统机器学习与人工神经网络间的差异,并了解如何在实现前向传播之前连接网络的各个层,以计算与网络当前权重对应的损失值;实现反向传播以优化权重达到最小化损失值的目标。并将实现网络的所有关键组成——前向传播、激活函数、损失函数、链式法则和梯度下降,从零开始构建并训练了一个简单的神经网络。

盼小辉丶的博客 9万+

iOS本地通知和远程推送

本地通知(local notification),用于基于时间行为的通知

ali的专栏 697

ET2012新版免狗免安装绿色软件

ET2012新版免狗免安祖昂绿色软件。,新界面,新视觉,

pscad IEEE标准系统搭建说明

pscad IEEE标准系统搭建说明,包含典型的IEEE 9节点、14节点、30节点、39节点和118节点系统。内含标准测试系统的原始数据和潮流结果。

iOS 推送通知:本地通知(UILocalNotification)和远程通知(APNs)详解

——本地推送通知推送通知的作用?在App退到后台或者完全退出时,可以使用通知来告诉用户某件事情,比如推送新的聊天消息、新闻等通知对应的效果: 在主屏幕的顶端会出现通知消息 当手机锁屏时出现在锁屏界面,可以通过滑动打开该App, 在通知中心中出现推送的消息 App图标会有微标值① badgeValue 推送通知提示音 注意: 发送通知时,如果程序正在前台允许,那么推送通知UI就不会显示出来;点击通

人不风流枉少年 1万+

深度学习工具包 DeepLearningToolbox

深度学习工具包Deprecation notice.-----This toolbox is outdated and no longer maintained.There are much better tools available for deep learning than this toolbox, e.g. [Theano](http://deeplearning.net/software/theano/), [torch](http://torch.ch/) or [tensorflow](http://www.tensorflow.org/)I would suggest you use one of the tools mentioned above rather than use this toolbox.Best, Rasmus.DeepLearnToolbox================A Matlab toolbox for Deep Learning.Deep Learning is a new subfield of machine learning that focuses on learning deep hierarchical models of data.It is inspired by the human brain's apparent deep (layered, hierarchical) architecture.A good overview of the theory of Deep Learning theory is[Learning Deep Architectures for AI](http://www.iro.umontreal.ca/~bengioy/papers/ftml_book.pdf)For a more informal introduction, see the following videos by Geoffrey Hinton and Andrew Ng.* [The Next Generation of Neural Networks](http://www.youtube.com/watch?v=AyzOUbkUf3M) (Hinton, 2007)* [Recent Developments in Deep Learning](http://www.youtube.com/watch?v=VdIURAu1-aU) (Hinton, 2010)* [Unsupervised Feature Learning and Deep Learning](http://www.youtube.com/watch?v=ZmNOAtZIgIk) (Ng, 2011)If you use this toolbox in your research please cite [Prediction as a candidate for learning deep hierarchical models of data](http://www2.imm.dtu.dk/pubdb/views/publication_details.php?id=6284)```@MASTERSTHESIS\{IMM2012-06284, author = "R. B. Palm", title = "Prediction as a candidate for learning deep hierarchical models of data", year = "2012",}```Contact: rasmusbergpalm at gmail dot comDirectories included in the toolbox-----------------------------------`NN/` - A library for Feedforward Backpropagation Neural Networks`CNN/` - A library for Convolutional Neural Networks`DBN/` - A library for Deep Belief Networks`SAE/` - A library for Stacked Auto-Encoders`CAE/` - A library for Convolutional Auto-Encoders`util/` - Utility functions used by the libraries`data/` - Data used by the examples`tests/` - unit tests to verify toolbox is workingFor references on each library check REFS.mdSetup-----1. Download.2. addpath(genpath('DeepLearnToolbox'));Example: Deep Belief Network---------------------```matlabfunction test_example_DBNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit RBM and visualize its weightsrand('state',0)dbn.sizes = [100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);figure; visualize(dbn.rbm{1}.W'); % Visualize the RBM weights%% ex2 train a 100-100 hidden unit DBN and use its weights to initialize a NNrand('state',0)%train dbndbn.sizes = [100 100];opts.numepochs = 1;opts.batchsize = 100;opts.momentum = 0;opts.alpha = 1;dbn = dbnsetup(dbn, train_x, opts);dbn = dbntrain(dbn, train_x, opts);%unfold dbn to nnnn = dbnunfoldtonn(dbn, 10);nn.activation_function = 'sigm';%train nnopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.10, 'Too big error');```Example: Stacked Auto-Encoders---------------------```matlabfunction test_example_SAEload mnist_uint8;train_x = double(train_x)/255;test_x = double(test_x)/255;train_y = double(train_y);test_y = double(test_y);%% ex1 train a 100 hidden unit SDAE and use it to initialize a FFNN% Setup and train a stacked denoising autoencoder (SDAE)rand('state',0)sae = saesetup([784 100]);sae.ae{1}.activation_function = 'sigm';sae.ae{1}.learningRate = 1;sae.ae{1}.inputZeroMaskedFraction = 0.5;opts.numepochs = 1;opts.batchsize = 100;sae = saetrain(sae, train_x, opts);visualize(sae.ae{1}.W{1}(:,2:end)')% Use the SDAE to initialize a FFNNnn = nnsetup([784 100 10]);nn.activation_function = 'sigm';nn.learningRate = 1;nn.W{1} = sae.ae{1}.W{1};% Train the FFNNopts.numepochs = 1;opts.batchsize = 100;nn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.16, 'Too big error');```Example: Convolutional Neural Nets---------------------```matlabfunction test_example_CNNload mnist_uint8;train_x = double(reshape(train_x',28,28,60000))/255;test_x = double(reshape(test_x',28,28,10000))/255;train_y = double(train_y');test_y = double(test_y');%% ex1 Train a 6c-2s-12c-2s Convolutional neural network %will run 1 epoch in about 200 second and get around 11% error. %With 100 epochs you'll get around 1.2% errorrand('state',0)cnn.layers = { struct('type', 'i') %input layer struct('type', 'c', 'outputmaps', 6, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %sub sampling layer struct('type', 'c', 'outputmaps', 12, 'kernelsize', 5) %convolution layer struct('type', 's', 'scale', 2) %subsampling layer};cnn = cnnsetup(cnn, train_x, train_y);opts.alpha = 1;opts.batchsize = 50;opts.numepochs = 1;cnn = cnntrain(cnn, train_x, train_y, opts);[er, bad] = cnntest(cnn, test_x, test_y);%plot mean squared errorfigure; plot(cnn.rL);assert(er<0.12, 'Too big error');```Example: Neural Networks---------------------```matlabfunction test_example_NNload mnist_uint8;train_x = double(train_x) / 255;test_x = double(test_x) / 255;train_y = double(train_y);test_y = double(test_y);% normalize[train_x, mu, sigma] = zscore(train_x);test_x = normalize(test_x, mu, sigma);%% ex1 vanilla neural netrand('state',0)nn = nnsetup([784 100 10]);opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samples[nn, L] = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.08, 'Too big error');%% ex2 neural net with L2 weight decayrand('state',0)nn = nnsetup([784 100 10]);nn.weightPenaltyL2 = 1e-4; % L2 weight decayopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex3 neural net with dropoutrand('state',0)nn = nnsetup([784 100 10]);nn.dropoutFraction = 0.5; % Dropout fraction opts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex4 neural net with sigmoid activation functionrand('state',0)nn = nnsetup([784 100 10]);nn.activation_function = 'sigm'; % Sigmoid activation functionnn.learningRate = 1; % Sigm require a lower learning rateopts.numepochs = 1; % Number of full sweeps through dataopts.batchsize = 100; % Take a mean gradient step over this many samplesnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex5 plotting functionalityrand('state',0)nn = nnsetup([784 20 10]);opts.numepochs = 5; % Number of full sweeps through datann.output = 'softmax'; % use softmax outputopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, train_x, train_y, opts);[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');%% ex6 neural net with sigmoid activation and plotting of validation and training error% split training data into training and validation datavx = train_x(1:10000,:);tx = train_x(10001:end,:);vy = train_y(1:10000,:);ty = train_y(10001:end,:);rand('state',0)nn = nnsetup([784 20 10]); nn.output = 'softmax'; % use softmax outputopts.numepochs = 5; % Number of full sweeps through dataopts.batchsize = 1000; % Take a mean gradient step over this many samplesopts.plot = 1; % enable plottingnn = nntrain(nn, tx, ty, opts, vx, vy); % nntrain takes validation set as last two arguments (optionally)[er, bad] = nntest(nn, test_x, test_y);assert(er < 0.1, 'Too big error');```[![Bitdeli Badge](https://d2weczhvl823v0.cloudfront.net/rasmusbergpalm/deeplearntoolbox/trend.png)](https://bitdeli.com/free "Bitdeli Badge")

IOS 本地和远程推送通知详解

这里主要详细介绍苹果的远程推送服务,在本文后会有本地通知的简单示例。 一,IOS远程通知服务APNs 苹果的APNs(苹果推送通知服务Apple Push Notification server)允许设备和苹果的推送通知服务器保持链接,支持开发者推送消息到给用户设备对应的应用程序。 苹果的APNs基本原理是: 首先由应用注册远程通知。注册成功之后APNs会返回一个唯一标示的设备令牌码devi

CuiAnkly的博客 1809

Statistics and Machine Learning Toolbox

Statistics and Machine Learning Toolbox(带书签),MATLAB统计学习工具

unity android 远程推送,Unity本地通知(iOS和Android)

using System.Collections;using System.Collections.Generic;using UnityEngine;#if UNITY_IPHONEusing NotificationServices = UnityEngine.iOS.NotificationServices;using NotificationType = UnityEngine.iOS.N...

weixin_39821330的博客 491

本地推送通知和远程推送通知

推送通知 推送通知跟NSNotification有所区别: 1> NSNotification是抽象的,不可见的 2> 推送通知是可见的(能用肉眼看到)iOS中提供了2种推送通知: 本地推送通知, 远程推送通知 1> 本地推送通知(Local Notification) 2> 远程推送通知(Remote Notification)推送通知可以不让在前台运行的app,告知app

ismilesky的博客 1490

iOS推送通知

推送通知,也被叫做远程通知,是在iOS 3.0以后被引入的功能。是当程序没有启动或不在前台运行时,告诉用户有新消息的一种途径,是从外部服务器发送到应用程序上的。一般说来,当要显示消息或下载数据的时候,通知是由远程服务器(程序的提供者)发送,然后通过苹果的推送通知服务(Apple Push Notification Service,简称APNS)推送到设备的程序上。直接由应用程序(程序中写入对应代码)给用户发出通知本地通知需要用到一个重要的类:本地通知的实现步骤:(1)创建本地通知。

旭日的博客 4285

IOS 推送(本地推送、远程推送、三方推送[极光推送])

1.本地推送 关于本地推送的作用及意义:【后期完善】 实现步骤 大致4步:1创建通知、2注册通知、3实现函数、4删除通知 注意! 下面的内容中没有提到:在使用通知的时候,为了避免重复注册:最好在生命周期的函数中进行 注册 和 删除通知 如下: //注册通知 - (void)viewWillAppear:(BOOL)animated {     、、、、、 }

kenshin的专栏 3626

XZ_iOS中推送通知~本地推送通知的实现

本地推送通知:顾名思义,就是不需要联网就能发出的推送通知(不需要服务器的支持) 本地推送通知的使用场景:1>常用来定时提醒用户完成一些任务,比如:清理垃圾、记账、买衣服、看电影、玩游戏

understand_XZ的博客 545

iOS本地推送和远程推送详解

一、简介 分为本地推送和远程推送2种。可以在应用没有打开甚至手机锁屏情况下给用户以提示。它们都需要注册,注册后系统会弹出提示框(如下图)提示用户是否同意,如果同意则正常使用;如果用户不同意则下次打开程序也不会弹出该提示框,需要用户到设置里面设置。一共有三种提示类型: UIUserNotificationTypeBadge:应用图标右上角的信息提示     UIUserNotifi

lichuanlong007的博客 454

iOS本地通知和远程通知

本篇文章主要是整理一下有关通知的相关知识。主要介绍: 本地通知远程通知 本文参考: 编写push notification之获取device token编写push notification之服务器端发送通知iOS实现本地通知iOS实现本地通知 本地通知  本地通知,local notification,用于基于时间行为的通知,比如有关日历或者todo列表的小应用。另

xiaoxuan415315的专栏 956

iOS开发 - ANPs推送通知

转自:http://blog.youkuaiyun.com/wangzi11322/article/details/45458591 推送通知 注意:这里说的推送通知跟NSNotification有所区别 NSNotification是抽象的,不可见的 推送通知是可见的(能用肉眼看到) iOS中提供了2种推送通知 本地推送通知(Local Notification) 远程推送

1147

ios中的推送通知

注意: 这里的推送通知和NSNotificaton有所区别。NSNotification是抽象的不可见的。推送通知是可见的(能用肉眼看见的) 推送通知分两种:本地推送通知(local notification)和远程推送通知(remote notification) 推送通知:可以让不在前台运行的app(在后台,或者是关闭),告知用户app内部发生了什么事情。 本地推送通知:不需要联网

u012409247的博客 898
上一篇: IOS 内购
下一篇: IOS 传感器
I微微一笑I
博客等级 码龄11年 0粉丝 86原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值