APNS SHELL SAMPLE

apns-push.sh Get curl with HTTP/2 and openssl with ECDSA: ‘brew install curl openssl’ curl=/usr/bin/curl openssl=/usr/bin/openssl ————————————————————————– HostDevelopment = “https://api.development.push.apple.com” HostProduction = “https://api.push.apple.com” deviceToken=A4A9C1DACC0D0B858EC81EBCD2D01BA06FA4F9C213C3AE8A60242C1BFCC0D854 authKey=”./AuthKey_G9PBT4SCXY.p8″ authKeyId=G9PBT4SCXY teamId=88JGVVK94C bundleId=com.eziagent.yiju endpoint=https://api.development.push.apple.com read -r -d ” payload <<-‘EOF’ { “aps”: { “badge”: 2, “category”: “mycategory”, “alert”: { “title”: “my title”, “subtitle”: “my subtitle”, “body”: “my body text message” } …

iOS 10 UserNotifications 框架解析

iOS 10 中以前杂乱的和通知相关的 API 都被统一了,现在开发者可以使用独立的 UserNotifications.framework 来集中管理和使用 iOS 系统中通知的功能。在此基础上,Apple 还增加了撤回单条通知,更新已展示通知,中途修改通知内容,在通知中展示图片视频,自定义通知 UI 等一系列新功能,非常强大。 对于开发者来说,相较于之前版本,iOS 10 提供了一套非常易用的通知处理接口,是 SDK 的一次重大重构。而之前的绝大部分通知相关 API 都已经被标为弃用 (deprecated)。 这篇文章将首先回顾一下 Notification 的发展历史和现状,然后通过一些例子来展示 iOS 10 SDK 中相应的使用方式,来说明新 SDK 中通知可以做的事情以及它们的使用方式。 您可以在 WWDC 16 的 Introduction to Notifications 和 Advanced Notifications 这两个 Session 中找到详细信息;另外也不要忘了参照 UserNotifications 的官方文档以及本文的实例项目 UserNotificationDemo。 Notification 历史和现状 碎片化时间是移动设备用户在使用应用时的一大特点,用户希望随时拿起手机就能查看资讯,处理事务,而通知可以在重要的事件和信息发生时提醒用户。完美的通知展示可以很好地帮助用户使用应用,体现出应用的价值,进而有很大可能将用户带回应用,提高活跃度。正因如此,不论是 Apple 还是第三方开发者们,都很重视通知相关的开发工作,而通知也成为了很多应用的必备功能,开发者们都希望通知能带来更好地体验和更多的用户。 但是理想的丰满并不能弥补现实的骨感。自从在 iOS 3 引入 Push Notification 后,之后几乎每个版本 Apple 都在加强这方面的功能。我们可以回顾一下整个历程和相关的主要 API: …

Swift-本地通知和远程通知

