1、项目配置

1.1 导入SDK

1.1.1 CocoaPods导入

# platform :ios, '9.0'

target 'JGPush' do

use_frameworks!

pod 'JPush'

end

1.1.2 手动导入

在极光官网下载最新SDK,将SDK包解压,在Xcode中选择“Add files to 'Your project name'...”,将解压后的lib子文件夹(包含JPUSHService.h、jpush-ios-x.x.x.a、jcore-ios-x.x.x.a)添加到你的工程目录中。

添加Framework、CFNetwork.framework、CoreFoundation.framework、CoreTelephony.framework、SystemConfiguration.framework、CoreGraphics.framework、Foundation.framework、UIKit.framework、Security.framework、libz.tbd (Xcode7以下版本是libz.dylib)、AdSupport.framework (获取IDFA需要;如果不使用IDFA,请不要添加)、UserNotifications.framework (Xcode8及以上)、libresolv.tbd (JPush 2.2.0及以上版本需要, Xcode7以下版本是libresolv.dylib)(注意:

如果集成JPush 3.0.1及以上版本, 且同时集成极光其他SDK(如:JMessage 3.0.0及以上版本) 1. Cocoapods导入,建议都更新为线上最新版本,来避免Jcore版本不一致导致的冲突。 2. 手动导入,在工程中只需保留一个最新版本的jcore-ios-x.x.x.a静态库文件。)

1.2导入SDK所需要依赖的库,添加Framework

CFNetwork.framework

CoreFoundation.framework

CoreTelephony.framework

SystemConfiguration.framework

CoreGraphics.framework

Foundation.framework

UIKit.framework

Security.framework

Xcode 7需要的是libs.tbd; Xcode 7以下版本是libs.dylib

Adsupport.framework (获取IDFA需要;如果不使用IDFA,请不要添加)

UserNotifications.framework (Xcode8及以上)

libresolv.tbd (JPush 2.2.0及以上版本需要)

framework配置.png

1.3 其他配置

Build Settings:

如果你的工程需要支持小于7.0的iOS系统,请到Build Settings 关闭 bitCode 选项,否则将无法正常编译通过。设置 Search Paths 下的 User Header Search Paths 和 Library Search Paths,比如SDK文件夹(默认为lib)与工程文件在同一级目录下,则都设置为"$(SRCROOT)/{静态库所在文件夹名称}"即可。####Capabilities:

如使用Xcode8及以上环境开发,请开启Application Target的Capabilities->Push Notifications选项,如图:

开启推送服务.png

info.plist配置:

在项目的info.plist中添加一个Key:NSAppTransportSecurity,类型为字典类型。然后给它添加一个NSExceptionDomains,类型为字典类型;把需要的支持的域添加給NSExceptionDomains。其中jpush.cn作为Key,类型为字典类型。每个域下面需要设置2个属性:NSIncludesSubdomains、NSExceptionAllowsInsecureHTTPLoads。 两个属性均为Boolean类型,值分别为YES、YES。

info.png

2、工程代码部分

目前极光没有swift版本,因此需要建立一个桥接文件,在里面添加如下代码

#import "JPUSHService.h"

// iOS10注册APNs所需头文件

#ifdef NSFoundationVersionNumber_iOS_9_x_Max

#import

#endif

// 如果需要使用 idfa 功能所需要引入的头文件(可选)

//#import

Bridging.png

下面是真正的代码了

appdelegate 里的 didFinishLaunchingWithOptions 方法里(不要试图用我的appKey了,我这么谨慎的人当然放的假的了,自己去极光官网上自己的项目里拿appKey 了)

//推送代码

let entity = JPUSHRegisterEntity()

entity.types = 1 << 0 | 1 << 1 | 1 << 2

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

//需要IDFA 功能,定向投放广告功能

//let advertisingId = ASIdentifierManager.shared().advertisingIdentifier.uuidString

JPUSHService.setup(withOption: launchOptions, appKey: "7a84363c8be53oba2c8d1a72", channel: "App Store", apsForProduction: false, advertisingIdentifier: nil)

在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 is UNPushNotificationTrigger {

JPUSHService.handleRemoteNotification(userInfo)

}

// 需要执行这个方法,选择是否提醒用户,有Badge、Sound、Alert三种类型可以选择设置

completionHandler(Int(UNNotificationPresentationOptions.alert.rawValue))

}

@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 is UNPushNotificationTrigger {

JPUSHService.handleRemoteNotification(userInfo)

}

// 系统要求执行这个方法

completionHandler()

}

//点推送进来执行这个方法

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

JPUSHService.handleRemoteNotification(userInfo)

completionHandler(UIBackgroundFetchResult.newData)

}

//系统获取Token

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

JPUSHService.registerDeviceToken(deviceToken)

}

//获取token 失败

func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { //可选

print("did Fail To Register For Remote Notifications With Error: \(error)")

}

