android应用消息推送后台服务如何写

android应用消息推送后台服务怎么写
LZ现在要做一个应用信息推送的功能,具体情况如下:
     我们已经开发了一个应用,这里称为A应用,类似于appStore那种,A应用里面有很多第三方应用,可以查看和下载第三方应用。现在的任务就是如果这些第三方应用有新版本了,要及时在手机上进行消息的推送,提示有哪些第三方应用有更新。注意这里不是推送我们的A应用有更新。
     之前都没有做过推送这块的工作,我谷歌了一下,发现有写开源厂家有些免费推送服务,比如极光推送https://www.jpush.cn/和百度云推送http://developer.baidu.com/cloud/push,大致看了下,可能了解不够,感觉他们只能做单个应用相关的应用信息推送。
     另外也看到了其他一些,比如MQTT和ANDROID PN,还没有仔细研究,作为一个工作一年的小菜鸟表示感觉好迷茫,各位有何建议啊,望不吝赐教。
------解决方案--------------------
那得启动程序就去检查, 第三方应用是否是最新版本, 不是的话,就提示拉
------解决方案--------------------
app常驻后台并且更新比较频繁的用推送比较合适,对于不常驻的直接app登录一次刷新一次,等你搞出来借鉴下哈哈。
------解决方案--------------------
android代码:
package com.taocaiku.gaea.service.socket;

import java.net.ServerSocket;
import java.net.Socket;
import org.apache.http.protocol.HTTP;
import org.json.JSONObject;
import com.taocaiku.gaea.common.TckApp;
import com.taocaiku.gaea.domain.context.Container;
import com.taocaiku.gaea.service.SettingService;
import com.taocaiku.gaea.util.FileUtil;
import android.annotation.SuppressLint;
import android.os.Bundle;
import android.os.Message;
import android.util.Log;

/**
 * 运行Socket通信的线程
 * @author TCK-001
 * @version 1.0
 */
@SuppressLint("HandlerLeak")
public final class SocketThread extends Thread {

public void run() {
try {
while (true) {
if (!SocketManager.get().isStart()) {
return;
}
ServerSocket sever = SocketManager.get().getSocket();
if (null == sever 
------解决方案--------------------
 sever.isClosed()) {
return;
}
new ReadSocket(sever.accept()).start();
}
} catch (Exception e) {
Log.e("AbstractActivity", "Socket已经被回收");
}
}

/**
 * 读取Socket并解析
 * @author TCK-001
 * @version 1.0
 */
public class ReadSocket extends Thread {

private Socket socket;

public ReadSocket(Socket socket) {
this.socket = socket;
}

public void run() {
try {
String jsonStr = FileUtil.get().readFile(socket.getInputStream(), HTTP.UTF_8, 1, false);
socket.close();
JSONObject json = new JSONObject(jsonStr);
if (json.getLong("memberId") == Container.member.getId() && Container.socketKey.equals(json.getString("socketKey"))
&& SettingService.get().getSetting(SettingService.RECEIVE_MSG)) {
Bundle bundle = new Bundle();
bundle.putInt("type", json.getInt("type"));
bundle.putString("data", json.getJSONObject("data").toString());
Message message = new Message();
message.setData(bundle);
TckApp.get().getLastAct(null).socketHandler.sendMessage(message);
}
} catch (Exception e) {
Log.e("AbstractActivity", "接收Socket消息,解析json", e);
}
}

}

}


服务器java代码:
/**
 * 发送一个Socket通信消息
 * @param vo
 * @return
 */
public static boolean sendSocket(SocketVo vo) {
try {
if (!pingServer(vo.getIp(), 2000)) {return false;}
Socket socket = new Socket(vo.getIp(), vo.getPort());// 创建socket对象,指定服务器端地址和端口号
OutputStream output = socket.getOutputStream();
Writer writer = new OutputStreamWriter(output, CharEncoding.UTF_8);
PrintWriter out = new PrintWriter(writer, true);// 获取 Client 端的输出流
vo.setIp(null);vo.setPort(0);
out.print(GsonUtils.toJson(vo));// 填充信息
writer.flush();writer.close();
out.flush();out.close();
output.flush();output.close();
socket.close();
return true;
} catch (Exception e) {
log.error("发送Socket失败:" + e.getMessage());
return false;
}
}

/**
 * 能否ping通IP地址
 * @param server IP地址
 * @param timeout 超时时长
 * @return boolean
 */
public static boolean pingServer(String server, int timeout) {
try {
Process process = Runtime.getRuntime().exec("ping " + server + " -n 1 -w " + timeout);
if (null == process) {return false;}
String info = FileUtil.readFile(process.getInputStream(), ENCODING_GBK, 1, false);
return ToolUtil.getStrCharNum(info, "ms") >= 3;
} catch (Exception e) {
return false;
}
}

------解决方案--------------------
对思路是可以实现的,我也在玩了段时间android了, qq237121087交流交流