指推送通知跟NSNotification有区别: 1、NSNotification是系统内部发出通知,一般用于内部事件的监听,或者状态的改变等等,是不可见的2、本地通知与远程通知是可见的,主要用于告知用户或者发送一些App的内容更新,推送一些相关的消息,让用户知道App内部发生了什么事情。 通知的注意点 1、App在前台运行的时候,通知不会展示出来2、点击通知,默认会自动打开推送通知的App3、不管App是否打开,通知都可以如期发出 1. 什么是本地推送通知 不需要联网就可以发出的通知 使用场景: 提醒用户完成一些任务,比如:定时提醒,生活备注,看电影等等 推送通知属性: 如何发出本地通知: 使用注意:iOS7,不需要用户授权就可发出通知,而iOS8以后,必须用户授权才可以发出通知 监听通知,如果用户打开通知,可以让用户进入一些特定的界面 2. 什么是远程推送通知 <1>从远程服务器推送给客户端的通知,需要连接网络<2>远程推送服务,又称为APNs 苹果推送通知服务(Apple Push Notification services)<3>模拟器无法调试远程推送 传统推送通知 传统推送通知是相对于APNs而言的,传统推送通知的原理是:当APP打开时和App的服务器建立一个长连接(需要网络),当需要通知的时候,App服务器通过长连接向对应的客户端发送数据,当客户端接收到数据时使用UILocalNotfication本地通知的方式来展示,这样就实现了传统推送通知。 传统推送通知必须要联网,如果关闭了App或者打开了App但是无法连接服务器了,这些情况都收不到通知了。 APNs 所有苹果设备在联网状态下都会与苹果服务器建立长连接,连接是双向的,苹果设备可以向苹果服务器发送请求,苹果服务器也可以向苹果设备发送请求。 苹果服务器常用的通知功能: <1>时间校准<2>系统升级<3>查找我的iPhone长连接的好处:更加及时 为什么需要远程推送通知: 解决获取传统数据的局限性,让数据实时更新 使用场景: 聊天功能(一般非即时聊天)、推送一下App的内部新功能、版本下载等 注:所有的苹果设备,在联网状态下,都会与苹果的服务器建立-长连接 远程通知的过程: 例如微信App:首先每个联网并打开微信的App都与微信服务器有一个长连接,当微信A用户向微信B用户发送一个消息时,微信A用户将消息发送到微信服务器,然后微信服务器判断微信B用户是否和微信服务器建立了长连接,如果有直接通过微信B用户和微信服务器建立的连接管道直接发送即可,这样微信B用户就能收到消息;如果微信B用户此时没有打开微信App,那么微信服务器就将消息发送给苹果服务器,苹果服务器再讲消息发送到某台苹果设备上。苹果是怎么知道该发送给那台设备呢?用户A发送消息时需要将用户B的UDID和微信App的Bundle ID 附带在消息上一块发送给B用户,这些消息微信服务器又发送给苹果服务器,苹果服务器通过UDID就知道发送给那台设备了,然后通过Bundle ID就知道是哪个App发送的了。苹果根据UDID + Bundle ID 生成一个deviceToken, 这样每条微信消息中都加上deviceToken苹果服务器就能识别设备和App了。 图形说明 push1.png push2.png push3.png 实现步骤: 1. 创建真机调试证书并配置推送证书文件:apns_development.cer和描述文件 首先创建真机证书、AppIDs(要选择Push Notifications), AppIDs创建完后可以看到状态是Configurable,是黄色的圆点,此时还不能使用推送通知,还要继续配置一下,选择Edit–>Push Notifications—> Create Certificate(创建推送通知证书),当证书创建完成后,可以看到AppID中的状态就变成了绿色的圆点(可用状态) …

Swift – UserNotifications框架使用详解

