標籤:
什麼是推送呢?
一種圖片讓你明白什麼是推送:
這就是推送:
就是伺服器可以即時的將訊息發送到用戶端
首先要理解一些幾個概念:
長串連和段串連:
.長串連是指用戶端和伺服器之間始終建立著一個通訊串連,在串連沒有中斷之前,用戶端和伺服器之間可以隨時進行通訊。
.短串連是指通訊雙方有資料互動是,就建立一個串連,資料發送完成後,則斷開此串連。
長串連實現的即時通訊叫:推送(也就是今天的主題)
短串連實現的即時通訊叫:輪詢。(用戶端每隔一段時間詢問伺服器是否有新訊息)
國內的第三方推送平台:
極光推送
個推
百度推送
小米推送
等等
今天來學習一下極光推送
首先在官網上註冊一個帳號:https://www.jiguang.cn/
建立一個應用,建立應用的包名 ,與你要整合極光推送的應用程式套件名一定要一致
參照開發文檔一步步來:http://docs.jiguang.cn/guideline/android_guide/#sdk
1.下載android sdk:http://docs.jiguang.cn/resources/
2.
SDK整合步驟匯入 SDK 開發包到你自己的應用程式項目
- 解壓縮 jpush-android-release-2.x.y.zip 整合壓縮包。
- 把 libs檔案夾下所有的檔案複製到你建立的工程lib下
配置資訊清單檔:
根據 SDK 壓縮包裡的 AndroidManifest.xml 範例檔案,來配置應用程式項目的 AndroidManifest.xml 。
主要步驟為:
- 複製備忘為 "Required" 的部分
- 將備忘為替換包名的部分,替換為當前應用程式的包名
- 將AppKey替換為在Portal上註冊該應用的的Key,例如(9fed5bcb7b9b87413678c407)
AndroidManifest 樣本
<?xml version="1.0" encoding="utf-8"?><manifest xmlns:android="http://schemas.android.com/apk/res/android" package="您應用的包名" android:versionCode="216" android:versionName="2.1.6" > <uses-sdk android:minSdkVersion="9" android:targetSdkVersion="23" /> <!-- Required --> <permission android:name="您應用的包名.permission.JPUSH_MESSAGE" android:protectionLevel="signature" /> <!-- Required --> <uses-permission android:name="您應用的包名.permission.JPUSH_MESSAGE" /> <uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.WAKE_LOCK" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.VIBRATE" /> <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.WRITE_SETTINGS" /> <!-- Optional. Required for location feature --> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" /> <uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" /> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <application android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:name="Your Application"> <!-- Required SDK 核心功能--> <!-- option since 2.0.5 可配置PushService,DaemonService,PushReceiver,AlarmReceiver的android:process參數 將JPush相關組件設定為一個獨立進程 --> <!-- 如:android:process=":remote" --> <service android:name="cn.jpush.android.service.PushService" android:enabled="true" android:exported="false" > <intent-filter> <action android:name="cn.jpush.android.intent.REGISTER" /> <action android:name="cn.jpush.android.intent.REPORT" /> <action android:name="cn.jpush.android.intent.PushService" /> <action android:name="cn.jpush.android.intent.PUSH_TIME" /> </intent-filter> </service> <!-- since 1.8.0 option 可選項。用於同一裝置中不同應用的JPush服務相互拉起的功能。 --> <!-- 若不啟用該功能可刪除該組件,將不拉起其他應用也不能被其他應用拉起 --> <service android:name="cn.jpush.android.service.DaemonService" android:enabled="true" android:exported="true"> <intent-filter > <action android:name="cn.jpush.android.intent.DaemonService" /> <category android:name="您應用的包名"/> </intent-filter> </service> <!-- Required --> <receiver android:name="cn.jpush.android.service.PushReceiver" android:enabled="true" > <intent-filter android:priority="1000"> <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY" /> <category android:name="您應用的包名"/> </intent-filter> <intent-filter> <action android:name="android.intent.action.USER_PRESENT" /> <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> <!-- Optional --> <intent-filter> <action android:name="android.intent.action.PACKAGE_ADDED" /> <action android:name="android.intent.action.PACKAGE_REMOVED" /> <data android:scheme="package" /> </intent-filter> </receiver> <!-- Required SDK核心功能--> <activity android:name="cn.jpush.android.ui.PushActivity" android:configChanges="orientation|keyboardHidden" android:exported="false" > <intent-filter> <action android:name="cn.jpush.android.ui.PushActivity" /> <category android:name="android.intent.category.DEFAULT" /> <category android:name="您應用的包名" /> </intent-filter> </activity> <!-- Required SDK核心功能--> <service android:name="cn.jpush.android.service.DownloadService" android:enabled="true" android:exported="false" > </service> <!-- Required SDK核心功能--> <receiver android:name="cn.jpush.android.service.AlarmReceiver" /> <!-- User defined. 使用者自訂的廣播接收器--> <receiver android:name="您自己定義的Receiver" android:enabled="true"> <intent-filter> <!--Required 使用者註冊SDK的intent--> <action android:name="cn.jpush.android.intent.REGISTRATION" /> <!--Required 使用者接收SDK訊息的intent--> <action android:name="cn.jpush.android.intent.MESSAGE_RECEIVED" /> <!--Required 使用者接收SDK通知欄資訊的intent--> <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED" /> <!--Required 使用者開啟自訂通知欄的intent--> <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" /> <!--Optional 使用者接受Rich Push Javascript 回呼函數的intent--> <action android:name="cn.jpush.android.intent.ACTION_RICHPUSH_CALLBACK" /> <!-- 接收網路變化 串連/斷開 since 1.6.3 --> <action android:name="cn.jpush.android.intent.CONNECTION" /> <category android:name="您應用的包名" /> </intent-filter> </receiver> <!-- Required. For publish channel feature --> <!-- JPUSH_CHANNEL 是為了方便開發人員統計APK分發渠道。--> <!-- 例如: --> <!-- 發到 Google Play 的APK可以設定為 google-play; --> <!-- 發到其他市場的 APK 可以設定為 xxx-market。 --> <!-- 目前這個渠道統計功能的報表還未開放。--> <meta-data android:name="JPUSH_CHANNEL" android:value="developer-default"/> <!-- Required. AppKey copied from Portal --> <meta-data android:name="JPUSH_APPKEY" android:value="Your AppKey"/> </application></manifest>
最後在MainActivity中初始化(一般是在Application中初始化,這裡)
public class MainActivity extends Activity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_main); JPushInterface.setDebugMode(true);//測試用的 JPushInterface.init(this); } }
現在大功告成!
android極光推送學習