刚开始接触个推消息透传的童鞋不知道如何处理服务器发送过来的透传消息
因为它不像推送通知那样简单 直接会弹出通知框 透传消息需要自己处理然后自己定义弹出框
下面先看一下个推服务类处理
package com.app.push;
import android.content.Context;
import android.os.Message;
import android.util.Log;
import com.igexin.sdk.GTIntentService;
import com.igexin.sdk.PushManager;
import com.igexin.sdk.message.GTCmdMessage;
import com.igexin.sdk.message.GTTransmitMessage;
import com.app.CustomerApp;
/**
* Created by Yangzb on 2017/7/25 20:28
* E-mail:yangzongbin@si-top.com
*/
/**
* 继承 GTIntentService 接收来自个推的消息, 所有消息在线程中回调, 如果注册了该服务, 则务必要在 AndroidManifest中声明, 否则无法接受消息<br>
* onReceiveMessageData 处理透传消息<br>
* onReceiveClientId 接收 cid <br>
* onReceiveOnlineState cid 离线上线通知 <br>
* onReceiveCommandResult 各种事件处理回执 <br>
*/
public class CustIntentService extends GTIntentService {
/**
* 为了观察透传数据变化.
*/
private static int cnt;
public CustIntentService() {
}
@Override
public void onReceiveServicePid(Context context, int pid) {
}
@Override
public void onReceiveClientId(Context context, String clientid) {
Log.e(TAG, "onReceiveClientId -> " + "clientid = " + clientid);
}
@Override
public void onReceiveMessageData(Context context, GTTransmitMessage msg) {
String appid = msg.getAppid();
String taskid = msg.getTaskId();
String messageid = msg.getMessageId();
byte[] payload = msg.getPayload();
String pkg = msg.getPkgName();
String cid = msg.getClientId();
// 第三方回执调用接口,actionid范围为90000-90999,可根据业务场景执行
boolean result = PushManager.getInstance().sendFeedbackMessage(context, taskid, messageid, 90001);
if (payload == null) {
Log.e(TAG, "receiver payload = null");
} else {
String data = new String(payload);
Log.d(TAG, "receiver payload = " + data);
try {
sendMessage(data, 0);//这里对透传消息进行发送 通过App中的方法进行处理
} catch (Exception e) {
e.printStackTrace();
}
}
}
@Override
public void onReceiveOnlineState(Context context, boolean online) {
}
@Override
public void onReceiveCommandResult(Context context, GTCmdMessage gtCmdMessage) {
}
private void sendMessage(String data, int what) {
Message msg = Message.obtain();
msg.what = what;
msg.obj = data;
App.getInstance().sendMessage(data);//将消息发送给App类
}
}
接下来看再App类中如何处理
package com..app;
import android.app.Notification;
import android.app.NotificationChannel;
import android.app.NotificationManager;
import android.app.PendingIntent;
import android.content.Context;
import android.content.Intent;
import android.content.SharedPreferences;
import android.database.sqlite.SQLiteDatabase;
import android.graphics.BitmapFactory;
import android.graphics.Color;
import android.os.Build;
import android.support.annotation.DrawableRes;
import android.support.annotation.NonNull;
import android.support.annotation.Nullable;
import android.text.TextUtils;
import android.widget.Toast;
import com.google.gson.Gson;
import com.iflytek.cloud.SpeechUtility;
import com.igexin.sdk.PushManager;
import com.sito.customer.BuildConfig;
import com.sito.customer.R;
import com.sito.customer.api.Api;
import com.sito.customer.common.ConstantStr;
import com.sito.customer.db.CustomerOpenHelp;
import com.sito.customer.mode.bean.User;
import com.sito.customer.mode.bean.news.DaoMaster;
import com.sito.customer.mode.bean.news.DaoSession;
import com.sito.customer.mode.bean.news.MessageContent;
import com.sito.customer.mode.bean.news.NewsBean;
import com.sito.customer.mode.bean.option.OptionBean;
import com.sito.customer.mode.count.CountRe