您的位置:首页 > 移动开发 > Swift

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) {

}

}


Swift - JPush极光推送的使用1(配置, 推送测试样例)

一,APNs介绍

(1)APNsApple 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.hjpush-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
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: