当前位置: > > > Swift - JPush极光推送的使用1(配置、简单的推送测试样例)

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/jpush/resources/#ios-sdk
然后把解压后的 lib 子文件夹(包含 JPUSHService.hjpush-ios-x.x.x.a)添加到你的工程目录中。


3,创建并配置个桥接头文件将JPUSHService.h引入进来
#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,请不要添加)
(11)libresolv.tbd(JPush 2.2.0及以上版本需要)


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

如果用的是 Xcode7 或者更新的版本时,需要在App项目 info.plist 中添加如下配置以支持 http 传输。
<key>NSAppTransportSecurity</key>
<dict>
    <key>NSAllowsArbitraryLoads</key>
    <true/>
</dict>

6,开启Remote notifications
需要在 Xcode 中修改应用的 Capabilities 开启 Remote notifications

7,开启Push Notifications
如使用 Xcode8 及以上环境开发,还要开启 Capabilities 下的 Push Notifications 选项。

8,最后在AppDelegate.swift中添加如下代码,启动JPush的SDK服务。 (本文代码已升级至 Swift3
import UIKit

@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate {
    
    var window: UIWindow?
    
    func application(_ application: UIApplication,
                     didFinishLaunchingWithOptions
                        launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
      
        //通知类型(这里将声音、消息、提醒角标都给加上)
        let userSettings = UIUserNotificationSettings(types: [.alert, .badge, .sound],
                                                      categories: nil)
        if ((UIDevice.current.systemVersion as NSString).floatValue >= 8.0) {
            //可以添加自定义categories
            JPUSHService.register(forRemoteNotificationTypes: userSettings.types.rawValue,
                                                            categories: nil)
        }
        else {
            //categories 必须为nil
            JPUSHService.register(forRemoteNotificationTypes: userSettings.types.rawValue,
                                                            categories: nil)
        }
        
        // 启动JPushSDK
        JPUSHService.setup(withOption: nil, appKey: "7b528331738ec719195798fd",
                                     channel: "Publish Channel", apsForProduction: false)

        return true
    }
 
    
    func application(_ application: UIApplication,
                     didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        //注册 DeviceToken
        JPUSHService.registerDeviceToken(deviceToken)
    }
    
    func application(_ application: UIApplication,
                     didReceiveRemoteNotification userInfo: [AnyHashable : Any],
                     fetchCompletionHandler
                        completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        //增加IOS 7的支持
        JPUSHService.handleRemoteNotification(userInfo)
        completionHandler(UIBackgroundFetchResult.newData)
    }
    
    func application(_ application: UIApplication,
                     didFailToRegisterForRemoteNotificationsWithError error: Error) {
        //可选
        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,第一次运行程序会提示我们是否允许推送通知,选择“好”即可。
控制台输出消息如下:

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

4,通知发送后,虽然我们的应用之前已经关闭了,但我们可以看到手机上还是会成功显示接收到的通知消息。

评论9
  • 9楼
    2017-11-09 11:07
    兰德耍

    站长。如何判断用户关掉了推送服务了。然后我才能提示用户推送服务已经关掉了。求指点 谢谢🙏

  • 8楼
    2017-09-23 15:54
    LB

    航哥,又来麻烦你啦!请问项目里面“jpush-ios-2.2.0.a”这个文件引不进去啊,该怎么搞?开始搞进去过,后面不知道怎么又搞不进了?求教,谢谢啦!

    站长回复

    估计项目配置被你弄坏了,建议重新再建个项目。

  • 7楼
    2017-09-07 14:55
    LB

    怎么创建桥头文件啊?大神,小白求教?网上找的方法不对啊!

    站长回复

    简单说就是新建一个.h文件,然后配置下就行了。可以参考我的另一篇文章:Swift调用Objective-C编写的代码(颜色选择器KKColorListPicker调用)

  • 6楼
    2016-11-14 12:34
    大呢

    请问航哥,点击推送过来的消息,如何跳转到消息界面,消息如何处理

    站长回复

    这个我另一篇文章中有写到,你可以看下:Swift - JPush极光推送的使用5(发送通知时附带自定义参数)

  • 5楼
    2016-11-01 12:08
    幼儿园

    已升级至 Swift3,航哥太厉害了!!

    站长回复

    谢谢夸奖。现在Swift升级后,我会把以前的文章代码都更新成Swift3的。由于之前写的文章很多,要全部更新完毕没那么快就是了。

  • 4楼
    2016-07-25 22:01
    macfai

    太赞了,真详细,佩服站长,持续关注中

    站长回复

    谢谢你的支持,我会一直更新下去的。

  • 3楼
    2016-07-20 09:43
    donald

    写的很详细,支持站长

    站长回复

    谢谢你的支持,欢迎常来看看。

  • 2楼
    2016-07-14 12:25
    苦茶。

    航哥,JPUSHService.setupWithOption(nil, appKey: "7b3dc455162cc19460d3804a", channel: "Publish Channel", apsForProduction: false)调试的时候 apsForProduction字段设置为false,是不是以后要上架的时候,这个值要设置为true呢

    站长回复

    是这样的,正式发布时把这个设成true。

  • 1楼
    2016-07-11 09:40
    半夏

    早就想要了,超赞!!

    站长回复

    谢谢支持!JPush大概会写个系列,你可以关注下。