func jpushNotificationCenter(_ center: UNUserNotificationCenter!, openSettingsFor notification: UNNotification?) {

print("hello")

}

推送小红角标,程序从后台进入前台的时候我们要消除它

//后台进前台

func applicationDidEnterBackground(_ application: UIApplication) {

//销毁通知红点

UIApplication.shared.applicationIconBadgeNumber = 0

JPUSHService.setBadge(0)

UIApplication.shared.cancelAllLocalNotifications()

}

jpush推送格式 swift_swift 极光推送相关推荐

  1. Android端推送消息之极光推送

    推送方式 轮询 --实现方式: 周期性主动获取网络中的数据; --缺点: 费电, 费流量; SMS --实现方式: 服务器端向手机端发送短信, 手机监听短信广播, 将拦截的短信信息进行显示; --优点 ...

  2. 极光推送 android6.0,极光推送Unity-Android-API

    Android API 停止与恢复推送服务 清除通知 设置允许推送时间 设置通知静默时间 申请权限接口(用于 Android 6.0 及以上系统) 通知栏样式定制 设置保留最近通知条数 本地通知 获取 ...

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

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

  4. jpush推送格式 swift_Swift中配置极光推送

    因为要适配iOS 10以下的系统,所以在配置极光推送时要做一些处理. 先上代码,等会儿慢慢说,或者有问题可以在下面留言.当然我写的也有不标准的地方,还请各位多多指教. 如下代码 import UIKi ...

  5. php集成极光推送,php推送例子(第三方极光推送)

    php是脚本语言所以在即时聊天中发挥不好,特别是用php当服务器向手机推送信息时,如果信息量有一点多,就会造成php服务器压力山大,不过我们也可用第三方极光推送 我们只需要在极光网站上申请,然后就ap ...

  6. 极光推送java demo_极光推送- 3 分钟 Demo - 极光文档

    3 分钟快速使用 JPush Android Demo 本文目的在于,指导新接触极光推送的开发者,在短短几分钟时间内把极光推送跑起来: 安装 Demo 客户端到手机 在 Portal 上推送通知 客户 ...

  7. iOS推送(利用极光推送)

    本文主要是基于极光推送的SDK封装的一个快速集成极光推送的类的封装(不喜勿喷) (1)首先说一下推送的一些原理: Push的原理: Push 的工作机制可以简单的概括为下图 图中,Provider是指 ...

  8. 推送原理解析 极光推送使用详解

    本文转自这里 ,在此向大佬致敬 推送技术产生场景: 服务器端主动发出:通常情况下,客户端与服务器交互都是客户端主动的,服务器一般不能主动与客户端进行数据交互,因为服务器端无法得知客户端的IP地址和状态 ...

  9. Android华为推送踩坑,极光推送集成华为遇到的坑?

    一.前言: 首先极光推送对各个厂商通道对接是没有在开发者平台提供文档的,需要申请VIP资格后,极光才会提供对应对接文档. 1.极光普通集成 1.步骤1 图片.png 2.步骤2 图片.png 3.步骤 ...

最新文章

  1. 适用于AMD ROC GPU的Numba概述
  2. 面试技巧——保持一颗乐观的心态
  3. pyecharts开篇(python可视化神器)
  4. Java工程师学习步骤
  5. 为什么重写equals时必须重写hashCode方法?
  6. Tensorflow Estimator之LinearRegressor
  7. “C# 未在本地计算机上注册microsoft.Jet.OLEDB.12.0”的解决方案
  8. 数据库grant 授权
  9. CS106 错误拒绝访问
  10. 台式计算机提示内存不足怎么办,台式电脑提示内存不足怎么回事
  11. 数学建模优化模型简单例题_数学建模例题.doc
  12. dwz jui 修改html元素,js框架 dwz jui 的日历组件 添加自定义事件
  13. 线上问题处理1---CPU飙高问题定位
  14. Java游戏编程不完全详解-2
  15. CRC16_CCITT/True的Java计算实现
  16. android jsp界面设计,Android 4.0设计规范-UI博客精选
  17. as,which引导的非限定性定语从句
  18. Unity HDRP Volume框架 — Lighting(光照)
  19. python制作浏览器 脚本之家_基于Python打造账号共享浏览器功能
  20. 电脑上有哪些好用的视频剪辑软件

热门文章

  1. 【格式化文档】ISO 27001控制措施+ISO27002实施指南 【下】
  2. Bypass WAF常规绕过思路
  3. 招行信用卡笔试题:卡中心美食家
  4. 【电子通识】芯片资料(数据手册/规格书)查询常用网站和方法
  5. 远程桌面无法连接–验证证书过期或无效的一个有效解决办法
  6. KISSsoft 2022 SP3
  7. 三个人拍顺序c语言,最简单的c程拍序设计.ppt
  8. cocos2dx+KinectV2 体感游戏之微信打飞机
  9. 强烈推荐iOS开发取色器
  10. Veritas Symantec backup exec 16授权slf文件