因为要适配iOS 10以下的系统,所以在配置极光推送时要做一些处理。

先上代码,等会儿慢慢说,或者有问题可以在下面留言。当然我写的也有不标准的地方,还请各位多多指教。

如下代码

import UIKit

//iOS 系统版本号判断

let iOS_Version:Float = Float.init(UIDevice.current.systemVersion)!

let iOS10 = (iOS_Version >= 10.0)

let iOS8 = (iOS_Version >= 8.0)

@UIApplicationMain

class AppDelegate: UIResponder, UIApplicationDelegate{

var window: UIWindow?

let testValue = true

private let PushKey = "xxx"

private let channel = "App Store"

private let isProduction = false

func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {

// Override point for customization after application launch.

self.window = UIWindow.init(frame: UIScreen.main.bounds)

self.window?.backgroundColor = UIColor.white

self.window?.makeKeyAndVisible()

self.registerForAPNs(launchOptions)

self.rootVCAndLoginVCSettings()

return true

}

func rootVCAndLoginVCSettings() {

let loginViewController = LoginViewController()

let rootViewController = RootViewController()

let navigationController = UINavigationController()

navigationController.pushViewController(rootViewController, animated: true)

self.window?.rootViewController = self.testValue ? navigationController:loginViewController

}

//MARK:配置极光推送

func registerForAPNs(_ launchOptions: [UIApplicationLaunchOptionsKey: Any]?) {

//适配系统版本

if #available(iOS 10.0, *) {

let entity = JPUSHRegisterEntity.init()

entity.types = Int(Double(JPAuthorizationOptions.alert.rawValue) + TimeInterval(JPAuthorizationOptions.badge.rawValue) + Double(JPAuthorizationOptions.sound.rawValue));

JPUSHService.register(forRemoteNotificationConfig: entity, delegate: self as JPUSHRegisterDelegate)

}else if #available(iOS 8.0, *){

JPUSHService.register(forRemoteNotificationTypes: UInt(Double(UIUserNotificationType.alert.rawValue) + TimeInterval(UIUserNotificationType.badge.rawValue) + Double(UIUserNotificationType.sound.rawValue)),

categories: nil)

}else{

let type = UIRemoteNotificationType.badge.rawValue |

UIRemoteNotificationType.sound.rawValue |

UIRemoteNotificationType.alert.rawValue

JPUSHService.register(forRemoteNotificationTypes: type, categories: nil)

}

JPUSHService.setup(withOption: launchOptions,

appKey: PushKey,

channel: channel,

apsForProduction: isProduction)

}

public func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {

JPUSHService.registerDeviceToken(deviceToken)

}

public func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) {

print("Error:\(error)")

}

public func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {

JPUSHService.handleRemoteNotification(userInfo)

completionHandler(UIBackgroundFetchResult.newData)

}

public func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any]) {

JPUSHService.handleRemoteNotification(userInfo)

}

}

extension AppDelegate : JPUSHRegisterDelegate{

@available(iOS 10.0, *)

func jpushNotificationCenter(_ center: UNUserNotificationCenter!, willPresent notification: UNNotification!, withCompletionHandler completionHandler: ((Int) -> Void)!) {

let userInfo = notification.request.content.userInfo

if (notification.request.trigger?.isKind(of: UNPushNotificationTrigger.self))!{

JPUSHService.handleRemoteNotification(userInfo)

}

completionHandler(Int(UNAuthorizationOptions.alert.rawValue))// 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以选择设置

}

@available(iOS 10.0, *)

func jpushNotificationCenter(_ center: UNUserNotificationCenter!, didReceive response: UNNotificationResponse!, withCompletionHandler completionHandler: (() -> Void)!) {

let userInfo = response.notification.request.content.userInfo

if (response.notification.request.trigger?.isKind(of: UNPushNotificationTrigger.self))!{

JPUSHService.handleRemoteNotification(userInfo)

}

completionHandler()

}

}

在上面的代码中,替换AppKey之后,就能直接使用了。

