uniapp開發(fā) 極光推送(離線打包,以iOS為例)

1荆秦、極光推送的原生插件

uniapp導入極光推送的本地插件,主要用于離線打包
JG-JPush的1.0.3版本
JG-JCore的1.0.1版本
下載地址:https://github.com/ShuKeHong/uniapp-JG.git

2力图、工程中導入本地插件
導入本地插件
3步绸、App模塊配置

Push模塊不要勾選Push模塊不要勾選吃媒、Push模塊不要勾選
官方是JPush瓤介,極光推送屬于原生插件吕喘,所以這里Push模塊不要勾選

Push模塊不要勾選

4、App原生插件配置

這里以開發(fā)iOS離線打包為例
Android的廠商通道需要自己去申請刑桑,這里就不詳細介紹了
JG-JCore配置

JG-JCore配置

JG-JPush配置
JG-JPush配置

5氯质、自己封裝的js文件

這個js文件就不提供了,js里所有代碼都在下面祠斧。

// 引用方式
var jpushModule = uni.requireNativePlugin("JG-JPush");
console.log('【sk】【引用方式】【jpushModule】【requireNativePlugin】')

// 開啟 debug 模式闻察,默認是關閉
function openDebug() {
    jpushModule.setLoggerEnable(true);
}

// 關閉 debug 模式,默認是關閉
function closeDebug() {
    jpushModule.setLoggerEnable(false);
}

// 獲取 RegistrationID琢锋,只有當應用程序成功注冊到 JPush 的服務器時才返回對應的值辕漂,否則返回空字符串
function getRegistrationID(skBack) {
    jpushModule.getRegistrationID(result=>{
        // code number  狀態(tài)碼 0 - 成功, 1011 - iOS模擬器調(diào)用會報此錯誤
        // registerID   string  返回的 registrationID
        console.log('【sk】獲取 RegistrationID=>',result.registerID)
        skBack(result.registerID)
    })
}

// 跳轉至系統(tǒng)設置頁面吴超,0 - 成功 1 - 失敗
function openSettingsForNotification() {
    jpushModule.openSettingsForNotification((result)=>{
        // code number  0 - 成功 1 - 失敗
        console.log('【sk】跳轉至系統(tǒng)設置頁面result=>',result.code)
    })
}

// 初始化SDK iOS 說明:如果在mainfest.json里 將JPUSH_DEFAULTINITJPUSH_IOS值配置為"true"钉嘹,插件內(nèi)部將默認初始化JPush,用戶則不需要調(diào)用該初始化方法鲸阻。
function initJPushService() {
    console.log(jpushModule)
    jpushModule.initJPushService()
}

// 連接狀態(tài)回調(diào)跋涣,true - 已連接, false - 未連接
function addConnectEventListener(skBack) {
    jpushModule.addConnectEventListener(result=>{
        // connectEnable    boolean true - 已連接, false - 未連接
        console.log('【sk】連接狀態(tài)回調(diào)=>',result.connectEnable)
        skBack(result.connectEnable);
    })
}

// 通知事件回調(diào)
function addNotificationListener(skBack) {
    jpushModule.addNotificationListener(result=>{
        // messageID    string  唯一標識通知消息的 ID
        // title    string  對應 Portal 推送通知界面上的“通知標題”字段
        // content  string  對應 Portal 推送通知界面上的“通知內(nèi)容”字段
        // badge    string  對應 Portal 推送通知界面上的可選設置里面的“badge”字段 (ios only)
        // ring string  推送通知界面上的可選設置里面的“sound”字段 (ios only)
        // extras   dictionary  對應 Portal 推送消息界面上的“可選設置”里的附加字段
        // iOS  dictionary  對應原生返回的通知內(nèi)容,如需要更多字段請查看該字段內(nèi)容
        // android  dictionary  對應原生返回的通知內(nèi)容鸟悴,如需要更多字段請查看該字段內(nèi)容
        // notificationEventType    string  分為notificationArrived和notificationOpened兩種
        console.log('【sk】通知事件回調(diào)result=>',result)
        skBack(result);
    })
}

