Swift - JPush极光推送的使用
2016-10-24 13:47
387 查看
@UIApplicationMain
class AppDelegate:
UIResponder, UIApplicationDelegate {
var window:
UIWindow?
func application(application:
UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:
AnyObject]?) -> Bool {
//launchOptions: 给注册推送时用 -
因为注册推送想在主界面加载出来才询问是否授权
setupJPush(launchOptions)
// 配置JPUSH
return
true
}
/////////////////////////////////////////////////////////////////////////////////////////
/**
配置极光推送
*/
private
func setupJPush(launchOptions: [NSObject:
AnyObject]?) {
JPUSHService.registerForRemoteNotificationTypes(UIUserNotificationType.Badge.rawValue
| UIUserNotificationType.Alert.rawValue |
UIUserNotificationType.Sound.rawValue, categories:
nil)
JPUSHService.setupWithOption(launchOptions, appKey:
JPUSH_APP_KEY, channel:
JPUSH_CHANNEL, apsForProduction:
JPUSH_IS_PRODUCTION)
JPUSHService.crashLogON()
// 延迟发送通知(app被杀死进程后收到通知,然后通过点击通知打开app在这个方法中发送通知)
performSelector(#selector(sendNotification(_:)),
withObject: launchOptions, afterDelay: 1.5)
}
/**
/**
发送通知
*/
@objc
private func sendNotification(launchOptions: [NSObject:
AnyObject]?) {
if
let options = launchOptions {
let userInfo = options[UIApplicationLaunchOptionsRemoteNotificationKey]
as? [NSObject :
AnyObject]
if
let info = userInfo {
NSNotificationCenter.defaultCenter().postNotificationName("didReceiveRemoteNotificationOfJPush",
object: info)
}
}
}
/**
传递deviceToken注册远程通知
*/
func application(application:
UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken:
NSData) {
JPUSHService.registerDeviceToken(deviceToken)
}
/**
注册远程通知失败
*/
func application(application:
UIApplication, didFailToRegisterForRemoteNotificationsWithError error:
NSError) {
print("did Fail To Register For Remote Notifications With Error:
\(error)")
}
/**
iOS7后接收到远程通知
*/
func application(application:
UIApplication, didReceiveRemoteNotification userInfo: [NSObject :
AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) ->
Void) {
JPUSHService.handleRemoteNotification(userInfo)
completionHandler(UIBackgroundFetchResult.NewData)
if application.applicationState == .Background || application.applicationState
== .Inactive {
application.applicationIconBadgeNumber =
0
NSNotificationCenter.defaultCenter().postNotificationName("didReceiveRemoteNotificationOfJPush",
object: userInfo)
} else
if application.applicationState == .Active {
application.applicationIconBadgeNumber =
0
let message = userInfo["aps"]!["alert"]
as! String
let alertC =
UIAlertController(title:
"收到新的消息", message: message, preferredStyle:
UIAlertControllerStyle.Alert)
let confrimAction =
UIAlertAction(title:
"查看", style:
UIAlertActionStyle.Destructive, handler: { (action)
in
NSNotificationCenter.defaultCenter().postNotificationName("didReceiveRemoteNotificationOfJPush",
object: userInfo)
})
let cancelAction =
UIAlertAction(title:
"忽略", style:
UIAlertActionStyle.Default, handler: { (action)
in
})
alertC.addAction(confrimAction)
alertC.addAction(cancelAction)
UIApplication.sharedApplication().keyWindow?.rootViewController?.presentViewController(alertC,
animated: true, completion:
nil)
}
}
/**
接收到本地通知
*/
func application(application:
UIApplication, didReceiveLocalNotification notification:
UILocalNotification) {
JPUSHService.showLocalNotificationAtFront(notification, identifierKey:
nil)
}
func applicationWillResignActive(application:
UIApplication) {
}
func applicationDidEnterBackground(application:
UIApplication) {
JFNewsDALManager.shareManager.clearCacheData()
}
func applicationWillEnterForeground(application:
UIApplication) {
}
func applicationDidBecomeActive(application:
UIApplication) {
}
func applicationWillTerminate(application:
UIApplication) {
}
}
一,APNs介绍
(1)APNs 是 Apple Push Notification service 的简称,中文翻译为:苹果推送通知服务。
(2)APNs 允许设备与苹果的推送通知服务器保持常连接状态。当你想发送一个推送通知给某个用户的iPhone上的应用程序时,你可以使用 APNs 发送一个推送消息给目标设备上已安装的某个应用程序。
(3)APNs 也是 iOS 系统里唯一的推送方式。
二, 极光推送(JPush)介绍
(1)极光推送是一个端到端的推送服务,使得服务器端消息能够及时地推送到终端用户手机上。
(2)推送客户端支持 Android, iOS 两个平台。(iOS下使用APNs推送)
(3)为 JPush Server 上报 Device Token,免除开发者管理 Device Token 的麻烦。
(4)前台运行时,可接收由 JPush 下发的(透传的)自定义消息。
(5)灵活管理接收用户:Tag(标签分组)、Alias(用户别名)、RegistrationID(设备注册ID)
三,使用极光推送的优点
虽然我们可以搭建自己应用服务器,将需要被推送的信息发给APNs。接着由APNs推送到指定的iOS设备上,然后再由设备通知到我们的应用程序,最后设备以通知或者声音的形式通知用户有新的消息。
但使用 JPush SDK 可以更快捷地为 iOS App 增加推送功能,减少集成 APNs 需要的工作量、开发复杂度,也让服务器端向 iOS 设备推送变得更加简单方便。
四,极光推送SDK集成步骤
1、在JPush Portal上创建应用
在 JPush 的管理 Portal 上创建应用并上传 APNs 证书。如果对 APNs 证书不太了解
请参考: iOS 证书设置指南
创建成功后自动生成 AppKey 用以标识该应用。
2,导入API开发包到应用程序项目
将 iOS SDK 包解压。下载地址:http://docs.jiguang.cn/resources/
然后把解压后的 lib 子文件夹(包含 JPUSHService.h、jpush-ios-x.x.x.a)添加到你的工程目录中。
3,创建并配置个桥接头文件将JPUSHService.h引入进来
4,添加必要的框架
(1)CFNetwork.framework
(2)CoreFoundation.framework
(3)CoreTelephony.framework
(4)SystemConfiguration.framework
(5)CoreGraphics.framework
(6)Foundation.framework
(7)UIKit.framework
(8)Security.framework
(9)libz.tbd
(10)Adsupport.framework (获取 IDFA 需要;如果不使用 IDFA,请不要添加)
5,允许XCode7支持Http传输方法
如果用的是 Xcode7 时,需要在App项目 info.plist 中添加如下配置以支持 http 传输。
6,开启Remote notifications
需要在 Xcode 中修改应用的 Capabilities 开启 Remote notifications
7,最后在AppDelegate.swift中添加如下代码,启动JPush的SDK服务。
JPUSHService.setupWithOption()方法的参数说明:
channel
指明应用程序包的下载渠道,为方便分渠道统计,具体值由你自行定义,如:App Store。
appKey
填写管理Portal上创建应用后自动生成的AppKey值。请确保应用内配置的 AppKey 与第1步在 Portal 上创建应用后生成的 AppKey 一致。
apsForProduction
1.3.1版本新增,用于标识当前应用所使用的APNs证书环境。
0 (默认值)表示采用的是开发证书,1 表示采用生产证书发布应用。
注:此字段的值要与Build Settings的Code Signing配置的证书环境一致。
五,推送测试
1,我们将上面配置好的应用编译发布到手机上(使用模拟器无法测试 JPush 推送)
2,第一次运行程序会提示我们是否允许推送通知,选择“好”即可。
控制台输出消息如下:
3,将程序退出。接着我们到极光推送网站上的控制台模块来进行消息发送的测试。
在“推送”->“发送通知”页面中,输入需要推送的消息及相关配置(这里我们选择广播,即给所有人都发生推送)。点击“立即发送”。
4,通知发送后,虽然我们的应用之前已经关闭了,但我们可以看到手机上还是会成功显示接收到的通知消息。
原文出自:www.hangge.com 转载请保留原文链接:http://www.hangge.com/blog/cache/detail_1268.html
class AppDelegate:
UIResponder, UIApplicationDelegate {
var window:
UIWindow?
func application(application:
UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:
AnyObject]?) -> Bool {
//launchOptions: 给注册推送时用 -
因为注册推送想在主界面加载出来才询问是否授权
setupJPush(launchOptions)
// 配置JPUSH
return
true
}
/////////////////////////////////////////////////////////////////////////////////////////
/**
配置极光推送
*/
private
func setupJPush(launchOptions: [NSObject:
AnyObject]?) {
JPUSHService.registerForRemoteNotificationTypes(UIUserNotificationType.Badge.rawValue
| UIUserNotificationType.Alert.rawValue |
UIUserNotificationType.Sound.rawValue, categories:
nil)
JPUSHService.setupWithOption(launchOptions, appKey:
JPUSH_APP_KEY, channel:
JPUSH_CHANNEL, apsForProduction:
JPUSH_IS_PRODUCTION)
JPUSHService.crashLogON()
// 延迟发送通知(app被杀死进程后收到通知,然后通过点击通知打开app在这个方法中发送通知)
performSelector(#selector(sendNotification(_:)),
withObject: launchOptions, afterDelay: 1.5)
}
/**
/**
发送通知
*/
@objc
private func sendNotification(launchOptions: [NSObject:
AnyObject]?) {
if
let options = launchOptions {
let userInfo = options[UIApplicationLaunchOptionsRemoteNotificationKey]
as? [NSObject :
AnyObject]
if
let info = userInfo {
NSNotificationCenter.defaultCenter().postNotificationName("didReceiveRemoteNotificationOfJPush",
object: info)
}
}
}
/**
传递deviceToken注册远程通知
*/
func application(application:
UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken:
NSData) {
JPUSHService.registerDeviceToken(deviceToken)
}
/**
注册远程通知失败
*/
func application(application:
UIApplication, didFailToRegisterForRemoteNotificationsWithError error:
NSError) {
print("did Fail To Register For Remote Notifications With Error:
\(error)")
}
/**
iOS7后接收到远程通知
*/
func application(application:
UIApplication, didReceiveRemoteNotification userInfo: [NSObject :
AnyObject], fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) ->
Void) {
JPUSHService.handleRemoteNotification(userInfo)
completionHandler(UIBackgroundFetchResult.NewData)
if application.applicationState == .Background || application.applicationState
== .Inactive {
application.applicationIconBadgeNumber =
0
NSNotificationCenter.defaultCenter().postNotificationName("didReceiveRemoteNotificationOfJPush",
object: userInfo)
} else
if application.applicationState == .Active {
application.applicationIconBadgeNumber =
0
let message = userInfo["aps"]!["alert"]
as! String
let alertC =
UIAlertController(title:
"收到新的消息", message: message, preferredStyle:
UIAlertControllerStyle.Alert)
let confrimAction =
UIAlertAction(title:
"查看", style:
UIAlertActionStyle.Destructive, handler: { (action)
in
NSNotificationCenter.defaultCenter().postNotificationName("didReceiveRemoteNotificationOfJPush",
object: userInfo)
})
let cancelAction =
UIAlertAction(title:
"忽略", style:
UIAlertActionStyle.Default, handler: { (action)
in
})
alertC.addAction(confrimAction)
alertC.addAction(cancelAction)
UIApplication.sharedApplication().keyWindow?.rootViewController?.presentViewController(alertC,
animated: true, completion:
nil)
}
}
/**
接收到本地通知
*/
func application(application:
UIApplication, didReceiveLocalNotification notification:
UILocalNotification) {
JPUSHService.showLocalNotificationAtFront(notification, identifierKey:
nil)
}
func applicationWillResignActive(application:
UIApplication) {
}
func applicationDidEnterBackground(application:
UIApplication) {
JFNewsDALManager.shareManager.clearCacheData()
}
func applicationWillEnterForeground(application:
UIApplication) {
}
func applicationDidBecomeActive(application:
UIApplication) {
}
func applicationWillTerminate(application:
UIApplication) {
}
}
Swift - JPush极光推送的使用1(配置, 推送测试样例)
一,APNs介绍(1)APNs 是 Apple Push Notification service 的简称,中文翻译为:苹果推送通知服务。
(2)APNs 允许设备与苹果的推送通知服务器保持常连接状态。当你想发送一个推送通知给某个用户的iPhone上的应用程序时,你可以使用 APNs 发送一个推送消息给目标设备上已安装的某个应用程序。
(3)APNs 也是 iOS 系统里唯一的推送方式。
二, 极光推送(JPush)介绍
(1)极光推送是一个端到端的推送服务,使得服务器端消息能够及时地推送到终端用户手机上。
(2)推送客户端支持 Android, iOS 两个平台。(iOS下使用APNs推送)
(3)为 JPush Server 上报 Device Token,免除开发者管理 Device Token 的麻烦。
(4)前台运行时,可接收由 JPush 下发的(透传的)自定义消息。
(5)灵活管理接收用户:Tag(标签分组)、Alias(用户别名)、RegistrationID(设备注册ID)
三,使用极光推送的优点
虽然我们可以搭建自己应用服务器,将需要被推送的信息发给APNs。接着由APNs推送到指定的iOS设备上,然后再由设备通知到我们的应用程序,最后设备以通知或者声音的形式通知用户有新的消息。
但使用 JPush SDK 可以更快捷地为 iOS App 增加推送功能,减少集成 APNs 需要的工作量、开发复杂度,也让服务器端向 iOS 设备推送变得更加简单方便。
四,极光推送SDK集成步骤
1、在JPush Portal上创建应用
在 JPush 的管理 Portal 上创建应用并上传 APNs 证书。如果对 APNs 证书不太了解
请参考: iOS 证书设置指南
创建成功后自动生成 AppKey 用以标识该应用。
2,导入API开发包到应用程序项目
将 iOS SDK 包解压。下载地址:http://docs.jiguang.cn/resources/
然后把解压后的 lib 子文件夹(包含 JPUSHService.h、jpush-ios-x.x.x.a)添加到你的工程目录中。
3,创建并配置个桥接头文件将JPUSHService.h引入进来
(1)CFNetwork.framework
(2)CoreFoundation.framework
(3)CoreTelephony.framework
(4)SystemConfiguration.framework
(5)CoreGraphics.framework
(6)Foundation.framework
(7)UIKit.framework
(8)Security.framework
(9)libz.tbd
(10)Adsupport.framework (获取 IDFA 需要;如果不使用 IDFA,请不要添加)
5,允许XCode7支持Http传输方法
如果用的是 Xcode7 时,需要在App项目 info.plist 中添加如下配置以支持 http 传输。
需要在 Xcode 中修改应用的 Capabilities 开启 Remote notifications
7,最后在AppDelegate.swift中添加如下代码,启动JPush的SDK服务。
channel
指明应用程序包的下载渠道,为方便分渠道统计,具体值由你自行定义,如:App Store。
appKey
填写管理Portal上创建应用后自动生成的AppKey值。请确保应用内配置的 AppKey 与第1步在 Portal 上创建应用后生成的 AppKey 一致。
apsForProduction
1.3.1版本新增,用于标识当前应用所使用的APNs证书环境。
0 (默认值)表示采用的是开发证书,1 表示采用生产证书发布应用。
注:此字段的值要与Build Settings的Code Signing配置的证书环境一致。
五,推送测试
1,我们将上面配置好的应用编译发布到手机上(使用模拟器无法测试 JPush 推送)
2,第一次运行程序会提示我们是否允许推送通知,选择“好”即可。
控制台输出消息如下:
3,将程序退出。接着我们到极光推送网站上的控制台模块来进行消息发送的测试。
在“推送”->“发送通知”页面中,输入需要推送的消息及相关配置(这里我们选择广播,即给所有人都发生推送)。点击“立即发送”。
4,通知发送后,虽然我们的应用之前已经关闭了,但我们可以看到手机上还是会成功显示接收到的通知消息。
原文出自:www.hangge.com 转载请保留原文链接:http://www.hangge.com/blog/cache/detail_1268.html
相关文章推荐
- Swift - JPush极光推送的使用4(根据Tag标签,给同一类别用户发推送)
- Swift - JPush极光推送的使用3(根据Alias别名,给某个指定用户发推送)(转)
- Swift - JPush极光推送的使用(发送自定义消息/通知/别名/tag)
- Android JPush(极光推送)的使用教程
- Android JPush(极光推送)的使用教程
- php使用JPush极光推送ios android通知消息
- 极光推送 JPush 项目简单使用
- 极光推送JPush --- 简单使用
- ionic 之cordova 极光推送jpush和百度定位插件结合使用之定位失效问题解决办法
- Android JPush(极光推送)的使用教程
- 使用Jpush(极光推送)实现推送功能
- jpush极光推送平台的使用
- [原]Android Studio使用极光推送出现at cn.jpush.android.service.ServiceInterface.a(Unknown Source) 已解决
- Android JPush(极光推送)的使用教程
- Android JPush(极光推送)的使用教程
- android 高级之旅 (八) 极光推送 JPush 的基本使用
- 使用极光推送(www.jpush.cn)向安卓手机推送消息【服务端向客户端主送推送】C#语言
- Android JPush(极光推送)的使用教
- ios app 推送功能 JPush极光推送的使用
- 极光推送Jpush之RestAPI使用实例