Android JPush(極光推送)的使用教程

首先進入官網https://www.jpush.cn/,先註冊一個帳號。

註冊號之後,建立應用

一、點擊右上角進入我的中心

二、點擊建立應用java

三、在建立應用界面輸入本身項目的應用名和應用的包名,輸入後點擊建立個人應用按鈕就能夠完成建立。android

四、建立完成後就能看到如下界面,這個界面中的AppKey就是咱們等下要用的Key。該系統還幫你自動完成可一個屬於你的Demo,供你參考,能夠點擊下載Android Example 下載。api

 

這樣就完成了應用的建立,接下來就是下載SDK以便後面集成是使用。服務器

 

下載SDK,根據如下步驟進入

一、先進入官網、點擊文檔網絡

 

二、進入文檔頁面後點擊android圖標app

 

三、進入android SDK頁面,點擊Android  客戶端 SDK下載ide

 

四、在客戶端SDK下載中,點擊下載函數

 

五、下載完成後解壓,能夠獲得如下文件佈局

 

接寫來就能夠開始SDK的集成了,接下來就根據官方的文檔開始操做

一、導入 SDK 開發包到你本身的應用程序項目ui

--複製 libs/jpush-sdk-release2.x.y.jar 到工程 libs/ 目錄下

--複製 libs/armeabi(和 armeabi-v7a/arm64-v8a)/中so文件 到工程libs/下對應的CPU目錄下

--複製 res/drawable-hdpi 中的資源文件到工程的 res/drawable-hdpi/ 目錄下

--複製 res/layout 中的佈局文件到工程的 res/layout/ 目錄下

--複製 res/values 中的佈局文件到工程的 res/values/ 目錄下

2.配置 AndroidManifest.xml

根據 SDK 壓縮包裏的 AndroidManifest.xml 樣例文件,來配置應用程序項目的 AndroidManifest.xml 。

主要步驟爲:

  • 複製備註爲 "Required" 的部分
  • 將備註爲替換包名的部分,替換爲當前應用程序的包名
  • 將AppKey替換爲在Portal上註冊該應用的的Key,例如(9fed5bcb7b9b87413678c407)

Eclipse中AndroidManifest 示例(黃色爲配置權限 紅色字爲注意點 綠色爲自定義Receiver接收自定義消息的  後面會講到  可不寫)

 

AndroidManifest.xml權限配置:
<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="您應用的包名"
    android:versionCode="100"
    android:versionName="1.0.0"
    >
    <uses-sdk android:minSdkVersion="11" android:targetSdkVersion="17" />

    <!-- 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" />

應用包名及appkey替換:    
    <application
        android:icon="@drawable/ic_launcher"
        android:label="@string/app_name" android:name="你的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="你的k值"/> 
    </application>
</manifest>

建立 一個類繼承Application

public class ExampleApplication extends Application {
@Override
        public void onCreate() {
            super.onCreate();
    JPushInterface.setDebugMode(true);
    JPushInterface.init(this);
    }
}

這樣就完成了,去官網推送一天消息試試

 

在我的中心中,選擇推送--》發送通知--》輸入推送內容--》當即發送

要是在手機上收到推送的消息,就說明推送成功了!!!

上面爲最簡單的 下面開始講講其餘功能

1.固定推送

activity_main.xml

<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    tools:context=".MainActivity" >

    <EditText
        android:id="@+id/editText"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_alignParentTop="true"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="20dp"
        android:ems="10" >
    </EditText>

    <Button
        android:id="@+id/button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_below="@+id/editText"
        android:layout_centerHorizontal="true"
        android:layout_marginTop="21dp"
        android:text="設置類別" />

</RelativeLayout>

MainActivity.java

package com.bwie.test;

import cn.jpush.android.api.JPushInterface;
import android.os.Bundle;
import android.app.Activity;
import android.view.Menu;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

public class MainActivity extends Activity {

