推送集成
1. 環境搭建
集成廠商 Push 首先須要配置平臺環境,官網介紹足夠清晰,其中須要注意的是生成簽名證書指紋,官網採用 Windows 環境下生成配置 SHA256,Mac 環境下亦是如此;java
生成打包須要的 key 文件;android
【終端】-> keytool -list -v -keystore 便可;web
將獲取的 SHA256 配置在相應位置便可;json
2. 獲取 Token
Push Token 在每臺設備每一個應用都是惟一存在的,但也並不是一直不變,在以下狀況下可能會變動,因此和尚建議每次使用最新的 Token 進行處理;微信
在 EMUI10.0 及以上版本的華爲設備上,getToken 接口直接獲取 Token,低於該版本時經過 onNewToken 獲取 Token,注意 getToken 方法中傳遞的 Context 必須爲 Activity;app
private void getToken() {
new Thread() {
@Override
public void run() {
try {
String appId = AGConnectServicesConfig.fromContext(FloatWindowActivity.this).getString("client/app_id");
pushtoken = HmsInstanceId.getInstance(FloatWindowActivity.this).getToken(appId, "HCM");
if (!TextUtils.isEmpty(pushtoken)) {
Log.i(TAG, "get token:" + pushtoken);
showLog(pushtoken);
}
} catch (Exception e) {
e.printStackTrace();
}
}
}.start();
}
@Override
public void onNewToken(String s) {
super.onNewToken(s);
Log.i(TAG, "receive token:" + s);
}
3. 透傳類消息推送
集成過推送的朋友都瞭解,推送分爲 通知類消息 和 透傳類消息,透傳類消息 雖到達率沒有 通知類消息 高,但使用更加靈活,和尚簡單嘗試一下;ide
華爲透傳類消息經過繼承的 HmsMessageService 接收,在 onMessageReceived 方法中進行內容的解析,在後臺發送時能夠設置固定的 key-value 方式也能夠設置自定義參數,和尚採用更通用的自定義消息內容方式,組織一個 json 串進行解析;測試
須要注意的是,透傳類消息經過 onMessageReceived 接收到內容以後並不會展現 Notification,須要咱們自行處理;和尚在Android 8.0 適配小博客中有簡單介紹,此處不作贅述;ui
public class HWPushService extends HmsMessageService {
private static final String TAG = "HWPushService";
@Override
public void onNewToken(String s) {
super.onNewToken(s);
if (!Empty.check(s)) {
SpSetting.setHWToken(s);
}
}
@Override
public void onMessageReceived(RemoteMessage message) {
if (message.getData().length() > 0) {
if (message.getData() != null) {
// 解析 json 並彈出 Notification 或其餘
PushManager.handlePushMessage(getApplicationContext(), message.getData());
}
}
}
}
4. 通知類消息推送
通知類消息 再集成 SDK 後能夠直接使用,到達率較高,能夠設置打開首頁或其餘操做,但使用上並無那麼靈活;通知類消息 發送以後會自動打開 Notification,且送達的時機咱們沒法獲取,其點擊事件咱們也沒法靈活操做;this
和尚嘗試屢次後,發現能夠設置通知動做爲打開應用,app 頁面爲自定義頁面,咱們能夠經過打開新的頁面來操做點擊事件;
添加 DeepLink 打開頁面 Activity;
public class HWNotifyActivity extends BaseActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
Intent intent = getIntent();
if (null != intent) {
String dataStr = intent.getDataString();
Log.e("===DeepLink===", dataStr);
int indexStart = dataStr.indexOf("{");
int indexEnd = dataStr.lastIndexOf("}")+1;
String paramsStr = dataStr.substring(indexStart, indexEnd);
// 解析 json 並處理業務邏輯
}
}
}
在 AndroidManifest 中註冊 HWNotifyActivity,並自由設置 host/path/scheme 參數;
<activity android:name=".HWNotifyActivity">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<data
android:host="com.ace.ace_demo02"
android:path="/deeplink"
android:scheme="pushscheme" />
</intent-filter>
</activity>
按照 host/path/scheme 配置的參數發送打開 app 頁面路徑;
5. 通知類消息點擊
和尚在測試 通知類消息 解析時採用兩種方式:
根據 intent.getData().getQueryParameter("params") 方式獲取每一個拼接參數;此方法是根據 & 進行區分,但若是和尚測試數據中包含 & 時,沒法徹底解析;
// 測試數據
pushscheme://com.ace.ace_demo02/deeplink?name=和尚&age=12
pushscheme://com.ace.ace_demo02/deeplink?name=和尚&age=12&url=http://www.baidu.com?name=和尚&age=12
Log.e("===DeepLink===", "==name=="+intent.getData().getQueryParameter("name"));
Log.e("===DeepLink===", "==age=="+intent.getData().getQueryParameter("age"));
Log.e("===DeepLink===", "==url=="+intent.getData().getQueryParameter("url"));
-
將 params 設置爲一個 json 格式體,只解析當前一個參數,獲取 json 以後根據業務邏輯進行處理;這樣就能夠實現和 透傳類消息 相同的點擊事件類;
// 測試數據
pushscheme://com.ace.ace_demo02/deeplink?params={
"id": "01",
"name": "和尚",
"age": "123",
"url": "http://www.baidu.com?name=和尚&age=12"
}
int indexStart = dataStr.indexOf("{");
int indexEnd = dataStr.lastIndexOf("}")+1;
String paramsStr = dataStr.substring(indexStart, indexEnd);
JSONObject json_test = getJsonItemInnerConfig(this, paramsStr);
Log.e("===DeepLink===", "==c=name=="+json_test.optString("name"));
Log.e("===DeepLink===", "==c=age=="+json_test.optString("age"));
Log.e("===DeepLink===", "==c=url=="+json_test.optString("url"));
和尚剛接入華爲 HMS Core Push,接入方法簡單而實用,其餘高級的方式和尚暫未涉及,有待進一步研究,若有錯誤請多多指導!
來源: 阿策小和尚
本文分享自微信公衆號 - 阿策小和尚(gh_8297e718c166)。
若有侵權,請聯繫 support@oschina.cn 刪除。
本文參與「OSC源創計劃」,歡迎正在閱讀的你也加入,一塊兒分享。