一、UserNotifications 框架介绍 1,起源 过去我们通过 UILocalNotification 来实现本地消息的推送通知(Local Notification),或者利用 APNS 进行通知消息的远程推送(Remote Notification)。如果我们程序同时用到了本地通知和远程通知,会发现它们的 API 都被随意地放在了 UIApplication 或者 UIApplicationDelegate 中,开发时代码十分混乱。 到了 iOS10,苹果新增加了一个 UserNotifications.framework(用户通知框架),目的在于统一 Remote Notification(远程通知)和 Local Notification(本地通知)。过去那些杂乱的和通知相关的 API 都被统一,同时也新增了许多新功能。 2,新特性 UserNotifications 框架除了整合通知相关的 API,还增加了很多令人惊喜的特性,让我们实现许多过去没法实现的功能。 更加丰富的推送内容:现在可以设置推送的 title、subtitle、body 以及符合大小的图片、音频、视频等附件内容。 更好的通知管理:过去已发出的通知不能更新。现在可以对通知进行查看、更新、删除了(哪怕是已展示通知)。 更优雅的展示方式:可以设置应用在前台展示通知,自定义通知 UI。 3,使用流程 UserNotifications 框架的使用大概分为以下几个过程: 申请、注册通知:首先需要向用户请求通知权限,在取得权限后注册通知。 创建、发送通知:然后创建一个通知并发起推送。对于远程推送 APNS 而言,还需要注册 DeviceToken。 展示、处理通知:在接收到推送通知后可以根据 app 的运行情况决定是否展示通知,当然也可以通过一系列的回调接口对通知进行处理加工。 二、通知权限说明 1,申请权限 (1)iOS 10 统一了推送权限的申请。不管是本地推送,还是远程推送,只需要 UNUserNotificationCenter.current().requestAuthorization() 方法申请即可。(这里我们在 AppDelegate 中申请通知权限。当然写在其它地方也是可以的。) import UIKitimport UserNotifications @UIApplicationMainclass AppDelegate: UIResponder, UIApplicationDelegate { var window: UIWindow? func application(_ application: UIApplication, didFinishLaunchingWithOptionslaunchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {//请求通知权限UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) {(accepted, error) inif !accepted {print(“用户不允许消息通知。”)}} return true} func applicationWillResignActive(_ application: UIApplication) {} func applicationDidEnterBackground(_ application: UIApplication) {} func applicationWillEnterForeground(_ application: UIApplication) {} func applicationDidBecomeActive(_ application: UIApplication) {} func applicationWillTerminate(_ application: UIApplication) {}} (2)当第一次调用上面这个方法时,系统会弹出如下窗口询问用户是否授权。 (3)如果用户拒绝了这个请求,再次调用该方法也不会再进行弹窗,同时也就无法收到通知。这种情况如果想要应用能接收到通知的话,只能让用户自行前往系统的设置中手动为你的应用打开通知了。因此在合适的时候弹出请求窗,并预先进行说明是很重要的。 2,判断权限 (1)在有些情况下,我们可以对推送权限设置进行检查。比如在检测到用户把通知权限关闭的时候,弹出个提示框引导用户去系统设置中打开通知权限。    比如下面代码,用户如果点击了“设置”按钮,则会自动跳转到通知设置页面,方便用户设置。     UNUserNotificationCenter.current().getNotificationSettings {settings inswitch settings.authorizationStatus {case .authorized:returncase .notDetermined://请求授权UNUserNotificationCenter.current().requestAuthorization(options: [.alert, .sound, .badge]) …

Swift5 添加子控制器

在iOS5中,ViewController中新添加了下面几个方法: addChildViewController:是UIViewController的一个方法,iOS5之后加入的,使用这个方法可以达到addsubView一样的效果,而且好处多多。 addChildViewController的好处: API函数 使用方法 (1)添加 ; (2)移除子控制器 (3)可能遇到的问题: 如果在子Controller中,把自己从父Controller中移除,在ios6中没问题,在iOS7中,会崩溃 作者:ITCodeShare链接:https://www.jianshu.com/p/81ad7bc333bf来源:简书简书著作权归作者所有,任何形式的转载都请联系作者获得授权并注明出处。

越獄後Cydia出現「無法載入 Internet 連線已斷開」

最近少數使用Electra 越獄後,打開Cydia會出現「無法載入 Internet 連線已斷開」錯誤問題,如果還正替這問題困擾,本篇教學就要來告訴你解決方法。 1.透過修補deb包解決 請先下載「conditionalwifi3.deb」插件包 修補教學 ▼找一台電腦透過SSH連入設備(Windows教學、Mac教學),要特別注意port要改為「22」。 方法1.刪除三個plist文件 步驟1. 進入「/var/preferences」資料夾內 步驟2. 找到底下三個檔案刪除,刪除前可先備份一次,這三個檔案重開機會自動重新產生。 com.apple.networkextension.plist com.apple.networkextension.cache.plist com.apple.networkextension.necp.plist 步驟3. 最後在刪除三個檔案後,開啟 Cydia 就可正常連線,並加入「瘋先生軟體源」後,搜尋「cinditionalwifi3」插件安裝後就能完美改善此問題。 方法2.安裝插件修補 步驟 1. ▼連入設備後,請回到「/」根目錄底下,將conditionalwifi3.deb直接放入至根目錄位置底下,並點擊上方的「終端機」功能叫出終端機。 步驟 2. ▼ 此時會跳出想要開啟分開的shell期間視窗,點下「確定」繼續。 步驟 3. ▼ 將底下指令複製貼上在輸入命令框內,並按下「執行」即可安裝插件,此時控制台狀態會停留在Setting up com.youreop….狀態是屬於正常現象。 dpkg -i conditionalwifi3_1.0.0.deb 步驟 4. ▼ 最後要執行下方的SpringBoard指令,讓設備重新載入。 killall -9 SpringBoard 步驟 5. ▼ 再次打開Cydia看是不是就能正常使用了? 2.透過修補ipa解決 發現到似乎有些 iOS 10.3.x h3lix 越獄也會導致這種情況發生,而越獄後沒開啟 openssh通道,導致沒辦法連線,因此建議可以透過底下方法解決。 下載修補 ipa包 點我下載 CydiaNetworkingFix.ipa 解決方法 將設備先激活越獄 …

swift基础页面传值

1、页面属性传值 (一)、单纯代码跳转传值: SecondViewController: threeViewController: (二)、storyboard拉线跳转,页面参数传递: SecondViewController: threeViewController:与上面的相同。 2.通过userDefault存储数据:这个可以多页面间传值 3.协议传值: 反向传值为例:点击返回按钮返回到上一个页面并传递参数。 threeViewController: SecondViewController: 4.闭包(block)传值: 反向传值为例:点击返回按钮返回到上一个页面并传递参数。 threeViewController: SecondViewController: https://www.jianshu.com/p/2b0e3e1e8fa6