我们不能直接采用class AppDelegate: UIResponder, UIApplicationDelegate,JPUSHRegisterDelegate{的方式设置极光推送的代理,因为里面的代理方法是基于iOS 10 SDK的,直接导入,在在低版本SDK中就会编译不通过。所以可以稍微做一下处理,采用上面代码中的方式,对AppDelegate进行扩展,这样就解决了问题。

jpush推送格式 swift_Swift中配置极光推送相关推荐

  1. Android使用XPush配置极光推送

    Android使用XPush配置极光推送 Android使用XPush配置极光推送 导入依赖 AndroidManifest.xml 创建自定义消息接收器CustomPushReceiver--对应A ...

  2. jpush推送格式 swift_SWIFT集成极光JPUSH推送

    今天记录一下用swift集成极光推送 一.首先到极光推送的官网下载iOS对应的SDK包  SDK下载地址,地址自己搜索 二.第二步在极光的官网创建账号配置对应的应用信息,推送证书的这些就不介绍了很基本 ...

  3. Java中集成极光推送实现给Android提送消息通知(附代码下载)

    场景 Android中集成极光推送实现推送消息通知与根据别名指定推送附示例代码下载: https://blog.csdn.net/BADAO_LIUMANG_QIZHI/article/details ...

  4. Ionic项目中使用极光推送

    附上我的真言(尽信书不如无书),别人的始终是别人的不一定适合你,你只有走出自己的路,才能达到武道巅峰( bb一下) ,你百度ioni极光推送会出现一大群,但是你按照他的来,一定会出现这样那样的bug, ...

  5. flutter应用开发中集成极光推送(flutter极光推送第一篇)

    题记 -- 执剑天涯,从你的点滴积累开始,所及之处,必精益求精,即是折腾每一天. 重要消息 精通点的可以查看这里 精述 Flutter 从入门实践到开发一个APP之UI基础篇 视频 flutter从入 ...

  6. php极光推送教程,laravel框架使用极光推送消息操作示例

    本文实例讲述了laravel框架使用极光推送消息.分享给大家供大家参考,具体如下: 最近需要使用极光推送往客户端推消息,所以这里记录下使用过程. 极光推送的服务端文档: https://docs.ji ...

  7. android极光推送原理,【揭秘】极光推送ios、Android消息推送达率的原理

    初接触极光推送的使用者,为了衡量消息推送的质量.经常会纠结到消息的"送达率"这个概念.那么究竟什么是消息送达率呢?或者如何正确理解消息的送达情况呢? 基本概念 先来看与消息送达相关 ...

  8. 在ionic/cordova中使用极光推送插件(jpush)

    Stpe1:创建一个项目(此处使用的是tab类型的项目,创建方式可参照我前一篇如何离线创建Ionic1项目) Stpe2:修改项目信息 打开[config.xml]修改下图内容: Stpe3:创建极光 ...

  9. 极光推送:java后台向APP推送消息(android,ios极光推送消息)

    Maven添加依赖 <!--极光推送--><dependency><groupId>cn.jpush.api</groupId><artifact ...

最新文章

  1. Effective_STL 学习笔记(二十八) 了解如何通过 reverse_iterator 的 base 得到 iterator...
  2. timestamp 数据类型
  3. 本月 上月 php,显示本月,上月,今天,今年以及各时间起点与
  4. ElementUI的el-form怎样格式化布局
  5. WinForm加载外部类库项目的集成开发模式
  6. I had no sooner finished eating than went to toilet.
  7. Windows系统下安装分布式事务组件Seata
  8. WCF 部署在IIS上
  9. 一个小技巧让你轻松处理Selenium处理滚动条和元素聚焦
  10. HiveQL学习笔记(五):Hive练习题
  11. cdr添加节点快捷键_coreldraw合并快捷键是什么,CDR合并快捷键是什么?
  12. NAS(Network Attached Storage)协议
  13. 【Linux系统开发】Study210开发板刷安卓系统
  14. 怎么录制自己手机上的视频
  15. 如何在数位板上练习线条跟线稿?
  16. 爱彼迎超赞房东分享打造五星好评民宿的七个运营秘诀
  17. 电脑无线上有个红叉,解决方法
  18. uni-app 不用onShow返回上一页刷新数据
  19. 特别手持弹幕 技术支持 app's support
  20. 操作简单,易上手的三款在线ps处理工具

热门文章

  1. Spring 基于注解(annotation)的配置之@Required注解
  2. Azure上基于HTTP trigger的Lambda Function
  3. 用JavaScript实现的设计模式之commandline(命令行)模式
  4. SAP Kyma发布到SAP Marketing Cloud的事件
  5. 如何在SAP Cloud Platform上进行第一个integration flow开发
  6. bInitiallyDisabled实现原理
  7. WebIDE sandbox
  8. SAP OData batch request的并行处理实现原理
  9. SAP CRM WebClient UI context node属性展开的执行逻辑
  10. setModel 的核心逻辑