// 自定義消息事件回調(diào)
function addCustomMessageListener(skBack) {
    jpushModule.addCustomMessageListener(result=>{
        // messageID    string  唯一標識通知消息的 ID
        // content  string  對應 Portal 推送通知界面上的“通知內(nèi)容”字段
        // extras   dictionary  對應 Portal 推送消息界面上的“可選設置”里的附加字段
        console.log('【sk】自定義消息事件回調(diào)result=>',result)
        skBack(result);
    })
}

// 應用內(nèi)消息回調(diào)
function addInMessageListener(skBack) {
    jpushModule.addInMessageListener(result=>{
        // eventType    string  show - 應用內(nèi)消息展示 disappear - 應用內(nèi)消息已消失 click - 應用內(nèi)消息點擊
        // messageType  string  消息類型, eventType 不為 disappear時返回, inMessageNoti - 通知類型的inMessage
        // content  dictionary  應用內(nèi)消息內(nèi)容, eventType 不為 disappear 時返回
        console.log('【sk】應用內(nèi)消息回調(diào)result=>',result)
        skBack(result);
    })
}

// 本地通知事件回調(diào)
function addLocalNotificationListener(skBack) {
    jpushModule.addLocalNotificationListener(result=>{
        // messageID    string  唯一標識通知消息的ID
        // title    string  對應“通知標題”字段
        // content  string  對應“通知內(nèi)容”字段
        // extras   dictionary  對應“附加內(nèi)容”字段
        console.log('【sk】本地通知事件回調(diào)result=>',result)
        skBack(result);
    })
}

// 添加一個本地通知
function addLocalNotification(e) {
    jpushModule.addLocalNotification({
        messageID: e.messageID ? e.messageID : '', // 唯一標識通知消息的ID
        title: e.title ? e.title : '', // 對應“通知標題”字段
        content: e.content ? e.content : '', // 對應“通知內(nèi)容”字段
        extras: e.extras ? e.extras : {name: '', age: ''} // 對應“附加內(nèi)容”字段
    })
}

// 移除指定的本地通知
function removeLocalNotification(e) {
    jpushModule.removeLocalNotification({
        messageID: e.messageID ? e.messageID : '' // 唯一標識通知消息的ID
    })
}

// 移除所有的本地通知
function clearLocalNotifications() {
    jpushModule.clearLocalNotifications()
}

// 標簽別名事件回調(diào)
function addTagAliasListener(skBack) {
    jpushModule.addTagAliasListener(result=>{
        // code number  請求狀態(tài)碼 0 - 成功
        // sequence number  請求時傳入的序列號,會在回調(diào)時原樣返回
        // tags StringArray 執(zhí)行tag數(shù)組操作時返回
        // tag  string  執(zhí)行查詢指定tag(queryTag)操作時會返回
        // tagEnable    boolean 執(zhí)行查詢指定tag(queryTag)操作時會返回是否可用
        // alias    string  對alias進行操作時返回
        console.log('【sk】標簽別名事件回調(diào)result=>',result)
        skBack(result);
    })
}

// 新增標簽
function addTags(e) {
    jpushModule.addTags({
        'tags': e.tags ? e.tags : [], // StringArray  string類型的數(shù)組
        'sequence': e.sequence ? e.sequence : 1 // number  請求時傳入的序列號陈辱,會在回調(diào)時原樣返回
    })
}

// 覆蓋標簽
function updateTags(e) {
    jpushModule.updateTags({
        'tags': e.tags ? e.tags : [], // StringArray  string類型的數(shù)組
        'sequence': e.sequence ? e.sequence : 1 // number  請求時傳入的序列號,會在回調(diào)時原樣返回
    })
}

// 刪除指定標簽
function deleteTags(e) {
    jpushModule.deleteTags({
        'tags': e.tags ? e.tags : [], // StringArray  string類型的數(shù)組
        'sequence': e.sequence ? e.sequence : 1 // number  請求時傳入的序列號遣臼,會在回調(diào)時原樣返回
    })
}

// 清除所有標簽
function cleanTags(e) {
    jpushModule.cleanTags({
        'sequence': e.sequence ? e.sequence : 1 // number  請求時傳入的序列號性置,會在回調(diào)時原樣返回
    })
}

// 查詢指定 tag 與當前用戶綁定的狀態(tài)
function queryTag(e) {
    jpushModule.queryTag({
        'tag': e.tag ? e.tag : '', // string  需要查詢的標簽
        'sequence': e.sequence ? sequence : 1 // number  請求時傳入的序列號,會在回調(diào)時原樣返回
    })
}

