Android用戶端與PHP服務端通訊(四)---極光推送樣本工程分析
概述
上一節,描述了註冊極光推送並使用其例子的方法,這一節準備研究一下樣本工程的架構,為移植它做準備。
分析常式源碼
首先分析一下常式的源碼結構,建議對照著JPUSH的官方文檔(http://docs.jpush.io/)分析,我就是這樣做的。
註冊應用後,下載的樣本工程結構如下,
ExampleApplication.java:該類為應用程式定製了一個Application類,因為調用JPush的SDK時,需要調用JPush提供的init()函數API,而按照官方文檔的說明“init 只需要在應用程式啟動時調用一次該API即可”,故而定製了一個Application類,如果你在MainActivity中調用init(),可能會造成init()的多次調用。當然,定義的該ExampleApplication類需要在 AndoridManifest.xml 裡配置。
ExampleUtil.java:顧名思義,“Util”表示的就是一些全域的方法或者屬性,在這個類裡定義了一些靜態函數,比如擷取IME碼、擷取APPKEY等。
MainActivity.java:這個都知道,就是應用的主介面了。
MyReceiver.java:這個繼承了BroadcastReceiver,是一個自訂接收器繼承類。如果不定義這個類,使用者點擊推播通知後預設跳轉到主介面,也接收不到自訂訊息。這個類需要同樣需要在AndoridManifest.xml 裡配置,如。
PushSetActivity.java:這個類主要對JPush進行“進階選項”設定,比如設定Tag和Alias、定製通知欄樣式。
SettingActivity.java:這個類也是對JPush進行設定,主要是設定接收push時間。
TestActivity.java:這個類繼承Activity,主要是用來顯示使用者接收到的推送訊息,當使用者點擊通知欄的推送訊息後,會跳轉到這個Activity。
下面再來分析一下AndoridManifest.xml,為內容完整
2行:指定Android的命名空間
3行:指定標準的應用程式套件名,也是一個應用程式的預設名稱。這裡的包名可能會有人將其與src檔案夾下的com.example.jpushdemo包比較從而混淆。其實專業開發android的比我知道,一個src可以包含多個自訂包,這個com.example.jpush包只是對包含了對JPush的一些叫用作業,日後你如果對JPush比較熟悉了,完全可以將對JPush的操作進行抽離,封裝在一個自訂的包裡。
4行:裝置應用程式版本識別碼,必須是一個整數值,代表app更新過多少次,我們修改到自己的時候可以自訂。
5行:為使用者查看版本用,需要具備一定的可讀性。
7行:指定應用程式中需要使用的SDK版本,比如最低版本,最高版本和目標版本。
8-10行:自訂使用者權限。注意其中的android:name="com.lygk.lovelife.permission.JPUSH_MESSAGE",如果你的操作JPush的包名是com.test.jpushdemo ,那麼這裡就是android:name="com.test.jpushdemo.JPUSH_MESSAGE",其實這樣說也不是對的,只是一個命名而已,只要保證在其他引用這個許可權的地方使用的名字和這個一致就可以了,比如13行就聲明了這個自訂許可權。
13-33行:應用程式所需要的許可權的聲明,這些可以從官方文檔中尋找到。
34-139行:應用程式的配置根項目,包含所有與應用有關配置的元素。
35行:應用表徵圖
36行:應用程式名稱
37行:這個就是咱們自己定義的Applicatioin類的名字,也就是應用啟動的是com.example.jpushdemo包下的ExampleApplication。
40-47行:Activity活動組件(即介面控制器組件)聲明,對應MainActivity.java。注意Android應用中的每一個Activity都必須在AndoridManifest.xml設定檔中聲明,否則系統不識別也不執行該Activity。
49行:Activity活動組件聲明,對應PushSetActivity.java
51行:Activity活動組件聲明,對應SettingActivity.java
53-58行:Activity活動組件聲明,對應TestActivity.java
62-71行:Activity活動組件聲明,對應JPush SDK包中定義的PushActivity.java,我充分懷疑這個就是手機接收到推送訊息時顯示在通知欄的那個Activity。
73-77行:Service服務元件的聲明標籤,用於定義與描述一個具體的Android服務。其中android:name表示Service服務類名,android:enabled表示服務開關,android:exported指示該服務是否能夠被其他應用程式組件調用或跟它互動。
81-92行:JPush SDK包定義的PushService服務的聲明。
95-113行:Boardcast Receiver廣播接收器組件的聲明,用於定義與描述一個具體的Android廣播接收器。android:name表示Boardcast Receiver接收器類名,android:enabled表示接收器開關。注意其中的用於Intent訊息過濾器的聲明。中必須包含有元素,即用於描述具體訊息的名稱;標籤則用於表示能處理訊息組件的類別,即該Action所符合的類別。
115行:Boardcast Receiver廣播接收器組件的聲明,這裡是AlarmReceiver。
119-132行:Boardcast Receiver廣播接收器組件的聲明,這裡是MyReceiver自訂廣播接收器,對應的是源碼包的MyReceiver.java。
136行:標籤JPUSH_CHANNEL聲明,用於儲存預定義資料,和類似,也可以放在、、和這四個元素標籤中。Meta資料一般會以鍵值對的形式出現,個數沒有限制,而這些資料都將被放到一個Bundle對象中,程式中我們則可以使用ActivityInfo、ServiceInfo甚至ApplicationInfo對象的metaData屬性中讀取。
137行:標籤JPUSH_APPKEY聲明,這個是你在極光推送官網建立應用時系統分配的AppKey,如紅線框出所示。
結尾
上面對在極光推送官網上建立應用時自動產生的範例程式碼的架構進行了分析,經過這麼分析,我總體上知道該怎麼去移植到自己的應用中了,下一節我準備修改移植到自己的Demo程式上。
/****************************************************************************************************
*原創文章,轉載請註明網址:http://blog.csdn.net/mybelief321/article/details/45458863
*魯陽高科工作室
*網 址:www.bigbearking.com
*商務合作QQ:1519190237
*業 務 範 圍:網站建設、案頭軟體開發、Android\IOS開發、映像影視後期處理、PCB設計
****************************************************************************************************/