swift 極光推送

1、項目配置

1.1 導入SDK

1.1.1 CocoaPods導入

# platform :ios, '9.0'
target 'JGPush' do
  use_frameworks!
  pod 'JPush'
end

1.1.2 手動導入

在極光官網(wǎng)下載最新SDK,將SDK包解壓,在Xcode中選擇“Add files to 'Your project name'...”,將解壓后的lib子文件夾(包含JPUSHService.h、jpush-ios-x.x.x.a、jcore-ios-x.x.x.a)添加到你的工程目錄中。

添加Framework、CFNetwork.framework、CoreFoundation.framework、CoreTelephony.framework、SystemConfiguration.framework、CoreGraphics.framework、Foundation.framework、UIKit.framework、Security.framework、libz.tbd (Xcode7以下版本是libz.dylib)、AdSupport.framework (獲取IDFA需要;如果不使用IDFA,請不要添加)、UserNotifications.framework (Xcode8及以上)、libresolv.tbd (JPush 2.2.0及以上版本需要, Xcode7以下版本是libresolv.dylib)(注意:

如果集成JPush 3.0.1及以上版本, 且同時集成極光其他SDK(如:JMessage 3.0.0及以上版本) 1. Cocoapods導入,建議都更新為線上最新版本,來避免Jcore版本不一致導致的沖突。 2. 手動導入,在工程中只需保留一個最新版本的jcore-ios-x.x.x.a靜態(tài)庫文件。)

1.2導入SDK所需要依賴的庫,添加Framework

CFNetwork.framework
CoreFoundation.framework
CoreTelephony.framework
SystemConfiguration.framework
CoreGraphics.framework
Foundation.framework
UIKit.framework
Security.framework
Xcode 7需要的是libs.tbd; Xcode 7以下版本是libs.dylib
Adsupport.framework (獲取IDFA需要;如果不使用IDFA,請不要添加)
UserNotifications.framework (Xcode8及以上)
libresolv.tbd (JPush 2.2.0及以上版本需要)


framework配置.png

1.3 其他配置

Build Settings:

如果你的工程需要支持小于7.0的iOS系統(tǒng),請到Build Settings 關(guān)閉 bitCode 選項,否則將無法正常編譯通過。設(shè)置 Search Paths 下的 User Header Search Paths 和 Library Search Paths,比如SDK文件夾(默認為lib)與工程文件在同一級目錄下,則都設(shè)置為"$(SRCROOT)/{靜態(tài)庫所在文件夾名稱}"即可。####Capabilities:
如使用Xcode8及以上環(huán)境開發(fā),請開啟Application Target的Capabilities->Push Notifications選項,如圖:


開啟推送服務(wù).png

info.plist配置:

在項目的info.plist中添加一個Key:NSAppTransportSecurity,類型為字典類型。然后給它添加一個NSExceptionDomains,類型為字典類型;把需要的支持的域添加給NSExceptionDomains。其中jpush.cn作為Key,類型為字典類型。每個域下面需要設(shè)置2個屬性:NSIncludesSubdomains、NSExceptionAllowsInsecureHTTPLoads。 兩個屬性均為Boolean類型,值分別為YES、YES。


info.png

2、工程代碼部分

目前極光沒有swift版本,因此需要建立一個橋接文件,在里面添加如下代碼

#import "JPUSHService.h"
// iOS10注冊APNs所需頭文件
#ifdef NSFoundationVersionNumber_iOS_9_x_Max
#import <UserNotifications/UserNotifications.h>
#endif
// 如果需要使用 idfa 功能所需要引入的頭文件(可選)
//#import <AdSupport/AdSupport.h>
Bridging.png

下面是真正的代碼了
appdelegate 里的 didFinishLaunchingWithOptions 方法里(不要試圖用我的appKey了,我這么謹慎的人當然放的假的了,自己去極光官網(wǎng)上自己的項目里拿appKey 了)

//推送代碼
let entity = JPUSHRegisterEntity()
entity.types = 1 << 0 | 1 << 1 | 1 << 2
JPUSHService.register(forRemoteNotificationConfig: entity, delegate: self)
 //需要IDFA 功能,定向投放廣告功能
 //let advertisingId = ASIdentifierManager.shared().advertisingIdentifier.uuidString
JPUSHService.setup(withOption: launchOptions, appKey: "7a84363c8be53oba2c8d1a72", channel: "App Store", apsForProduction: false, advertisingIdentifier: nil)

在AppDelegate里添加JPUSHRegisterDelegate代理,并且實現(xiàn)如下代理方法

@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)
        }
        // 需要執(zhí)行這個方法,選擇是否提醒用戶,有Badge、Sound、Alert三種類型可以選擇設(shè)置
        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)
        }
        // 系統(tǒng)要求執(zhí)行這個方法
        completionHandler()
    }
    
    //點推送進來執(zhí)行這個方法
    func application(_ application: UIApplication, didReceiveRemoteNotification userInfo: [AnyHashable : Any], fetchCompletionHandler completionHandler: @escaping (UIBackgroundFetchResult) -> Void) {
        JPUSHService.handleRemoteNotification(userInfo)
        completionHandler(UIBackgroundFetchResult.newData)
        
    }
    //系統(tǒng)獲取Token
    func application(_ application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: Data) {
        JPUSHService.registerDeviceToken(deviceToken)
    }
    //獲取token 失敗
    func application(_ application: UIApplication, didFailToRegisterForRemoteNotificationsWithError error: Error) { //可選
        print("did Fail To Register For Remote Notifications With Error: \(error)")
    }
    func jpushNotificationCenter(_ center: UNUserNotificationCenter!, openSettingsFor notification: UNNotification?) {
        print("hello")
    }

推送小紅角標,程序從后臺進入前臺的時候我們要消除它

//后臺進前臺
func applicationDidEnterBackground(_ application: UIApplication) {
    //銷毀通知紅點
    UIApplication.shared.applicationIconBadgeNumber = 0
    JPUSHService.setBadge(0)
    UIApplication.shared.cancelAllLocalNotifications()
}
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • iOS SDK 集成指南SDK說明適用版本本文匹配的 SDK版本:r2.1.5 以后。查看最近更新了解最新的SDK...
    sillen閱讀 945評論 0 0
  • iOS 平臺上推送通知,只有 APNs 這個官方的通道,是可以隨時送達的。一般開發(fā)者都是自己部署應用服務(wù)器向 AP...
    YHWXQ簡簡單單的生活閱讀 1,650評論 0 3
  • 版本記錄 前言 前一篇已經(jīng)對極光推送產(chǎn)品架構(gòu)和服務(wù)進行了介紹,這一篇則只對ios客戶端的集成和使用等狀況進行了說明...
    刀客傳奇閱讀 1,257評論 0 0
  • 第一步 先在開發(fā)者賬號創(chuàng)建app id,即創(chuàng)建應用程序ID 詳細步驟: 1、登陸蘋果開發(fā)者網(wǎng)站進入開發(fā)者賬戶。 從...
    小緈福閱讀 3,253評論 0 5
  • 昨天剛看完電視劇《最好的我們》,不得不說拍的很好,無論是演員,劇情等各方面吧,我都覺得很好。要先說明一下,...
    十塊錢5閱讀 282評論 0 3

友情鏈接更多精彩內(nèi)容