Swift - JPush极光推送的使用

来源:互联网 发布:js控制div宽度 编辑:程序博客网 时间:2024/05/22 06:51

@UIApplicationMain

class AppDelegate:UIResponder, UIApplicationDelegate {

    

    var window:UIWindow?

    

    func application(application:UIApplication, didFinishLaunchingWithOptions launchOptions: [NSObject:AnyObject]?) -> Bool {

      

//launchOptions: 给注册推送时用 -为注册推送想在主界面加载出来才询问是否授权


        setupJPush(launchOptions)// 配置JPUSH

        

        returntrue

    }

/////////////////////////////////////////////////////////////////////////////////////////


 /**

     配置极光推送

     */

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

    }

    

    /**


 /**

     发送通知

     */

    @objcprivate func sendNotification(launchOptions: [NSObject:AnyObject]?) {

        iflet options = launchOptions {

            let userInfo = options[UIApplicationLaunchOptionsRemoteNotificationKey]as? [NSObject :AnyObject]

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

        } elseif 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)推送客户端支持 AndroidiOS 两个平台。(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 证书设置指南 
原文:Swift - JPush极光推送的使用1(配置、简单的推送测试样例)
 
创建成功后自动生成 AppKey 用以标识该应用。
原文:Swift - JPush极光推送的使用1(配置、简单的推送测试样例)

2,导入API开发包到应用程序项目
将 iOS SDK 包解压。下载地址:http://docs.jiguang.cn/resources/
然后把解压后的 lib 子文件夹(包含 JPUSHService.hjpush-ios-x.x.x.a)添加到你的工程目录中。
原文:Swift - JPush极光推送的使用1(配置、简单的推送测试样例)


3,创建并配置个桥接头文件将JPUSHService.h引入进来
1
#import "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,请不要添加)
原文:Swift - JPush极光推送的使用1(配置、简单的推送测试样例)


5,允许XCode7支持Http传输方法

如果用的是 Xcode7 时,需要在App项目 info.plist 中添加如下配置以支持 http 传输。
1
2
3
4
5
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

6,开启Remote notifications
需要在 Xcode 中修改应用的 Capabilities 开启 Remote notifications
原文:Swift - JPush极光推送的使用1(配置、简单的推送测试样例)

7,最后在AppDelegate.swift中添加如下代码,启动JPush的SDK服务。
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
import UIKit
 
@UIApplicationMain
class AppDelegateUIResponderUIApplicationDelegate {
     
    var window: UIWindow?
     
    func application(application: UIApplication,
                     didFinishLaunchingWithOptions launchOptions: [NSObjectAnyObject]?)
                    -> Bool {
        //通知类型(这里将声音、消息、提醒角标都给加上)
        let userSettings = UIUserNotificationSettings(forTypes: [.Badge, .Sound, .Alert],
                                                      categories: nil)
        if ((UIDevice.currentDevice().systemVersion as NSString).floatValue >= 8.0) {
            //可以添加自定义categories
            JPUSHService.registerForRemoteNotificationTypes(userSettings.types.rawValue,
                                                            categories: nil)
        }
        else {
            //categories 必须为nil
            JPUSHService.registerForRemoteNotificationTypes(userSettings.types.rawValue,
                                                            categories: nil)
        }
         
        // 启动JPushSDK
        JPUSHService.setupWithOption(nil, appKey: "7b528361738e3709175798fd",
                                     channel: "Publish Channel", apsForProduction: false)
         
        return true
    }
     
    func application(application: UIApplication,
                     didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) {
        //注册 DeviceToken
        JPUSHService.registerDeviceToken(deviceToken)
    }
     
    func application(application: UIApplication,
            didReceiveRemoteNotification userInfo: [NSObject AnyObject],
            fetchCompletionHandler completionHandler: (UIBackgroundFetchResult) -> Void) {
        //增加IOS 7的支持
        JPUSHService.handleRemoteNotification(userInfo)
        completionHandler(UIBackgroundFetchResult.NewData)
    }
     
    func application(application: UIApplication,
                     didFailToRegisterForRemoteNotificationsWithError error: NSError) {
        //可选
        NSLog("did Fail To Register For Remote Notifications With Error: \(error)")
    }
     
    //..........
}
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,第一次运行程序会提示我们是否允许推送通知,选择“好”即可。
原文:Swift - JPush极光推送的使用1(配置、简单的推送测试样例)
控制台输出消息如下:
原文:Swift - JPush极光推送的使用1(配置、简单的推送测试样例)

3,将程序退出。接着我们到极光推送网站上的控制台模块来进行消息发送的测试。
在“推送”->“发送通知”页面中,输入需要推送的消息及相关配置(这里我们选择广播,即给所有人都发生推送)。点击“立即发送”。
原文:Swift - JPush极光推送的使用1(配置、简单的推送测试样例)

4,通知发送后,虽然我们的应用之前已经关闭了,但我们可以看到手机上还是会成功显示接收到的通知消息。
原文:Swift - JPush极光推送的使用1(配置、简单的推送测试样例)


原文出自:www.hangge.com  转载请保留原文链接:http://www.hangge.com/blog/cache/detail_1268.html
0 0
原创粉丝点击