// 查詢所有標簽
function getAllTags(e) {
    jpushModule.getAllTags({
        'sequence': e.sequence ? e.sequence : 1 // number  請求時傳入的序列號揍堰,會在回調(diào)時原樣返回
    })
}

// 設置別名
function setAlias(e) {
    console.log('設置別名',e)
    jpushModule.setAlias({
        'alias': e.alias ? e.alias : '', // string  有效的別名組成:字母(區(qū)分大小寫)鹏浅、數(shù)字、下劃線屏歹、漢字隐砸、特殊字符@!#$&*+=.|
        'sequence': e.sequence ? e.sequence : 1 // number  請求時傳入的序列號,會在回調(diào)時原樣返回
    })
}

// 刪除別名
function deleteAlias(e) {
    jpushModule.deleteAlias({
        'sequence': e.sequence ? e.sequence : 1 // number  請求時傳入的序列號蝙眶,會在回調(diào)時原樣返回
    })
}

// 查詢別名
function queryAlias(e) {
    jpushModule.queryAlias({
        'sequence': e.sequence ? e.sequence : 1 // number  請求時傳入的序列號季希,會在回調(diào)時原樣返回
    })
}

// 開啟 CrashLog 上報
function initCrashHandler() {
    jpushModule.initCrashHandler()
}

// 設置地理圍欄的最大個數(shù)
function setMaxGeofenceNumber(e) {
    jpushModule.setMaxGeofenceNumber(e.geofenceNumber ? e.geofenceNumber : 10) // 默認值為 10 ,iOS系統(tǒng)默認地理圍欄最大個數(shù)為20
}

// 刪除指定id的地理圍欄
function deleteGeofence(e) {
    jpushModule.deleteGeofence(e.geofence ? e.geofence : '') // 刪除指定id的地理圍欄
}

// 設置 Badge
function setBadge(e) {
    jpushModule.setBadge(e.badge ? e.badge : 0) // number
}

// 設置手機號碼
function setMobileNumber(e) {
    jpushModule.setMobileNumber({
        sequence: e.sequence ? e.sequence : 1, // number  請求時傳入的序列號,會在回調(diào)時原樣返回
        mobileNumber: e.mobileNumber ? e.mobileNumber : '' // string  手機號碼 會與用戶信息一一對應幽纷∈剿可為空,為空則清除號碼友浸。
    })
}

// 設置手機號碼回調(diào)
function addMobileNumberListener(skBack) {
    jpushModule.addMobileNumberListener(result=>{
        // code number  狀態(tài)碼 0 - 成功
        // sequence number  請求時傳入的序列號,會在回調(diào)時原樣返回
        console.log('【sk】設置手機號碼回調(diào)result=>',result)
        skBack(result);
    })
}


module.exports = {
    openDebug: openDebug,
    closeDebug: closeDebug,
    getRegistrationID: getRegistrationID,
    openSettingsForNotification: openSettingsForNotification,
    initJPushService: initJPushService,
    addConnectEventListener: addConnectEventListener,
    addNotificationListener: addNotificationListener,
    addCustomMessageListener: addCustomMessageListener,
    addInMessageListener: addInMessageListener,
    addLocalNotificationListener: addLocalNotificationListener,
    addLocalNotification: addLocalNotification,
    removeLocalNotification: removeLocalNotification,
    clearLocalNotifications: clearLocalNotifications,
    addTagAliasListener: addTagAliasListener,
    addTags: addTags,
    updateTags: updateTags,
    deleteTags: deleteTags,
    cleanTags: cleanTags,
    queryTag: queryTag,
    getAllTags: getAllTags,
    setAlias: setAlias,
    deleteAlias: deleteAlias,
    queryAlias: queryAlias,
    initCrashHandler: initCrashHandler,
    setMaxGeofenceNumber: setMaxGeofenceNumber,
    deleteGeofence: deleteGeofence,
    setBadge: setBadge,
    setMobileNumber: setMobileNumber,
    addMobileNumberListener: addMobileNumberListener
}

6峰尝、具體實現(xiàn)代碼

根據(jù)自己業(yè)務要求進行具體開發(fā),下面是一些常用的實現(xiàn)代碼

// 極光推送-init
skJGPush.initJPushService()
                
