Android 推送訊息的實現,使用百度雲推送
專案中有可能會用到推送。如果自己寫一個的話,可是個耗時耗力的時,好在很多第三方公司都提供了推送服務,比如百度雲。我們可以在自己的程式中使用它。
百度雲推送
雲推送(Push)是百度開放雲向開發者提供的訊息推送服務;通過利用雲端與客戶端之間建立穩定、可靠的長連線來為開發者提供向客戶端應用推送實時訊息服務。
百度雲推送服務支援推送三種型別的訊息:通知、透傳訊息及富媒體;支援向所有使用者或根據標籤分類向特定使用者群體推送訊息;支援更多自定義功能(如自定義內容、後續行為、樣式模板等);提供使用者資訊及通知訊息統計資訊,方便開發者進行後續開發及運營。
雲推送服務具有以下特點:
1. 增強使用者粘性
通過雲和端之間建立的長連線,可以實時的推送訊息到達使用者端。保持與使用者的溝通,大大提升使用者活躍度和留存率。
2. 節約成本
在省電省流量方面遠超行業水平,基礎的訊息推送服務永久免費,大大節省開發者推送的成本。
3. 穩定安全的推送
強大的分散式叢集長期為百度各大產品線提供推送服務,保證訊息推送服務的穩定、可靠。
好吧,讓我們看看如何來使用它。
百度雲推送分兩部分:web端和手機端。
我們先看下手機端如何做。
1.註冊百度賬戶
2.加入 百度開發者
3.建立應用
4.下載sdk
5.匯入sdk包,開發應用
5.1 在AndroidManifest.xml 中註冊響應的receiver
5.2 在主窗體的oncreate中寫
5.3 編寫自己的receiver。處理 繫結的相關訊息,推送的訊息,通知欄點選後的訊息
web端需要做什麼
1.建立專案
2.下載skd,引入包 bccs-api-lib-1.0.jar
3.編寫程式碼。
上面的程式碼就能傳送一條通知到手機。支援自定義訊息標題,描述,其他自定義內容。
選用百度是個比較簡單實現的方式。截止2013-9-12,我沒有找到相關的收費資訊。本著學習的精神可以研究研究,不過應該也可以再實際專案中使用
。
百度雲推送
雲推送(Push)是百度開放雲向開發者提供的訊息推送服務;通過利用雲端與客戶端之間建立穩定、可靠的長連線來為開發者提供向客戶端應用推送實時訊息服務。
百度雲推送服務支援推送三種型別的訊息:通知、透傳訊息及富媒體;支援向所有使用者或根據標籤分類向特定使用者群體推送訊息;支援更多自定義功能(如自定義內容、後續行為、樣式模板等);提供使用者資訊及通知訊息統計資訊,方便開發者進行後續開發及運營。
雲推送服務具有以下特點:
1. 增強使用者粘性
通過雲和端之間建立的長連線,可以實時的推送訊息到達使用者端。保持與使用者的溝通,大大提升使用者活躍度和留存率。
2. 節約成本
在省電省流量方面遠超行業水平,基礎的訊息推送服務永久免費,大大節省開發者推送的成本。
3. 穩定安全的推送
強大的分散式叢集長期為百度各大產品線提供推送服務,保證訊息推送服務的穩定、可靠。
好吧,讓我們看看如何來使用它。
百度雲推送分兩部分:web端和手機端。
我們先看下手機端如何做。
1.註冊百度賬戶
2.加入 百度開發者
3.建立應用
4.下載sdk
5.匯入sdk包,開發應用
5.1 在AndroidManifest.xml 中註冊響應的receiver
5.2 在主窗體的oncreate中寫
PushManager.startWork(getApplicationContext(),
PushConstants.LOGIN_TYPE_API_KEY,
PushServiceUtils.getMetaValue(this, "api_key"));
5.3 編寫自己的receiver。處理 繫結的相關訊息,推送的訊息,通知欄點選後的訊息
public class MyPushMessageReceiver extends BroadcastReceiver {
private static final String TAG = "BroadcastReceiver";
@Override
public void onReceive(final Context context, Intent intent) {
Log.d(TAG, ">>> Receive intent: \r\n" + intent);
if (intent.getAction().equals(PushConstants.ACTION_MESSAGE)) {
// 獲取訊息內容
String message = intent.getExtras().getString(
PushConstants.EXTRA_PUSH_MESSAGE_STRING);
// 訊息的使用者自定義內容讀取方式
Log.i(TAG, "onMessage: " + message);
// 自定義內容的json串
Log.d(TAG,
"EXTRA_EXTRA = "
+ intent.getStringExtra(PushConstants.EXTRA_EXTRA));
// 使用者在此自定義處理訊息,以下程式碼為demo介面展示用
Intent responseIntent = null;
responseIntent = new Intent(PushServiceUtils.ACTION_MESSAGE);
responseIntent.putExtra(PushServiceUtils.EXTRA_MESSAGE, message);
responseIntent.setClass(context, MainActivity.class);
responseIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(responseIntent);
} else if (intent.getAction().equals(PushConstants.ACTION_RECEIVE)) {
// 處理繫結等方法的返回資料
// PushManager.startWork()的返回值通過PushConstants.METHOD_BIND得到
// 獲取方法
final String method = intent
.getStringExtra(PushConstants.EXTRA_METHOD);
// 方法返回錯誤碼。若繫結返回錯誤(非0),則應用將不能正常接收訊息。
// 繫結失敗的原因有多種,如網路原因,或access token過期。
// 請不要在出錯時進行簡單的startWork呼叫,這有可能導致死迴圈。
// 可以通過限制重試次數,或者在其他時機重新呼叫來解決。
int errorCode = intent.getIntExtra(PushConstants.EXTRA_ERROR_CODE,
PushConstants.ERROR_SUCCESS);
String content = "";
if (intent.getByteArrayExtra(PushConstants.EXTRA_CONTENT) != null) {
// 返回內容
content = new String(
intent.getByteArrayExtra(PushConstants.EXTRA_CONTENT));
}
// 使用者在此自定義處理訊息,以下程式碼為demo介面展示用
Log.d(TAG, "onMessage: method : " + method);
Log.d(TAG, "onMessage: result : " + errorCode);
Log.d(TAG, "onMessage: content : " + content);
Toast.makeText(
context,
"method : " + method + "\n result: " + errorCode
+ "\n content = " + content, Toast.LENGTH_SHORT)
.show();
Intent responseIntent = null;
responseIntent = new Intent(PushServiceUtils.ACTION_RESPONSE);
responseIntent.putExtra(PushServiceUtils.RESPONSE_METHOD, method);
responseIntent.putExtra(PushServiceUtils.RESPONSE_ERRCODE,
errorCode);
responseIntent.putExtra(PushServiceUtils.RESPONSE_CONTENT, content);
responseIntent.setClass(context, MainActivity.class);
responseIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
context.startActivity(responseIntent);
// 可選。通知使用者點選事件處理
} else if (intent.getAction().equals(
PushConstants.ACTION_RECEIVER_NOTIFICATION_CLICK)) {
Log.d(TAG, "intent=" + intent.toUri(0));
// 自定義內容的json串
String customData = intent
.getStringExtra(PushConstants.EXTRA_EXTRA);
Log.d(TAG,
"EXTRA_EXTRA = "
+ intent.getStringExtra(PushConstants.EXTRA_EXTRA));
if (customData == null || "".equals(customData)) {
return;
}
Intent aIntent = new Intent();
aIntent.addFlags(Intent.FLAG_ACTIVITY_NEW_TASK);
aIntent.setClass(
context,
com.pdwy.wulianwang.mobile.main.notification.NotificationDetails_Activity.class);
String title = intent
.getStringExtra(PushConstants.EXTRA_NOTIFICATION_TITLE);
aIntent.putExtra(PushConstants.EXTRA_NOTIFICATION_TITLE, title);
String content = intent
.getStringExtra(PushConstants.EXTRA_NOTIFICATION_CONTENT);
aIntent.putExtra(PushConstants.EXTRA_NOTIFICATION_CONTENT, content);
String detailContent = "";
try {
org.json.JSONObject json = new JSONObject(customData);
detailContent = json.getString("detailContent");
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
}
// 儲存在資料庫
NotifyDao dao = new NotifyDao();
int notifyId = dao.saveNotify(title, content, detailContent);
// 向訊息詳細頁傳送內容
aIntent.putExtra("notify_id", notifyId);
context.startActivity(aIntent);
}
}
}
web端需要做什麼
1.建立專案
2.下載skd,引入包 bccs-api-lib-1.0.jar
3.編寫程式碼。
/*
* @brief 推送單播通知(Android Push SDK攔截並解析) message_type = 1 (預設為0)
*/
// 1. 設定developer平臺的ApiKey/SecretKey
String apiKey = "xxxxxxxxxxxxxxxxxx";
String secretKey = "xxxxxxxxxxxxx";
ChannelKeyPair pair = new ChannelKeyPair(apiKey, secretKey);
// 2. 建立BaiduChannelClient物件例項
BaiduChannelClient channelClient = new BaiduChannelClient(pair);
// 3. 若要了解互動細節,請註冊YunLogHandler類
channelClient.setChannelLogHandler(new YunLogHandler() {
@Override
public void onHandle(YunLogEvent event) {
System.out.println(event.getMessage());
}
});
try {
// 4. 建立請求類物件
PushBroadcastMessageRequest request = new PushBroadcastMessageRequest();
request.setDeviceType(3); // device_type => 1: web 2: pc 3:android
// 4:ios 5:wp
// request.setMessage("Hello Channel");
// 若要通知,
request.setMessageType(1);
request.setMessage("{\"title\":\"Notify_title_danbo\",\"description\":\"Notify_description_content\"}");
//request.setMessage(notify.toString());
// 5. 呼叫pushMessage介面
PushBroadcastMessageResponse response = channelClient
.pushBroadcastMessage(request);
// 6. 認證推送成功
System.out.println("push amount : " + response.getSuccessAmount());
} catch (ChannelClientException e) {
// 處理客戶端錯誤異常
e.printStackTrace();
} catch (ChannelServerException e) {
// 處理服務端錯誤異常
System.out.println(String.format(
"request_id: %d, error_code: %d, error_message: %s",
e.getRequestId(), e.getErrorCode(), e.getErrorMsg()));
}
上面的程式碼就能傳送一條通知到手機。支援自定義訊息標題,描述,其他自定義內容。
選用百度是個比較簡單實現的方式。截止2013-9-12,我沒有找到相關的收費資訊。本著學習的精神可以研究研究,不過應該也可以再實際專案中使用
。
相關文章
- workerman 實現訊息推送
- Flutter websocket 實現訊息推送FlutterWeb
- PHP與反ajax推送,實現的訊息實時推送功能PHP
- Android之訊息推送原理Android
- Spring+Websocket實現訊息的推送SpringWeb
- iOS 訊息推送原理及實現DemoiOS
- iOS使用觀察者模式實現推送訊息模組化iOS模式
- Android 訊息推送:第三方訊息推送平臺 詳細解析Android
- 使用redis進行訊息推送Redis
- 基於 Hyperf 實現 RabbitMQ + WebSocket 訊息推送MQWeb
- PHP基於Redis訊息佇列實現的訊息推送的方法PHPRedis佇列
- 實時訊息推送方案-SSE
- Android訊息推送技術原理分析和實踐Android
- Knative 實戰:基於 Kafka 實現訊息推送Kafka
- Laravel 實現 Kafka 訊息推送與接收處理LaravelKafka
- 7種 實現web實時訊息推送的方案,7種!Web
- IOS 推送訊息 php做推送服務端iOSPHP服務端
- 基於workerman實現的web訊息推送站內信功能Web
- 訊息推送背後的思考
- 使用pushplus+python實現亞馬遜到貨訊息推送微信Python亞馬遜
- 一起來實現單使用者登入 —— 訊息推送
- WebSocket 實現伺服器訊息推送客戶端Web伺服器客戶端
- iOS APNS推送遠端訊息 java後臺實現iOSJava
- react-native 使用leanclound訊息推送React
- IOS 訊息推送處理iOS
- 訊息的即時推送——net實現、websocket實現以及socket.io實現Web
- APP訊息推送 極光推送 示例程式碼APP
- 小程式訂閱訊息推送(含原始碼)java實現小程式推送,springboo原始碼JavaSpring
- 史上最全解析Android訊息推送解決方案Android
- WebSocket實現服務端推送訊息和聊天會話Web服務端會話
- Spring 4 + Websocket + Stomp + ActimeMQ 實現訊息推送SpringWebMQ
- App如何利用推送訊息有效實現拉新促活?APP
- Android實現推送的那些事Android
- uni-app訊息推送方案APP
- mqtt訊息推送(vue前端篇)MQQTVue前端
- 玩轉釘釘訊息推送!
- iOS開發訊息推送原理iOS
- 微信開發推送訊息案例