? ??????????????Android?studio集成百度云推送教程
1?前言
????????最近研究百度云推送和Android?Studio集成豌注,按照官方文檔?沒有跑成功,官網(wǎng)主要按照Eclipse集成來寫的揉忘,查了許多資料跳座,都是零零散散的,而且有些關(guān)鍵點都漏掉了泣矛,經(jīng)過總結(jié)歸納最終實測成功疲眷,記錄如下,希望對初學(xué)者有所幫助您朽,少走彎路狂丝,節(jié)省時間。
說明:這里只介紹Android?Studio 和 百度云推送的集成哗总,Eclipse和百度云的集成請參考官網(wǎng)即可几颜。
2?Android?Studio和百度云推送的集成
JDK?版本:1.8.0_60
?Android?Studio 3.1.4(推薦)
百度云推送?jar包版本?pushservice-5.6.0.30.jar?下載最新即可
?創(chuàng)建工程 選 Android 8.1
https://developer.baidu.com/
2.3?進(jìn)入控制臺并創(chuàng)建應(yīng)用
1)創(chuàng)建應(yīng)用
在首頁登陸已經(jīng)注冊為開發(fā)者的百度賬號,然后點擊開始使用或右上角的"我的控制臺"進(jìn)入推送控制臺
進(jìn)入推送控制臺會進(jìn)入應(yīng)用列表頁讯屈,應(yīng)用列表頁展示目前您在百度開發(fā)者中心曾經(jīng)創(chuàng)建過的所有應(yīng)用蛋哭;如果您曾經(jīng)在舊版管理控制臺配置過的應(yīng)用,新版管理控制臺將可以直接使用涮母;對于新創(chuàng)建或從未配置過的應(yīng)用躁愿,則需要進(jìn)行應(yīng)用配置之后才可以進(jìn)行消息發(fā)送等操作彤钟。
當(dāng)您需要創(chuàng)建新的應(yīng)用,請點擊應(yīng)用列表頁中的創(chuàng)建應(yīng)用按鈕
隨后請為您的應(yīng)用命名峡眶。應(yīng)用名稱可以是中文,數(shù)字或英文字母的組合,最長32字符搬男。注意應(yīng)用名稱符合相當(dāng)法律法規(guī)并遵守“云推送”開發(fā)者服務(wù)協(xié)議
創(chuàng)建成功后缔逛,可以立刻進(jìn)行應(yīng)用配置,也可以稍后通過應(yīng)用列表中的鏈接進(jìn)入敦冬。
2)應(yīng)用配置
如果您是第一次進(jìn)行某個應(yīng)用的應(yīng)用配置介蛉,則需要您選擇應(yīng)用的平臺(選Android)甘耿。在本次配置保存完畢后捏境,應(yīng)用的平臺將不可以更改贰剥,請謹(jǐn)慎操作
注意:應(yīng)用配置的包名?要和APP?的包名一致。
3)Android應(yīng)用配置包名命名規(guī)則
安卓應(yīng)用需要配置應(yīng)用的包名,包名的要求如下:
只可以包含大寫字母(A到Z)瓶盛、小寫字母(a到z)、數(shù)字和下劃線、中文奶镶,可以用英文句號分隔
每段標(biāo)識必須以字母或下劃線或中文開頭
至少包含兩段標(biāo)識符即至少包含一個英文句號
不可包含Java保留字
兩段標(biāo)識符之間有且只能有一個英文句號
4)iOS應(yīng)用配置(本章不涉及ios集成捺氢,可略過)
iOS的應(yīng)用配置包含以下幾個部分
選擇應(yīng)用目前的默認(rèn)推送模式
iOS應(yīng)用根據(jù)編譯過程中采用的證書不同分為開發(fā)版應(yīng)用和生產(chǎn)版應(yīng)用悠反,兩種類型的應(yīng)用之間消息推送不能互通斋否,即使用開發(fā)版證書的應(yīng)用無法收到以生產(chǎn)版證書的推送舅世,反之亦然缨硝。這里的配置會影響iOS推送時的默認(rèn)應(yīng)用(使用的證書)類型證書上傳
如上述胖笛,您需要為iOS應(yīng)用上傳對應(yīng)的開發(fā)版證書和生產(chǎn)版證書,這里要求應(yīng)用至少上傳默認(rèn)推送模式對應(yīng)的類型的證書才可以進(jìn)行應(yīng)用配置保存操作。
損壞的、過期的證書都會造成證書上傳的失敗瘫絮,如果出現(xiàn)此類問題扁眯,請獲取正確的iOS證書后重新上傳
2.4?獲取應(yīng)用的ApiKey/SecretKey
ApiKey是應(yīng)用標(biāo)識命满,在SDK調(diào)用過程中唯一標(biāo)識一個應(yīng)用?SecretKey是調(diào)用API時的Token杂抽,用來驗證請求的合法性铸磅,請注意保密
ApiKey/SecretKey?在應(yīng)用創(chuàng)建完畢后可以在應(yīng)用詳情頁中查到
如果您的SecretKey泄露導(dǎo)致風(fēng)險,請聯(lián)系我們以重置SecretKey
應(yīng)用創(chuàng)建完畢后,在應(yīng)用詳情頁可以找到該應(yīng)用的Demo客戶端的下載鏈接下載,解壓后備用(解壓后為PushDemo)。
新建的工程?包名要和?百度云推送創(chuàng)建的應(yīng)用配置的包名一致。
將解壓后的libs文件夾中所有文件拷貝到您的工程的libs文件夾中。
在工程中“src/main”目錄中新建名為jniLibs的目錄,將libs文件夾中除了jar包外的文件夾拷貝到“jniLibs”目錄內(nèi)漂辐。?如下圖所示:
在當(dāng)前工程的AndroidManifest.xml文件中复凳,添加權(quán)限和聲明信息,配置參考官方文檔給出的配置(這里不做重復(fù)粘貼了) https://push.baidu.com/doc/android/api
配置Manifest文件之后赦邻,請將YourPackageName替換成用戶自己的包名。
我配置完的文件如下须床,請參考:
xml version="1.0"?encoding="utf-8"?>
<manifest?xmlns:android="http://schemas.android.com/apk/res/android"
?package="com.srie.oaapp">
運行需要的權(quán)限?-->
?<uses-permission?android:name="android.permission.INTERNET"?/>
<uses-permission?android:name="android.permission.READ_PHONE_STATE"?/>
<uses-permission?android:name="android.permission.ACCESS_NETWORK_STATE"?/>
<uses-ermission?android:name="android.permission.RECEIVE_BOOT_COMPLETED"?/>
-->
?<uses-permission?android:name="android.permission.VIBRATE"?/>
<uses-permission?android:name="android.permission.WRITE_EXTERNAL_STORAGE"?/>
<uses-permission?android:name="android.permission.ACCESS_DOWNLOAD_MANAGER"?/>
<uses-permission?android:name="android.permission.DOWNLOAD_WITHOUT_NOTIFICATION"?/>
<uses-permission?android:name="android.permission.DISABLE_KEYGUARD"?/>
<uses-permission?android:name="android.permission.BROADCAST_STICKY"?/>
富媒體需要聲明的權(quán)限?-->
?<uses-permission?android:name="android.permission.ACCESS_COARSE_LOCATION"?/>
<uses-permission?android:name="android.permission.ACCESS_WIFI_STATE"?/>
<uses-permission?android:name="android.permission.EXPAND_STATUS_BAR"?/>
適配Android N系統(tǒng)必需的ContentProvider寫權(quán)限聲明坦刀,寫權(quán)限包含應(yīng)用包名-->
?<uses-permission?android:name="baidu.push.permission.WRITE_PUSHINFOPROVIDER.com.srie.oaapp"?/>
<permission
android:name="baidu.push.permission.WRITE_PUSHINFOPROVIDER.com.srie.oaapp"
?android:protectionLevel="signature">
</permission>
<application
?android:allowBackup="true"
?android:icon="@mipmap/ic_launcher"
?android:label="@string/app_name"
?android:roundIcon="@mipmap/ic_launcher_round"
?android:supportsRtl="true"
?android:theme="@style/AppTheme">
<activity?android:name=".MainActivity">
<intent-filter>
<action?android:name="android.intent.action.MAIN"?/>
<category?android:name="android.intent.category.LAUNCHER"?/>
</intent-filter>
</activity>
用于接收系統(tǒng)消息以保證PushService正常運行?--><receiver?android:name="com.baidu.android.pushservice.PushServiceReceiver"
?android:process=":bdservice_v1"?>
<intent-filter>
<action?android:name="android.intent.action.BOOT_COMPLETED"?/>
<action?android:name="android.net.conn.CONNECTIVITY_CHANGE"?/>
<action?android:name="com.baidu.android.pushservice.action.notification.SHOW"?/>
<
action?android:name="com.baidu.android.pushservice.action.media.CLICK"?/>
以下四項為可選的action聲明咕村,可大大提高service存活率和消息到達(dá)速度?-->
?<action?android:name="android.intent.action.MEDIA_MOUNTED"?/>
<action?android:name="android.intent.action.USER_PRESENT"?/>
<action?android:name="android.intent.action.ACTION_POWER_CONNECTED"?/>
<action?android:name="android.intent.action.ACTION_POWER_DISCONNECTED"?/>
</intent-filter>
</receiver>
?<receiver?android:name="com.baidu.android.pushservice.RegistrationReceiver"
?android:process=":bdservice_v1"?>
<intent-filter>
<action?android:name="com.baidu.android.pushservice.action.METHOD"?/>
<action?android:name="com.baidu.android.pushservice.action.BIND_SYNC"?/>
</intent-filter>
<intent-filter>
<action?android:name="android.intent.action.PACKAGE_REMOVED"?/>
<data?android:scheme="package"?/>
</intent-filter>
</receiver>
<service?android:name="com.baidu.android.pushservice.PushService"?android:exported="true"
?android:process=":bdservice_v1"?>
<intent-filter?>
<action?android:name="com.baidu.android.pushservice.action.PUSH_SERVICE"?/>
</intent-filter>
</service>
版本新增的CommandService聲明,提升小米和魅族手機(jī)上的實際推送到達(dá)率?-->
?<service?android:name="com.baidu.android.pushservice.CommandService"
?android:exported="true"?/>
適配Android N系統(tǒng)必需的ContentProvider聲明批钠,寫權(quán)限包含應(yīng)用包名-->
?<provider
?android:name="com.baidu.android.pushservice.PushInfoProvider"
?android:authorities="com.srie.oaapp.bdpush"
?android:writePermission="baidu.push.permission.WRITE_PUSHINFOPROVIDER.com.srie.oaapp"
?android:protectionLevel =?"signature"
?android:exported="true"?/>
結(jié)束?-->
此處Receiver名字修改為當(dāng)前包名路徑?-->
?<receiver?android:name="com.srie.oaapp.MyPushMessageReceiver">
<intent-filter>
?<action?android:name="com.baidu.android.pushservice.action.MESSAGE"?/>
<action?android:name="com.baidu.android.pushservice.action.RECEIVE"?/>
?<action?android:name="com.baidu.android.pushservice.action.notification.CLICK"?/>
</intent-filter>
</receiver>
?<meta-data
?android:name="api_key"
?android:value="11hcYNN12345dUxr4DsjyvSY"?/>
</application>
</manifest>
?
2.9?導(dǎo)入?PushMessageReceiver?和?Utils?類
從PushDemo中導(dǎo)入PushMessageReceiver?和?Utils?類
編譯?報錯宇植,找到報錯位置,是因為找不到?PushDemoActivity.class埋心,將其改為自己工程的相應(yīng)的activity即可指郁。
在當(dāng)前工程的主Activity的onCreate函數(shù)中,添加以下代碼:
PushManager.startWork(getApplicationContext(),PushConstants.LOGIN_TYPE_API_KEY,"api_key")
其中的“API Key“需要手動修改為指定應(yīng)用的API Key拷呆。
如果編譯通過闲坎,到這里就可以真機(jī)測試了
否則看2.12是否可以幫助你疫粥。
1)編譯時,AndroidManifest此句報紅
?<uses-permission?android:name="android.permission.WRITE_SETTINGS"?/>
解決:當(dāng)前注釋掉此句腰懂。
2)連續(xù)推送消息手機(jī)接收不到
解決:AndroidManifest增加如下權(quán)限
????? <uses-permission?android:name="android.permission.BROADCAST_STICKY"?/>
3)注意模擬器是不能測試消息接收的梗逮,必須真機(jī)測試。
4)項目編譯版本選擇請參考我的配置文件?build.gradle
apply?plugin:?'com.android.application'
android {
compileSdkVersion?28
defaultConfig {
applicationId?"com.srie.oaapp"
?minSdkVersion?19
targetSdkVersion?28
versionCode?1
versionName?"1.0"
?testInstrumentationRunner?"android.support.test.runner.AndroidJUnitRunner"
?}
buildTypes {
release {
minifyEnabled?false
?proguardFiles getDefaultProguardFile('proguard-android.txt'),?'proguard-rules.pro'
?}
}
}
dependencies {
implementation fileTree(include: ['*.jar'],?dir:?'libs')
implementation?'com.android.support:appcompat-v7:28.0.0-rc02'
?implementation?'com.android.support.constraint:constraint-layout:1.1.3'
?testImplementation?'junit:junit:4.12'
?androidTestImplementation?'com.android.support.test:runner:1.0.2'
?androidTestImplementation?'com.android.support.test.espresso:espresso-core:3.0.2'
?implementation files('libs/pushservice-5.6.0.30.jar')
}
5)api key
api key:如果手機(jī)端想要接受某個應(yīng)用(web端通過管理控制臺創(chuàng)建的)的推送绣溜,那么使用的api key必需和應(yīng)用一致慷彤。如果同一臺手機(jī)上多個應(yīng)用使用同一個apikey,只有最后一個初始化的應(yīng)用能收到推送怖喻,所以要為每一個app使用一個唯一的apikey瞬欧。
6)