    private EditText editText;
    private Button button;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        editText = (EditText) findViewById(R.id.editText);
        button = (Button) findViewById(R.id.button);
        button.setOnClickListener(new OnClickListener() {
            
            @Override
            public void onClick(View v) {
                // TODO Auto-generated method stub
                //向服務器修改本身的類別
                JPushInterface.setAlias(MainActivity.this, editText.getText().toString(), null);
                
                Toast.makeText(MainActivity.this, "success", 0).show();
                
            }
        });
    }


}

好了  試試點擊設備別名  輸入本身的設備名就能夠固定推送了

2.自定義消息 會用到Receiver 別忘了上面綠色的

MyReceiver.java

package com.bwie.test;

import cn.jpush.android.api.JPushInterface;
import android.content.BroadcastReceiver;
import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.widget.Toast;

public class MyReceiver extends BroadcastReceiver{

    @Override
    public void onReceive(Context context, Intent intent) {
        // TODO Auto-generated method stub
        //判斷borad接受的類型
        if(intent.getAction().equals(JPushInterface.ACTION_MESSAGE_RECEIVED)){
            //得到message的內容
            Bundle bundle=intent.getExtras();
            String title = bundle.getString(JPushInterface.EXTRA_TITLE);
            String message = bundle.getString(JPushInterface.EXTRA_MESSAGE);
            //吐司自定義內容
            Toast.makeText(context, "message title"+title+"content:"+message, 1).show();
        }
    }

}

好了  試試

能吐司就對了

 

 

 

 

 

AndroidStudio中AndroidManifest 示例

<?xml version="1.0" encoding="utf-8"?
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
     package="您應用的包名" 
     android:versionCode="205"
     android:versionName="2.0.5"
     >
     <uses-sdk android:minSdkVersion="11" android:targetSdkVersion="17" />
     <!-- Required 自定義用來收發消息的相關權限 -->
     <permission
         android:name="${applicationId}.permission.JPUSH_MESSAGE"
         android:protectionLevel="signature" />

     <!-- Required 一些系統要求的權限,如訪問網絡等-->
     <uses-permission android:name="${applicationId}.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" /> 


     <!-- Optional for location -->
     <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
     <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">


         <!-- Required SDK核心功能-->
         <activity
             android:name="cn.jpush.android.ui.PushActivity"
             android:configChanges="orientation|keyboardHidden" 
             android:theme="@android:style/Theme.NoTitleBar" 
             android:exported="false">
             <intent-filter>
                 <action android:name="cn.jpush.android.ui.PushActivity" />
                 <category android:name="android.intent.category.DEFAULT" />
                 <category android:name="${applicationId}" />
             </intent-filter>
         </activity>

         <!-- Required SDK核心功能-->
         <service
             android:name="cn.jpush.android.service.DownloadService"
             android:enabled="true"
             android:exported="false" >
         </service>

         <!-- 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>

         <!-- Required SDK 核心功能 since 1.8.0 -->
         <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="${applicationId}"/>
             </intent-filter>
         </service>

         <!-- 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="${applicationId}" />
             </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" />

         <!-- User defined. 用戶自定義的廣播接收器-->
         <receiver
             android:name="您本身定義的Receiver"
             android:enabled="true">
             <intent-filter>
                 <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 用戶接收SDK通知欄信息的intent-->
                 <action android:name="cn.jpush.android.intent.NOTIFICATION_OPENED" /> <!--Required 用戶打開自定義通知欄的intent-->
                 <action android:name="cn.jpush.android.intent.ACTION_RICHPUSH_CALLBACK" /> <!--Optional 用戶接受Rich Push Javascript 回調函數的intent-->
                 <action android:name="cn.jpush.android.intent.CONNECTION" /><!-- 接收網絡變化 鏈接/斷開 since 1.6.3 -->
                 <category android:name="${applicationId}" />
             </intent-filter>
         </receiver>

         <!-- Required . Enable it you can get statistics data with channel -->
         <meta-data android:name="JPUSH_CHANNEL" android:value="developer-default"/>
         <meta-data android:name="JPUSH_APPKEY" android:value="您應用applicationId對應的appKey" /> <!-- </>值來自開發者平臺取得的AppKey-->
     </application>
</manifest> 
相關文章
相關標籤/搜索