个推sdk 集成(项目firecommand中的应用)

来源:互联网 发布:华硕访客网络限速 编辑:程序博客网 时间:2024/05/22 00:15

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{

@Overridepublic void onCreate() {    super.onCreate();    GTServiceManager.getInstance().onCreate(this);}@Overridepublic int onStartCommand(Intent intent, int flags, int startId) {    super.onStartCommand(intent, flags, startId);    return GTServiceManager.getInstance().onStartCommand(this, intent, flags, startId);}@Overridepublic void onDestroy() {    super.onDestroy();    GTServiceManager.getInstance().onDestroy();}@Overridepublic void onLowMemory() {    super.onLowMemory();    GTServiceManager.getInstance().onLowMemory();}@Nullable@Overridepublic 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) {

}@Overridepublic 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);
}
}

@Overridepublic void onReceiveOnlineState(Context context, boolean b) {}@Overridepublic 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,以及后续的发送个推消息。客户端调用接口,即可。

0 0
原创粉丝点击