android应用消息推送后台服务怎么写
发布网友
发布时间:2022-11-18 15:39
我来回答
共1个回答
热心网友
时间:2024-11-15 19:17
“android应用消息推送后台服务怎么写”相关的问题,中国学网通过互联网对“android应用消息推送后台服务怎么写”相关的解决方案进行了整理,用户详细问题包括:LZ现在要做一个应用信息推送的功能,具体情况如下:
我
们已经开发了一个应用,这里称为A应用,类似于appStore那种,A应用里面有很多第三方应用,可以查看和下载第三方应用。现在的任务就是如果这些第
三方应用有新版本了,要及时在手机上进行消息的推送,提示有哪些第三方应用有更新。注意这里不是推送我们的A应用有更新。
之前都没有做
过推送这块的工作,我谷歌了一下,发现有写开源厂家有些免费推送服务,比如极光推送https://www.jpush.cn/和百度云推送http:
//developer.baidu.com/cloud/push,大致看了下,可能了解不够,感觉他们只能做单个应用相关的应用信息推送。
另外也看到了其他一些,比如MQTT和ANDROID PN,还没有仔细研究,作为一个工作一年的小菜鸟表示感觉好迷茫,各位有何建议啊,望不吝赐教。,具体解决方案如下:
解决方案1:
那得启动程序就去检查, 第三方应用是否是最新版本, 不是的话,就提示拉
解决方案2:
引用 1 楼 qq237121087 的回复:那得启动程序就去检查, 第三方应用是否是最新版本, 不是的话,就提示拉
你
这么一说,我突然有另一个想法了,之前想的是提升有哪些第三方应用有更新,不过好像在世面没有看到过这种高科技玩法,我觉得弄一个A应用的推送也能实现,
推送弄简单点,就提示有多少个第三方应有有更新,点击提示跳转到A应用界面,用户在A应用中查看有哪些更新,这样应该是好实现些。
解决方案3:
app常驻后台并且更新比较频繁的用推送比较合适,对于不常驻的直接app登录一次刷新一次,等你搞出来借鉴下哈哈。
解决方案4:
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;
}
}