Android集成極光推送Jpush小記


先介紹下極光推送吧,想要實現推送功能,現在市場上主要的實現方式是維持一個長連接,服務端隨時發出一條通知或者一條自定義消息時,用戶可以實時的接受到該消息並進行相應處理。

極光推送(JPush)也不例外,就是這樣一個端到端的推送服務,使得服務器端消息能夠及時地推送到終端用戶手機上,讓開發者積極地保持與用戶的連接,從而提高用戶活躍度、提高應用的留存率。極光推送客戶端支持 Android, iOS 兩個平台。

本 Android SDK 方便開發者基於 JPush 來快捷地為 Android App 增加推送功能。

Android應用集成Jpush流程:

第一步肯定是注冊一個極光推送的賬號,之后添加應用,需要填寫包名等相關信息,添加之后如圖:

極光推送應用詳情頁面會展示應用的具體信息,其中包名是我們注冊應用時填寫的,而我們主要用到的就是AppKey這個屬性,稍候我會提到。

完成了應用的注冊,接下來就是集成流程:

SDK集成步驟

導入 SDK 開發包到你自己的應用程序項目

  • 解壓縮 jpush-sdk_v1.x.y.zip 集成壓縮包
  • 復制 libs/jpush-sdk-release1.x.y.jar 到工程 libs/ 目錄下
  • 復制 libs/armeabi/libjpush1xy.so 到工程 libs/armeabi 目錄下
  • 復制 libs/armeabi-v7a/libjpush.so 到工程 libs/armeabi-v7a 目錄下

如果您的項目有 libs/armeabi-v7a 這個目錄,請把 libs/armeabi-v7a下的so文件 也復制一份到這個目錄。

  • 復制 res/drawable-hdpi 中的資源文件到工程的 res/drawable-hdpi/ 目錄下
  • 復制 res/layout 中的布局文件到工程的 res/layout/ 目錄下

說明 1:若沒有drawable-xxxx/jpush_notification_icon這個資源默認使用應用圖標作為通知icon,在5.0以上系統將應用圖標作為statusbar icon可能顯示不正常,用戶可定義純色icon替換這個文件,文件名不要變。

說明 2:如果要在gradle中配置 shrinkResources true 用來清理多余資源,請在res/raw/ 中添加一個keep.xml來描述保留JPushSDK中的必要資源。示例請參考版本包中的 res/raw/keep.xml文件。(2.1.5版本以上)

 ps:這幾行是從Jpush文檔上抄的,寫的很仔細,照着做就好

配置 AndroidManifest.xml

<permission
    android:name="com.dxf.org.webview.permission.JPUSH_MESSAGE"
    android:protectionLevel="signature" />
這行權限是為了給應用添加接受自定義消息,如果有接受自定義消息的需求的話,一定要添加
<uses-permission android:name="com.dxf.org.webview.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.WRITE_SETTINGS" />
<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.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW"/> 
上述這些權限是為應用添加Jpush所需的權限,都添加上即可
接下來這些是很重要的,屬於JpushSDK中的主體部分,因為Jpush的實現方式就是注冊一個廣播來接受長連接中返回的數據,下面是廣播的生命和部分配置
<!-- Required SDK核心功能 -->
<receiver
    android:name="cn.jpush.android.service.PushReceiver"
    android:enabled="true"
    android:exported="false">
    <intent-filter android:priority="1000">
        <action android:name="cn.jpush.android.intent.NOTIFICATION_RECEIVED_PROXY"/>
        <!-- Required  顯示通知欄 -->
        <category android:name="org.yuwei.education"/>
    </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核心功能 -->
<receiver
    android:name="cn.jpush.android.service.AlarmReceiver"
    android:exported="false"/>
然后是添加AppKey,下面列出的是我的JpushDemo的Appkey,替換成對應的即可,這也是不可缺少的部分
<meta-data
    android:name="JPUSH_APPKEY"
    android:value="3803be4c4fc5641e851f80c2"/>
至此,應用的清單文件就配置完成了,接下來是應用中的配置了
首先要在應用的Application文件中對Jpush進行初始化
JPushInterface.setDebugMode(true);  // 設置開啟日志,發布時請關閉日志
JPushInterface.init(this);            // 初始化 JPush
添加Jpush中的Receiver類,在該類中的onReceive()方法中處理對應的消息,處理注釋已經添加了
@Override
   public void onReceive(Context context, Intent intent) {
        Bundle bundle = intent.getExtras();
      Log.d(TAG, "[MyReceiver] onReceive - " + intent.getAction() + ", extras: " + printBundle(bundle));
      
        if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) {
            String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID);
            Log.d(TAG, "[MyReceiver] 接收Registration Id : " + regId);
            //send the Registration Id to your server...
                        
        } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) {
           Log.d(TAG, "[MyReceiver] 接收到推送下來的自定義消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE));
           processCustomMessage(context, bundle);
        
        } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) {
            Log.d(TAG, "[MyReceiver] 接收到推送下來的通知");
            int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID);
            Log.d(TAG, "[MyReceiver] 接收到推送下來的通知的ID: " + notifactionId);
           
        } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) {
            Log.d(TAG, "[MyReceiver] 用戶點擊打開了通知");
            
           //打開自定義的Activity
           Intent i = new Intent(context, TestActivity.class);
           i.putExtras(bundle);
           //i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
           i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP );
           context.startActivity(i);
           
        } else if (JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent.getAction())) {
            Log.d(TAG, "[MyReceiver] 用戶收到到RICH PUSH CALLBACK: " + bundle.getString(JPushInterface.EXTRA_EXTRA));
            //在這里根據 JPushInterface.EXTRA_EXTRA 的內容處理代碼,比如打開新的Activity, 打開一個網頁等..
           
        } else if(JPushInterface.ACTION_CONNECTION_CHANGE.equals(intent.getAction())) {
           boolean connected = intent.getBooleanExtra(JPushInterface.EXTRA_CONNECTION_CHANGE, false);
           Log.w(TAG, "[MyReceiver]" + intent.getAction() +" connected state change to "+connected);
        } else {
           Log.d(TAG, "[MyReceiver] Unhandled intent - " + intent.getAction());
        }
   }

 



 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM