??現(xiàn)在很多程序都開始使用Swift開發(fā)了,但是第三方庫(kù)大多數(shù)都是用OC寫的,所以我們要使用Swift和OC混編。今天的內(nèi)容主要講Swift3.0集成極光推送。
1.準(zhǔn)備工作
集成指南,極光上說(shuō)的都很清楚,把創(chuàng)建應(yīng)用和配置工程實(shí)現(xiàn)。SDK下載地址。在橋接頭文件中添加
#import "JPUSHService.h"
// iOS10注冊(cè)APNs所需頭文件
#ifdef NSFoundationVersionNumber_iOS_9_x_Max
#import <UserNotifications/UserNotifications.h>
#endif
2.Swift3.0集成
(1)AppDelegate.swift中添加代理
import UIKit
@UIApplicationMain
class AppDelegate: UIResponder, UIApplicationDelegate,JPUSHRegisterDelegate {
}
(2)注冊(cè)推送及處理應(yīng)用未打開時(shí)收到推送消息
func application(_ application: UIApplication, didFinishLaunchingWithOptions launchOptions: [UIApplicationLaunchOptionsKey: Any]?) -> Bool {
// 通知注冊(cè)實(shí)體類
let entity = JPUSHRegisterEntity();
entity.types = Int(JPAuthorizationOptions.alert.rawValue) | Int(JPAuthorizationOptions.sound.rawValue) | Int(JPAuthorizationOptions.badge.rawValue);
JPUSHService.register(forRemoteNotificationConfig: entity, delegate: self);
// 注冊(cè)極光推送
JPUSHService.setup(withOption: launchOptions, appKey: "845b93e08c7fa192df019c07", channel:"Publish channel" , apsForProduction: false);
// 獲取推送消息
let remote = launchOptions?[UIApplicationLaunchOptionsKey.remoteNotification] as? Dictionary<String,Any>;
// 如果remote不為空,就代表應(yīng)用在未打開的時(shí)候收到了推送消息
if remote != nil {
// 收到推送消息實(shí)現(xiàn)的方法
self.perform(#selector(receivePush), with: remote, afterDelay: 1.0);
}
return true;
}
(3)實(shí)現(xiàn)代理方法
// MARK: -JPUSHRegisterDelegate
// iOS 10.x 需要
@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);
}
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();
// 應(yīng)用打開的時(shí)候收到推送消息
NotificationCenter.default.post(name: NSNotification.Name(rawValue: NotificationName_ReceivePush), object: NotificationObject_Sueecess, userInfo: userInfo)
}
func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
JPUSHService.handleRemoteNotification(userInfo);
completionHandler(UIBackgroundFetchResult.newData);
}
// 接收到推送實(shí)現(xiàn)的方法
func receivePush(_ userInfo : Dictionary<String,Any>) {
// 角標(biāo)變0
UIApplication.shared.applicationIconBadgeNumber = 0;
// 剩下的根據(jù)需要自定義
self.tabBarVC?.selectedIndex = 0;
NotificationCenter.default.post(name: NSNotification.Name(rawValue: NotificationName_ReceivePush), object: NotificationObject_Sueecess, userInfo: userInfo)
}
}
我看網(wǎng)上沒(méi)有人寫用Swift3.0集成極光推送,自己集成的時(shí)候遇到了很多坑,所以分享出來(lái),希望大家可以少浪費(fèi)點(diǎn)大腦細(xì)胞?。