到www.zypush.com申請appkeyandroid
將zhiyou_push.**.jar,liblptcpjin.so庫以及push_notification.xml,push_download.xml文件導入到工程內部數組
<注意:在配置過程當中有些地方須要用到包名以及appkey>網絡
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 |
代碼塊<!-- push service(必要) --><service android:name=」com.joboevan.push.service.PushService」></service><!--應用包名.PushReceiver 定義推送消息接收器,PushReceiver在SDK中有這個類--> <!-- <receiver android:name="YOUR_PACKAGENAME.PushReceiver" > --><!--com.zypush.activity 這是我本身的包名--> <receiver android:name=」com.zypush.activity.PushRecevier」> <intent-filter> <!-- <action android:name=」com.zypush.android.intent.message.申請的appkey」/> --> <!--用戶接收消息的action--> <action android:name=」com.zypush.android.intent.message.f262516bedf4c0f567b5659840920f94」/> <!--用戶打開通知欄的action--> <action android:name=」com.zypush.android.intent.NOTIFICATION_OPENED.f262516bedf4c0f567b5659840920f94」/> <!-- 須要上傳經緯度的action --> <action android:name=」com.zypush.android.intent.LBS_PUSH.f262516bedf4c0f567b5659840920f94」/> </intent-filter></receiver><!--- 心跳廣播接收器註冊(必要) --><receiver android:name="com.joboevan.push.receiver.CheckConnectRecevier" android:enabled="true" /><!-- 網絡改變廣播監聽 (必要)--> <receiver android:name="com.joboevan.push.receiver.NetworkReceiver" > <intent-filter > <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver><!-- android:authorities="packagename"此處填寫包名 (必要)--> <provider android:authorities="com.zypush.activity" android:name="com.joboevan.push.providers.downloads.DownloadProvider" /><!-- 富媒體下載服務 (必要)--> <service android:name="com.joboevan.push.providers.downloads.DownloadService" /><!-- 富媒體下載接收器 (必要)--> <receiver android:exported="false" android:name="com.joboevan.push.providers.downloads.DownloadReceiver" > <intent-filter > <action android:name="android.net.conn.CONNECTIVITY_CHANGE" /> </intent-filter> </receiver><!-- 配置的第三方參數屬性 測試帳號:zypush 密碼:123456 --> <!-- http://www.zypush.com --> <meta-data android:name="ZYPUSH_APPKEY" android:value="f262516bedf4c0f567b5659840920f94" /> |
推送服務運行所須要的權限app
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 |
代碼塊 <!--自定義權限--> <permission android:name="com.zypush.permission.ACCESS_DOWNLOAD_MANAGER" /> <!-- 網絡權限 --> <uses-permission android:name="android.permission.INTERNET" /> <!-- 網絡狀態權限 --> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <!-- 往sdcard中寫入數據的權限 --> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <!-- 獲取手機設備號權限 --> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <!-- 手機震動權限 --> <uses-permission android:name="android.permission.VIBRATE" /> <!-- 引用富媒體自定義權限 --> <uses-permission android:name="com.zypush.permission.ACCESS_DOWNLOAD_MANAGER" /> <!-- 喚醒權限 --> <uses-permission android:name="android.permission.WAKE_LOCK" /> <!-- 獲取當前任務權限 --> <uses-permission android:name="android.permission.GET_TASKS" /> <!-- 懸浮窗體權限--> <uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" /> <!-- 保留權限,後續添加功能須要用到 --> <!-- network網絡開關權限(可選權限) --> <uses-permission android:name="android.permission.CHANGE_NETWORK_STATE" /> <!-- 獲取基站須要的權限 (可選權限)--> <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/> |
4.1啓動推送服務
函數原型tcp
1 2 |
代碼塊PushManager.getInstance().connect(Context context,boolean isReconnect) |
參數
context: Context對象
isReconnect: 設置是否自動重連,true:表示斷線之後自動重連,false標示斷線之後不會自動重連ide
返回值
true:開啓推送的條件都知足
false:條件不知足開啓推送函數
示例測試
1 2 |
代碼塊boolean result = PushManager.getInstance().connect(getApplicationContext(),true); |
4.2設置別名this
須要注意的是:這個接口是覆蓋邏輯,而不是增量邏輯。即新的調用會覆蓋以前的設置。google
一個用戶只能夠設置一個別名,至關於一我的的名字,爲了確保其惟一性,通常是用用戶名設置別名,推送能夠根據別名進行推送到我的客戶端。設置別名超時時間爲15秒,別名的最大長度不得超過40個字節,能夠在PushReceiver中接收設置別名返回給客戶端的返回值
1 2 |
代碼塊PushManager.getInstance().bindAlias(Context context, String alias) |
參數
context: Context對象
alias:設置的別名
返回值
無
示例
1 2 |
代碼塊PushManager.getInstance().bindAlias(this, 「別名」); |
4.3設置標籤
須要注意的是:這個接口是覆蓋邏輯,而不是增量邏輯。即新的調用會覆蓋以前的設置。
標籤的功能能夠將一個總體劃分紅不一樣的羣體,好比說將全部的用戶劃分紅「男」用戶和「女」用戶,那麼就能夠給用戶設置標籤「男」或「女」。一個用戶能夠設置多個標籤,多個標籤的關係是或的關係。設置標籤超時時間爲15秒,單個標籤的最大長度不得超過40個字節,而且不能爲空,一個客戶端最多能夠設置100個標籤。
函數原型
1 2 |
代碼塊PushManager.getInstance().setTags(Context context , List<String> tags) |
參數
context: Context對象
tags: 設置標籤的List數組
返回值
無
示例
1 2 |
代碼塊PushManager.getInstance().setTags(this,tags); |
4.4設置通知欄圖標
設置頂層通知欄圖標
函數原型
1 2 |
代碼塊PushManager.getInstance().setNotificationIcon(Context context ,int value); |
參數
context: Context對象
value: 通知欄圖標的資源id
返回值
無
示例
1 2 |
代碼塊PushManager.getInstance().setNotificationIcon(this , R.drawable.icon); |
4.5設置是否開啓智能提醒
是否開啓智能提醒。
函數原型
1 2 |
代碼塊PushManager.getInstance(). isOpenRemind(Context context , boolean state , String content , int days , int startTime , int endTime) ; |
參數
context: Context對象
state : 設置是否開啓智能提醒,true:表示開啓智能提醒,false表示暫停智能提醒
content:設置提醒內容
days:相隔幾天以後沒有打開應用,進行提醒
startTime:在startTime以後進行提醒0-23
endTime:在endTime以前進行提醒0-23
返回值
true:開啓智能提醒成功
false:開啓智能提醒失敗
示例
1 2 |
代碼塊boolean result = PushManager.getInstance().isOpenRemind(this, true, "這是一個智能提醒", 3, 0, 23) ; |
想要看更多的API說明,能夠到www.zypush.com
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 142 143 144 145 146 147 148 149 150 151 152 153 154 155 156 157 158 159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 185 186 187 188 189 190 191 192 |
代碼塊package com.zypush.activity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.os.Bundle;import android.util.Log;import com.joboevan.push.bean.SendBroastBean;import com.joboevan.push.tool.Consts;import com.joboevan.push.tool.LBS;import com.joboevan.push.tool.Tool;/** * 推送消息接收器 * * **/public class PushReceiver extends BroadcastReceiver { @Override public void onReceive(Context context, Intent intent) { // TODO Auto-generated method stub String action = intent.getAction(); if (Consts.getACTION_RECEIVER_KEY(context).equals(action)) { Bundle bundle = intent.getExtras(); String key = bundle.getString("key"); if (Consts.MESSAGE_KEY_CONNECT.equals(key)) { // 鏈接結果 int value = bundle.getInt("value"); switch (value) { case Consts.RESULT_Y: Log.d("Log", "鏈接成功"); break; case Consts.RESULT_N: Log.d("Log", "鏈接失敗"); break; } } else if (Consts.MESSAGE_KEY_LOGIN.equals(key)) { // 登錄結果 int value = bundle.getInt("value"); switch (value) { case Consts.RESULT_Y: Log.d("Log", "登錄成功"); break; case Consts.RESULT_N: Log.d("Log", "登錄失敗"); break; } } else if (Consts.MESSAGE_KEY_SETALIAS.equals(key)) { int value = bundle.getInt("value"); switch (value) { case Consts.RESULT_Y: Log.d("Log", "別名設置成功"); break; case Consts.RESULT_N: Log.d("Log", "別名設置失敗"); break; case Consts.RESULT_I: Log.d("Log", "正在設置別名"); break; default: break; } } else if (Consts.MESSAGE_KEY_CLEANALIAS.equals(key)) { int value = bundle.getInt("value"); switch (value) { case Consts.RESULT_Y: Log.d("Log", "清除別名成功"); break; case Consts.RESULT_N: Log.d("Log", "清除別名失敗"); break; case Consts.RESULT_I: Log.d("Log", "正在清除別名"); break; default: break; } } else if (Consts.MESSAGE_KEY_SETTAGS.equals(key)) { int value = bundle.getInt("value"); switch (value) { case Consts.RESULT_Y: Log.d("Log", "標籤設置成功"); break; case Consts.RESULT_N: Log.d("Log", "標籤設置失敗"); break; case Consts.RESULT_I: Log.d("Log", "正在設置標籤"); break; default: break; } } else if (Consts.MESSAGE_KEY_CLEANTAGS.equals(key)) { int value = bundle.getInt("value"); switch (value) { case Consts.RESULT_Y: Log.d("Log", "標籤清除成功"); break; case Consts.RESULT_N: Log.d("Log", "標籤清除失敗"); break; case Consts.RESULT_I: Log.d("Log", "正在清除標籤"); break; default: break; } } else if (Consts.MESSAGE_KEY_CUSTOM.equals(key)) { // 接收自定義推送信息 String value = bundle.getString("value"); String flag = bundle.getString(Consts.MESSAGE_BACK_FLAG); Log.w("Log", "推送自定義消息: " + value); Log.w("Log", "推送自定義消息id: " + flag); //這個方法是推送內部封裝生成通知的方法 CustomNotification notification = new CustomNotification(); notification.createNotification(context); } else if (Consts.MESSAGE_KEY_NOTIFICATION.equals(key)) { // 如需在工程中展現通知標題和內容,請設置是否展現通知內容 String title = bundle.getString(Consts.NOTIFICATION_TITLE); String content = bundle.getString(Consts.NOTIFICATION_CONTENT); String ext = bundle.getString(Consts.NOTIFICATION_EXT); String flag = bundle.getString(Consts.MESSAGE_BACK_FLAG); Log.d("Log", "通知標題:" + title); Log.d("Log", "通知內容:" + content); Log.d("Log", "通知附加字段:" + ext); Log.d("Log", "通知消息id:" + flag); } else if (Consts.MESSAGE_KEY_PUSHSTATECHANGED.equals(key)) { // 客戶端與服務端的狀態 int value = bundle.getInt("value"); switch (value) { case Consts.PUSH_CONNECTSTATE_CONNECTING: // 通道鏈接 Log.d("Log", "推送服務已經鏈接"); break; case Consts.PUSH_CONNECTSTATE_DISCONNECT: // 通道斷開 Log.e("Log", "推送服務已經斷開"); break; } } else if (Consts.ACTION_RECEIVER_VERSION.equals(key)) { int value = bundle.getInt("value"); switch (value) { case Consts.VERSION_LATEST: Log.d("Log","推送版本是最新版本:可用"); break; case Consts.VERSION_OLD_PERMIT: Log.d("Log","推送版本是老版本:可用"); break; case Consts.VERSION_OLD_REFUSE: Log.e("Log","推送版本是老版本:不可用"); break; default: break; } } else if (Consts.CLIENT_DEVICE_ID.equals(key)) { String device_id = bundle.getString("value"); Log.d("Log", "設備惟一標識:" + device_id); } } else if (Consts.getActionNotificationOpened(context).equals(action)) { Log.d("Log", "用戶點擊了通知"); Bundle bundle = intent.getExtras() ; //通知標題 String title = bundle.getString(Consts.NOTIFICATION_TITLE); //通知內容 String content = bundle.getString(Consts.NOTIFICATION_CONTENT); //通知附加字段 String ext = bundle.getString(Consts.NOTIFICATION_EXT); //通知消息flag String flag = bundle.getString(Consts.MESSAGE_BACK_FLAG); Intent i = new Intent(context, TestActivity.class); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(i); } else if (Consts.getActionLbsPush(context).equals(action)) { // 接收到廣播,須要上傳經緯度 Log.d("Log", "須要上傳經緯度信息"); // 請調用上傳經緯度的接口,此處是寫的固定的百度經緯度 // 參數分別爲context對象,經度,緯度,類型(須要經過枚舉類獲取,分爲GPS,百度,google三種經緯度類型) String method = LBS.BAIDU.method(); // 獲取經緯度類型 PushMethodImpl.getInstance().UploadGpsMessage(context,"0", "0", method); } }} |