develop appsever –集成sdk到 个推Server
流程梳理:
1.第三方应用集成个推SDK,个推SDK运行后获取CID返回给第三方应用,由第三方应用保存至其应用服务器;
2.第三方应用服务器调用推送API进行消息推送,个推SDK将接收到的推送消息回调给App进行处理。
即:手机服务器和个推服务器的sdk集成,然后手机服务器发送个推消息到服务器,服务器把个推消通过个推Android sdk发给手机端
1 。按照官方sdk集成方式,配置好。
2.自定义推送服务、接受推送消息的服务 的2个类
import com.igexin.sdk.GTServiceManager;
/**
* Description:自定义个推推送服务
* Created by:Kyle
* Date:2017/3/6
*/
public class GPushService extends Service{
@Override
public void onCreate() {
super.onCreate();
GTServiceManager.getInstance().onCreate(this);
}
@Override
public int onStartCommand(Intent intent, int flags, int startId) {
super.onStartCommand(intent, flags, startId);
return GTServiceManager.getInstance().onStartCommand(this, intent, flags, startId);
}
@Override
public void onDestroy() {
super.onDestroy();
GTServiceManager.getInstance().onDestroy();
}
@Override
public void onLowMemory() {
super.onLowMemory();
GTServiceManager.getInstance().onLowMemory();
}
@Nullable
@Override
public IBinder onBind(Intent intent) {
return GTServiceManager.getInstance().onBind(intent);
}
}
接受推送消息的服务
package com.kesen.fire.getui;
import android.content.Context;
import android.content.Intent;
import android.util.Log;
import com.google.gson.Gson;
import com.igexin.sdk.GTIntentService;
import com.igexin.sdk.message.GTCmdMessage;
import com.igexin.sdk.message.GTTransmitMessage;
import com.kesen.fire.bean.BaseResponse;
import com.kesen.fire.bean.CarBean;
import com.kesen.fire.bean.GTResult;
import com.kesen.fire.bean.UserBean;
import com.kesen.fire.constant.Constant;
import com.kesen.fire.data.UserData;
import com.kesen.fire.net.NetWork;
import com.orhanobut.logger.Logger;
import java.util.List;
import rx.Subscriber;
import rx.android.schedulers.AndroidSchedulers;
import rx.schedulers.Schedulers;
/**
* Description: 继承 GTIntentService 接收来自个推的消息, 所有消息在线程中回调, 如果注册了该服务, 则务必要在 AndroidManifest中声明, 否则无法接受消息
* onReceiveMessageData 处理透传消息
* onReceiveClientId 接收 cid
* onReceiveOnlineState cid 离线上线通知
* onReceiveCommandResult 各种事件处理回执
* Created by:Kyle
* Date:2017/3/6
*/
public class GIntentService extends GTIntentService{
@Override
public void onReceiveServicePid(Context context, int pid) {
}
@Override
public void onReceiveClientId(Context context, String clientid) {
Log.e(TAG, "onReceiveClientId -> " + "clientid = " + clientid);
UserBean user= UserData.getUserInfo();
if(user!=null){
bindGT(user.getAccount(),clientid);
}
}
// bindGT()方法,是调用自己android的服务器后台接口,实现和个推的绑定,并返回绑定是否成功?
//onReceiveMessageData()里面处理接受透传消息(个人理解是自定义的推送消息)
//这里解析json 数据,并 sendBroadcast(res.data.unhandle);将推送消息个数广播给用户
@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();
if(payload!=null){
String data=new String(payload);
Logger.d(“—–data:”+data);
Gson gson = new Gson();
GTResult res=gson.fromJson(data,GTResult.class);
Logger.d(“—–data:”+(res.data).unhandle);
sendBroadcast(res.data.unhandle);
}
}
@Override
public void onReceiveOnlineState(Context context, boolean b) {
}
@Override
public void onReceiveCommandResult(Context context, GTCmdMessage gtCmdMessage) {
}
private void sendBroadcast(int num){
Intent intent=new Intent(Constant.ACTION_FIRE_NUM);
intent.putExtra("num",num);
sendBroadcast(intent);
}
private void bindGT(String uname,String clientid){
NetWork.getInstance()
.getFireApi ()
.bindGT(uname, clientid)
.subscribeOn(Schedulers.io())
.observeOn (AndroidSchedulers.mainThread())
.subscribe (new Subscriber<BaseResponse<String>>() {
@Override
public void onCompleted () {
}
@Override
public void onError (Throwable e) {
}
@Override
public void onNext (BaseResponse<String> response) {
if(response.isOk()){
Logger.d("----gt bind success");
}else{
Logger.d("----gt bind failed");
}
}
});
}
}
3。在MainActivity(或是在service)的onCreate()或者onResume()方法中调用个推SDK初始化方法。如果使用了自定义推送服务,初始化方法还需要传入新的自定义推送服务名:
个推SDK初始化方法
PushManager.getInstance().initialize(this.getApplicationContext(), GPushService.class);
**MainActivity注册上述 IntentService 类:** PushManager.getInstance().registerPushIntentService(this.getApplicationContext(), GIntentService.class);
注意:1。包名和申请应用的包名一致
2。权限申请在application之外
回调函数:标示我们设置成功or失败后返回的参数以及需要处理的操作
或是用extends BroadcastReceiver() 复写onReceiver(){
//弹出接收到的广播的消息
}
别忘清单中 action category 的配置
如果是自己demon , 自己搭建服务器
后台用java 、API 写接口 绑定 bindGT,以及后续的发送个推消息。客户端调用接口,即可。