標籤:
1.到極光推送官網註冊使用者。
2.建立一個應用根據包名申請app key,注意一個包名對應一個appkey,如果不對應則不能實現功能。
3.下載官網上的SDK,內附指南。
4.首先是各種粘貼複製,注意別漏掉
5.然後是配置Manifest.xml檔案
1)一開始第一條permission被我忘了
2)除了標註著required的部分還要把MyReceiver的部分也複製過來
3)注意該修改包名的地方和最後的appkey,不過官網提供的example裡已經是改好的了可以直接用
<permission android:name="com.zhangkong.module.permission.JPUSH_MESSAGE" android:protectionLevel="signature" /> <!-- Required 一些系統要求的許可權,如訪問網路等--> <uses-permission android:name="com.zhangkong.module.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"/> <!-- 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:allowBackup="true" android:icon="@drawable/ic_launcher" android:label="@string/app_name" android:theme="@style/AppTheme" android:name="com.zhangkong.module.MyApplication"> <activity android:name=".MainActivity" android:label="@string/app_name" > <intent-filter> <action android:name="android.intent.action.MAIN" /> <category android:name="android.intent.category.LAUNCHER" /> </intent-filter> </activity> <activity android:name=".Interface1" android:label="@string/app_name" > </activity> <activity android:name=".Interface3" android:label="@string/app_name" > </activity> <!-- Rich push 核心功能 since 2.0.6--> <activity android:name="cn.jpush.android.ui.PopWinActivity" android:theme="@style/MyDialogStyle" android:exported="false"> </activity> <!-- 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="com.zhangkong.module" /> </intent-filter> </activity> <!-- Required SDK核心功能--> <service android:name="cn.jpush.android.service.DownloadService" android:enabled="true" android:exported="false" > </service> <!-- Required SDK 核心功能--> <!-- 可配置android:process參數將PushService放在其他進程中 --> <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="com.zhangkong.module" /> </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="com.zhangkong.module" /> </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"/> <!-- User defined. For test only 使用者自訂的廣播接收器--> <receiver android:name="com.zhangkong.module.MyReceiver" android:exported="false" android:enabled="true"> <intent-filter> <action android:name="cn.jpush.android.intent.REGISTRATION" /> <!--Required 使用者註冊SDK的intent--> <action android:name="cn.jpush.android.intent.UNREGISTRATION" /> <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="com.zhangkong.module" /> </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="ea3709c8dac9957b7aa36ba1" /> <!-- </>值來自開發人員平台取得的AppKey--> </application>
6.需要複製過來三個類
7.其他兩個都不需要改動,關鍵的在MyReceiver類裡,和在自己的MainActivity裡添加相應的代碼
//send msg to MainActivityprivate void processCustomMessage(Context context, Bundle bundle) {if (MainActivity.isForeground) {String message = bundle.getString(JPushInterface.EXTRA_MESSAGE);String extras = bundle.getString(JPushInterface.EXTRA_EXTRA);Intent msgIntent = new Intent(MainActivity.MESSAGE_RECEIVED_ACTION);//這個activity也要改msgIntent.putExtra(MainActivity.KEY_MESSAGE, message);//注意這個activity要改成自己的主介面,需要自己定義if (!ExampleUtil.isEmpty(extras)) {try {JSONObject extraJson = new JSONObject(extras);if (null != extraJson && extraJson.length() > 0) {msgIntent.putExtra(MainActivity.KEY_EXTRAS, extras);//這裡同理}} catch (JSONException e) {}}context.sendBroadcast(msgIntent);}}8.在自己的MainActivity中添加代碼,可以直接從example的MainActivity中複製過來,紅色的部分是我自己加上的,不加總是收不到推送,從網上看到一個例子說需要加上。
public class MainActivity extends Activity {private Button button1;private Button
public static boolean isForeground = false;private EditText msgText;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);setContentView(R.layout.activity_main);JPushInterface.init(this);registerMessageReceiver(); // used for receive msginit();button1 = (Button) this.findViewById(R.id.button1);button3 = (Button) this.findViewById(R.id.button3);button1.setOnClickListener(new OnClickListener() {public void onClick(View v) {Intent intent = new Intent(MainActivity.this, Interface1.class);startActivity(intent);}});button3.setOnClickListener(new OnClickListener() {public void onClick(View v) {Intent intent = new Intent(MainActivity.this, Interface3.class);startActivity(intent);}});}private void init() {JPushInterface.init(getApplicationContext());}@Overrideprotected void onResume() {isForeground = true;super.onResume();JPushInterface.onResume(this);//這句是自己加上的}@Overrideprotected void onPause() {isForeground = false;super.onPause();JPushInterface.onPause(this);}@Overrideprotected void onDestroy() {unregisterReceiver(mMessageReceiver);super.onDestroy();}public static final String KEY_TITLE = "title";public static final String KEY_MESSAGE = "message";public static final String KEY_EXTRAS = "extras";private MessageReceiver mMessageReceiver;public static final String MESSAGE_RECEIVED_ACTION = "com.zhangkong.module.MESSAGE_RECEIVED_ACTION";//記得修改包名public void registerMessageReceiver() {mMessageReceiver = new MessageReceiver();IntentFilter filter = new IntentFilter();filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);filter.addAction(MESSAGE_RECEIVED_ACTION);registerReceiver(mMessageReceiver, filter);}public class MessageReceiver extends BroadcastReceiver {@Overridepublic void onReceive(Context context, Intent intent) {if (MESSAGE_RECEIVED_ACTION.equals(intent.getAction())) {String messge = intent.getStringExtra(KEY_MESSAGE);String extras = intent.getStringExtra(KEY_EXTRAS);StringBuilder showMsg = new StringBuilder();showMsg.append(KEY_MESSAGE + " : " + messge + "\n");if (!ExampleUtil.isEmpty(extras)) {showMsg.append(KEY_EXTRAS + " : " + extras + "\n");} setCostomMsg(showMsg.toString());}}}private void setCostomMsg(String msg){ if (null != msgText) { msgText.setText(msg); msgText.setVisibility(android.view.View.VISIBLE); }}}9.然後就全部OK了,到官網推送個訊息試。點擊訊息後有一個預設顯示的介面,不知道為什麼和我預設的不對,下次再看看,解決後再寫吧!
安卓整合極光推送SDK基礎服務