swift 集成極光推送

在極光官網(wǎng)下申請(qǐng)程序。

image.png

進(jìn)行證書配置,證書分開發(fā)證書,跟生產(chǎn)證書。用xcode跑到手機(jī)上的項(xiàng)目需要開發(fā)證書,打包上架的需要生產(chǎn)證書,這個(gè)就不多說了相信大家都可以實(shí)現(xiàn)。(哎,還是給大家甩個(gè)鏈接吧,誰(shuí)讓我是負(fù)責(zé)任的人那)http://www.itdecent.cn/p/e62810d13df9

image.png

cocopoapods集成JPush (沒用coco 的小伙伴我就不說了,在我們公司就被亂刀砍死了,趕緊安cocoapods去吧,還愣著干什么)

在你的Podfile文件下添加

pod 'JPush'#極光推送

終端中敲下

 pod install --no-repo-update

搞定,這個(gè)時(shí)候你的pods目錄下應(yīng)該多倆這個(gè)


image.png

因?yàn)檫@是oc 寫的,但我們現(xiàn)在是在拿swift敲代碼有木有,這個(gè)時(shí)候就需要一個(gè)叫橋接文件的東西來幫我們搭個(gè)橋了。


image.png

我的是之前建 好了,沒有橋接文件的,你就去添加個(gè)oc 文件,系統(tǒng)自動(dòng)就給你建好橋接文件了


image.png

好了,假裝你的橋接文件也沒有問題啊,橋接文件里寫什么?給你們個(gè)可以復(fù)制粘貼的代碼吧

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

哈哈廢話一大堆,見諒見諒,就愛撤個(gè)犢子。好吧,下面兒是真正的開發(fā)代碼了啊


appdelegate 里的 didFinishLaunchingWithOptions 方法里(不要試圖用我的appKey了,我這么謹(jǐn)慎的人當(dāng)然放的假的了,自己去極光官網(wǎng)上自己的項(xià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)

還支持iOS8.0之前的朋友,再去百度下8.0之前怎么寫吧,我這不沒適配8.0之前的(都iOS12了還支持8.0 之前的是不是傻,9.0之前的我都不想支持了)哈哈,好吧,主要小弟的項(xiàng)目小,不需要考慮那么多。

JPUSHRegisterDelegate 代理方法。什么?你問我這些代理方法干啥的。跟你有關(guān)系嗎,復(fù)制粘貼就完了,這孩子,真的是事兒多(哎呀,嚇?biāo)牢伊?,沒暴露我的水平吧。)

//MARK:--推送代理
extension AppDelegate : JPUSHRegisterDelegate {
    @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í)行這個(gè)方法,選擇是否提醒用戶,有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í)行這個(gè)方法
        completionHandler()
    }
    
    //點(diǎn)推送進(jìn)來執(zhí)行這個(gè)方法
    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)")
    }
}

推送小紅角標(biāo),程序從后臺(tái)進(jìn)入前臺(tái)的時(shí)候我們要消除它

    //后臺(tái)進(jìn)前臺(tái)
    func applicationDidEnterBackground(_ application: UIApplication) {
        //銷毀通知紅點(diǎn)
        UIApplication.shared.applicationIconBadgeNumber = 0
        JPUSHService.setBadge(0)
        UIApplication.shared.cancelAllLocalNotifications()
    }

到這步就可以進(jìn)行廣播推送了。(傻瓜教程圖片三連)

image.png

image.png
image.png

收到廣播通知了吧,沒收到你打死我。(開玩笑啊,實(shí)在收不到的話我就不知道咋搞了,您另請(qǐng)高明吧)


咳咳,下面說說個(gè)推吧。如果你是個(gè)沒集成過極光的小白,請(qǐng)到極光文檔下了解下“別名 alias” (標(biāo)簽tag 我就不說了啊,我這兒沒用到)

簡(jiǎn)單的說,別名就是極光用來標(biāo)識(shí)用戶唯一性的東西。我這里用手機(jī)號(hào)做的別名,當(dāng)然你也可以有uid ,sid 之類的有唯一性的東西來做別名,跟你們的后臺(tái)大佬商量好就行了
上代碼

  private func setJPushAlias () {
        let  alias : String = UserDefaults.standard.value(forKey: "phoneN") as! String
        JPUSHService.setAlias(alias, completion: { (iResCode, iAlias, seq) in
            print("alias,\(alias) . completion,\(iResCode),\(iAlias),\(seq)")
        }, seq: 0)
    }

setAlias 告訴極光你的用戶別名,當(dāng)然這是在登錄成功時(shí)進(jìn)行的了,那退出登錄的時(shí)候那,當(dāng)然要?jiǎng)h除了,不然我都沒登著賬號(hào)了還給能給我發(fā)通知,你是不是找砍那

  JPUSHService.deleteAlias({ (iResCode, iAlias, seq) in
                    print("退出注銷極光別名兒 \(iResCode),\(String(describing: iAlias)),\(seq)")
                }, seq: 0)

個(gè)推操作(就這張圖吧,其他跟上面兩張圖內(nèi)容一樣)

image.png

最后說下,生產(chǎn)環(huán)境還是開發(fā)環(huán)境下的后臺(tái)也要設(shè)定一下的,我這后臺(tái)是PHP的,剛開始他說沒有找到設(shè)定生產(chǎn)環(huán)境,開發(fā)環(huán)境的方法,當(dāng)時(shí)我就不樂意了對(duì)吧。測(cè)試推不過來怎么也得有人背鍋吧,這個(gè)時(shí)候你把這段代碼甩給他

 //附加選項(xiàng)
        $data['options'] = array(
            "sendno"=>time(),
            "time_to_live"=>$m_time, //保存離線時(shí)間的秒數(shù)默認(rèn)為一天
            "apns_production"=>false, //布爾類型   指定 APNS 通知發(fā)送環(huán)境:0開發(fā)環(huán)境,1生產(chǎn)環(huán)境?;蛘邆鬟ffalse和true
        );

好了,能力一般,水平有限。父老鄉(xiāng)親能容我,不使人間造孽。。。哎呀,走錯(cuò)片場(chǎng)了,溜了溜了

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

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

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