// 極光推送-打開debug
skJGPush.openDebug()
                
// 極光推送-獲取rid
skJGPush.getRegistrationID(result => {
    console.log('【業(yè)務getRegistrationID】', result)
    uni.setStorageSync('skJGRegistrationID', result);
})
                
// 極光推送-通知事件回調(diào)
skJGPush.addNotificationListener(result => {
    console.log('【業(yè)務addNotificationListener】', result)
    this.getWarningBatteryCount();
})
                
// 極光推送-標簽別名事件回調(diào)
skJGPush.addTagAliasListener(result => {
    console.log('【業(yè)務addTagAliasListener】', result)
})
7收恢、Xcode工程配置

這里用的HBuilderX是3.1.13
對應的SDK的Xcode工程也是3.1.13


需要帶入的文件

導入文件

導入依賴

配置AppKey和Channel

添加推送功能

導入JPUSHService.h后添加一行代碼
8武学、完成

以上祭往,基于uniapp開發(fā)極光推送的iOS的離線打包就完成了。

?著作權歸作者所有,轉載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末火窒,一起剝皮案震驚了整個濱河市硼补,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌熏矿,老刑警劉巖已骇,帶你破解...
    沈念sama閱讀 207,113評論 6 481
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異曲掰,居然都是意外死亡疾捍,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 88,644評論 2 381
  • 文/潘曉璐 我一進店門栏妖,熙熙樓的掌柜王于貴愁眉苦臉地迎上來乱豆,“玉大人,你說我怎么就攤上這事吊趾⊥鹪#” “怎么了?”我有些...
    開封第一講書人閱讀 153,340評論 0 344
  • 文/不壞的土叔 我叫張陵论泛,是天一觀的道長揩尸。 經(jīng)常有香客問我,道長屁奏,這世上最難降的妖魔是什么岩榆? 我笑而不...
    開封第一講書人閱讀 55,449評論 1 279
  • 正文 為了忘掉前任,我火速辦了婚禮坟瓢,結果婚禮上勇边,老公的妹妹穿的比我還像新娘。我一直安慰自己折联,他們只是感情好粒褒,可當我...
    茶點故事閱讀 64,445評論 5 374
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著诚镰,像睡著了一般奕坟。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上清笨,一...
    開封第一講書人閱讀 49,166評論 1 284
  • 那天月杉,我揣著相機與錄音,去河邊找鬼抠艾。 笑死沙合,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的跌帐。 我是一名探鬼主播首懈,決...
    沈念sama閱讀 38,442評論 3 401
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼谨敛!你這毒婦竟也來了究履?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 37,105評論 0 261
  • 序言:老撾萬榮一對情侶失蹤脸狸,失蹤者是張志新(化名)和其女友劉穎最仑,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體炊甲,經(jīng)...
    沈念sama閱讀 43,601評論 1 300
  • 正文 獨居荒郊野嶺守林人離奇死亡泥彤,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 36,066評論 2 325
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了卿啡。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片吟吝。...
    茶點故事閱讀 38,161評論 1 334
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖颈娜,靈堂內(nèi)的尸體忽然破棺而出剑逃,到底是詐尸還是另有隱情,我是刑警寧澤官辽,帶...
    沈念sama閱讀 33,792評論 4 323
  • 正文 年R本政府宣布蛹磺,位于F島的核電站,受9級特大地震影響同仆,放射性物質發(fā)生泄漏萤捆。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 39,351評論 3 307
  • 文/蒙蒙 一俗批、第九天 我趴在偏房一處隱蔽的房頂上張望俗或。 院中可真熱鬧,春花似錦扶镀、人聲如沸蕴侣。這莊子的主人今日做“春日...
    開封第一講書人閱讀 30,352評論 0 19
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽昆雀。三九已至,卻和暖如春蝠筑,著一層夾襖步出監(jiān)牢的瞬間狞膘,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 31,584評論 1 261
  • 我被黑心中介騙來泰國打工什乙, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留挽封,地道東北人。 一個月前我還...
    沈念sama閱讀 45,618評論 2 355
  • 正文 我出身青樓臣镣,卻偏偏與公主長得像辅愿,于是被迫代替她去往敵國和親智亮。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 42,916評論 2 344

推薦閱讀更多精彩內(nèi)容