299 lines
9.0 KiB
Plaintext
299 lines
9.0 KiB
Plaintext
|
|
OPPO推送服务 - API成功推送消息文档
|
|||
|
|
==========================================
|
|||
|
|
|
|||
|
|
一、服务配置信息
|
|||
|
|
------------------------------------------
|
|||
|
|
包名: com.xunpaisoft.social
|
|||
|
|
AppId: 32150237
|
|||
|
|
AppKey: bb0819c889ae40cd8bde5a8ad4e670fe
|
|||
|
|
AppSecret: 9b5a0e6d560e406dbb70fbb4e0e38098
|
|||
|
|
AppServerSecret: 2d8b4e922d60453d987f0d09de6eb4a6
|
|||
|
|
|
|||
|
|
服务地址: http://localhost:8080/android/push
|
|||
|
|
请求方法: POST
|
|||
|
|
Content-Type: application/json;charset=UTF-8
|
|||
|
|
|
|||
|
|
|
|||
|
|
二、API接口说明
|
|||
|
|
------------------------------------------
|
|||
|
|
接口地址: http://localhost:8080/android/push
|
|||
|
|
请求方法: POST
|
|||
|
|
请求头: Content-Type: application/json;charset=UTF-8
|
|||
|
|
|
|||
|
|
|
|||
|
|
三、请求参数说明
|
|||
|
|
------------------------------------------
|
|||
|
|
所有参数都在HTTP body中以JSON格式传递:
|
|||
|
|
|
|||
|
|
参数名 类型 必填 说明
|
|||
|
|
------------------------------------------------------------------
|
|||
|
|
pushType int 是 推送类型,OPPO推送固定为 5
|
|||
|
|
pushMessageType int 是 消息类型,0表示普通消息
|
|||
|
|
packageName String 是 应用包名,固定为: com.xunpaisoft.social
|
|||
|
|
deviceToken String 是 OPPO设备的registration_id
|
|||
|
|
pushContent String 是 推送消息内容
|
|||
|
|
sender String 否 发送者ID
|
|||
|
|
senderName String 否 发送者名称(会作为推送标题显示)
|
|||
|
|
target String 否 目标ID
|
|||
|
|
targetName String 否 目标名称
|
|||
|
|
convType int 否 会话类型,0表示单聊
|
|||
|
|
line int 否 消息行,0表示普通消息
|
|||
|
|
cntType int 否 内容类型,1表示文本
|
|||
|
|
serverTime long 否 服务器时间戳(毫秒)
|
|||
|
|
unReceivedMsg int 否 未接收消息数
|
|||
|
|
mentionedType int 否 提及类型,0表示未提及
|
|||
|
|
isHiddenDetail boolean 否 是否隐藏详情,false表示显示详情
|
|||
|
|
language String 否 语言,zh表示中文
|
|||
|
|
messageId long 否 消息ID(建议使用时间戳)
|
|||
|
|
republish boolean 否 是否重新发布,false表示新消息
|
|||
|
|
existBadgeNumber int 否 已存在的角标数字
|
|||
|
|
|
|||
|
|
|
|||
|
|
四、成功推送示例
|
|||
|
|
------------------------------------------
|
|||
|
|
|
|||
|
|
示例1: 使用curl命令推送消息
|
|||
|
|
|
|||
|
|
curl -X POST http://localhost:8080/android/push \
|
|||
|
|
-H "Content-Type: application/json;charset=UTF-8" \
|
|||
|
|
-d '{
|
|||
|
|
"pushType": 5,
|
|||
|
|
"pushMessageType": 0,
|
|||
|
|
"packageName": "com.xunpaisoft.social",
|
|||
|
|
"deviceToken": "OPPO_CN_95ac9afc103d70bb26441ec0cbb06b97",
|
|||
|
|
"pushContent": "我是api",
|
|||
|
|
"sender": "api_user",
|
|||
|
|
"senderName": "知你",
|
|||
|
|
"target": "test_target",
|
|||
|
|
"targetName": "测试目标",
|
|||
|
|
"convType": 0,
|
|||
|
|
"line": 0,
|
|||
|
|
"cntType": 1,
|
|||
|
|
"serverTime": 1767146875000,
|
|||
|
|
"unReceivedMsg": 1,
|
|||
|
|
"mentionedType": 0,
|
|||
|
|
"isHiddenDetail": false,
|
|||
|
|
"language": "zh",
|
|||
|
|
"messageId": 1767146875,
|
|||
|
|
"republish": false,
|
|||
|
|
"existBadgeNumber": 0
|
|||
|
|
}'
|
|||
|
|
|
|||
|
|
|
|||
|
|
示例2: 使用测试脚本推送
|
|||
|
|
|
|||
|
|
cd /home/renjianbo/push/push_server
|
|||
|
|
./test_push_8080.sh OPPO_CN_95ac9afc103d70bb26441ec0cbb06b97
|
|||
|
|
|
|||
|
|
|
|||
|
|
示例3: 使用Python发送推送
|
|||
|
|
|
|||
|
|
import requests
|
|||
|
|
import json
|
|||
|
|
import time
|
|||
|
|
|
|||
|
|
url = "http://localhost:8080/android/push"
|
|||
|
|
headers = {
|
|||
|
|
"Content-Type": "application/json;charset=UTF-8"
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
data = {
|
|||
|
|
"pushType": 5,
|
|||
|
|
"pushMessageType": 0,
|
|||
|
|
"packageName": "com.xunpaisoft.social",
|
|||
|
|
"deviceToken": "OPPO_CN_95ac9afc103d70bb26441ec0cbb06b97",
|
|||
|
|
"pushContent": "我是api",
|
|||
|
|
"sender": "api_user",
|
|||
|
|
"senderName": "知你",
|
|||
|
|
"target": "test_target",
|
|||
|
|
"targetName": "测试目标",
|
|||
|
|
"convType": 0,
|
|||
|
|
"line": 0,
|
|||
|
|
"cntType": 1,
|
|||
|
|
"serverTime": int(time.time() * 1000),
|
|||
|
|
"unReceivedMsg": 1,
|
|||
|
|
"mentionedType": 0,
|
|||
|
|
"isHiddenDetail": False,
|
|||
|
|
"language": "zh",
|
|||
|
|
"messageId": int(time.time()),
|
|||
|
|
"republish": False,
|
|||
|
|
"existBadgeNumber": 0
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
response = requests.post(url, headers=headers, json=data)
|
|||
|
|
print(response.text)
|
|||
|
|
|
|||
|
|
|
|||
|
|
示例4: 使用Java发送推送
|
|||
|
|
|
|||
|
|
import java.net.HttpURLConnection;
|
|||
|
|
import java.net.URL;
|
|||
|
|
import java.io.OutputStream;
|
|||
|
|
import java.io.BufferedReader;
|
|||
|
|
import java.io.InputStreamReader;
|
|||
|
|
import com.google.gson.Gson;
|
|||
|
|
import java.util.HashMap;
|
|||
|
|
import java.util.Map;
|
|||
|
|
|
|||
|
|
public class OppoPushTest {
|
|||
|
|
public static void main(String[] args) throws Exception {
|
|||
|
|
String url = "http://localhost:8080/android/push";
|
|||
|
|
URL obj = new URL(url);
|
|||
|
|
HttpURLConnection con = (HttpURLConnection) obj.openConnection();
|
|||
|
|
|
|||
|
|
con.setRequestMethod("POST");
|
|||
|
|
con.setRequestProperty("Content-Type", "application/json;charset=UTF-8");
|
|||
|
|
con.setDoOutput(true);
|
|||
|
|
|
|||
|
|
Map<String, Object> data = new HashMap<>();
|
|||
|
|
data.put("pushType", 5);
|
|||
|
|
data.put("pushMessageType", 0);
|
|||
|
|
data.put("packageName", "com.xunpaisoft.social");
|
|||
|
|
data.put("deviceToken", "OPPO_CN_95ac9afc103d70bb26441ec0cbb06b97");
|
|||
|
|
data.put("pushContent", "我是api");
|
|||
|
|
data.put("sender", "api_user");
|
|||
|
|
data.put("senderName", "知你");
|
|||
|
|
data.put("target", "test_target");
|
|||
|
|
data.put("targetName", "测试目标");
|
|||
|
|
data.put("convType", 0);
|
|||
|
|
data.put("line", 0);
|
|||
|
|
data.put("cntType", 1);
|
|||
|
|
data.put("serverTime", System.currentTimeMillis());
|
|||
|
|
data.put("unReceivedMsg", 1);
|
|||
|
|
data.put("mentionedType", 0);
|
|||
|
|
data.put("isHiddenDetail", false);
|
|||
|
|
data.put("language", "zh");
|
|||
|
|
data.put("messageId", System.currentTimeMillis() / 1000);
|
|||
|
|
data.put("republish", false);
|
|||
|
|
data.put("existBadgeNumber", 0);
|
|||
|
|
|
|||
|
|
String json = new Gson().toJson(data);
|
|||
|
|
|
|||
|
|
try (OutputStream os = con.getOutputStream()) {
|
|||
|
|
byte[] input = json.getBytes("utf-8");
|
|||
|
|
os.write(input, 0, input.length);
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
int responseCode = con.getResponseCode();
|
|||
|
|
System.out.println("Response Code: " + responseCode);
|
|||
|
|
|
|||
|
|
try (BufferedReader br = new BufferedReader(
|
|||
|
|
new InputStreamReader(con.getInputStream(), "utf-8"))) {
|
|||
|
|
StringBuilder response = new StringBuilder();
|
|||
|
|
String responseLine;
|
|||
|
|
while ((responseLine = br.readLine()) != null) {
|
|||
|
|
response.append(responseLine.trim());
|
|||
|
|
}
|
|||
|
|
System.out.println("Response: " + response.toString());
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
}
|
|||
|
|
|
|||
|
|
|
|||
|
|
五、成功响应示例
|
|||
|
|
------------------------------------------
|
|||
|
|
HTTP状态码: 200
|
|||
|
|
|
|||
|
|
响应内容: ok
|
|||
|
|
|
|||
|
|
服务器日志示例:
|
|||
|
|
Server response: MessageId: 32150237-1-1-6954857b816b510175dc87a7
|
|||
|
|
ErrorCode: ReturnCode{code=0, message='Success'}
|
|||
|
|
Reason: OK
|
|||
|
|
|
|||
|
|
|
|||
|
|
六、重要参数说明
|
|||
|
|
------------------------------------------
|
|||
|
|
|
|||
|
|
1. pushType: 必须设置为 5,表示OPPO推送类型
|
|||
|
|
|
|||
|
|
2. deviceToken: OPPO设备的registration_id
|
|||
|
|
- 格式: OPPO_CN_xxxxxxxxxxxxxxxxxxxxxxxxxxxxx
|
|||
|
|
- 需要从OPPO手机应用中获取
|
|||
|
|
- 每个设备有唯一的registration_id
|
|||
|
|
|
|||
|
|
3. senderName: 推送标题
|
|||
|
|
- 会显示在推送通知的标题位置
|
|||
|
|
- 例如: "知你"
|
|||
|
|
|
|||
|
|
4. pushContent: 推送内容
|
|||
|
|
- 会显示在推送通知的内容位置
|
|||
|
|
- 例如: "我是api"
|
|||
|
|
- 内容长度建议不超过200字符
|
|||
|
|
|
|||
|
|
5. packageName: 必须与配置的包名一致
|
|||
|
|
- 固定值: com.xunpaisoft.social
|
|||
|
|
|
|||
|
|
6. serverTime: 服务器时间戳(毫秒)
|
|||
|
|
- 可以使用: System.currentTimeMillis() (Java)
|
|||
|
|
- 或: int(time.time() * 1000) (Python)
|
|||
|
|
- 或: $(date +%s)000 (Shell)
|
|||
|
|
|
|||
|
|
7. messageId: 消息ID
|
|||
|
|
- 建议使用时间戳
|
|||
|
|
- 用于消息去重
|
|||
|
|
|
|||
|
|
|
|||
|
|
七、测试验证
|
|||
|
|
------------------------------------------
|
|||
|
|
|
|||
|
|
成功测试记录:
|
|||
|
|
- 测试时间: 2025-12-31 10:07:55
|
|||
|
|
- 推送标题: 知你
|
|||
|
|
- 推送内容: 我是api
|
|||
|
|
- MessageId: 32150237-1-1-6954857b816b510175dc87a7
|
|||
|
|
- 状态: Success (code=0)
|
|||
|
|
- 设备Token: OPPO_CN_95ac9afc103d70bb26441ec0cbb06b97
|
|||
|
|
- 手机接收: ✓ 已成功收到推送通知
|
|||
|
|
|
|||
|
|
|
|||
|
|
八、常见问题
|
|||
|
|
------------------------------------------
|
|||
|
|
|
|||
|
|
1. 推送失败,返回错误
|
|||
|
|
- 检查deviceToken是否正确
|
|||
|
|
- 检查packageName是否匹配
|
|||
|
|
- 检查服务是否正常运行在8080端口
|
|||
|
|
- 查看服务器日志: tail -f push.log
|
|||
|
|
|
|||
|
|
2. 手机未收到推送
|
|||
|
|
- 检查手机网络连接
|
|||
|
|
- 检查应用推送权限设置
|
|||
|
|
- 检查应用是否在后台运行
|
|||
|
|
- 检查OPPO手机的通知设置
|
|||
|
|
|
|||
|
|
3. 服务启动失败
|
|||
|
|
- 检查端口8080是否被占用
|
|||
|
|
- 检查config目录下的配置文件是否正确
|
|||
|
|
- 查看日志文件了解详细错误信息
|
|||
|
|
|
|||
|
|
|
|||
|
|
九、服务管理
|
|||
|
|
------------------------------------------
|
|||
|
|
|
|||
|
|
启动服务:
|
|||
|
|
cd /home/renjianbo/push/push_server
|
|||
|
|
nohup java -jar ../push_server-master/target/push-0.1.2.jar > push.log 2>&1 &
|
|||
|
|
|
|||
|
|
停止服务:
|
|||
|
|
pkill -f "push-0.1.2.jar"
|
|||
|
|
|
|||
|
|
查看日志:
|
|||
|
|
tail -f push.log
|
|||
|
|
|
|||
|
|
检查服务状态:
|
|||
|
|
netstat -tlnp | grep 8080
|
|||
|
|
|
|||
|
|
|
|||
|
|
十、配置文件位置
|
|||
|
|
------------------------------------------
|
|||
|
|
配置文件: /home/renjianbo/push/push_server/config/oppo.properties
|
|||
|
|
服务端口: /home/renjianbo/push/push_server/config/application.properties
|
|||
|
|
测试脚本: /home/renjianbo/push/push_server/test_push_8080.sh
|
|||
|
|
|
|||
|
|
|
|||
|
|
==========================================
|
|||
|
|
文档生成时间: 2025-12-31
|
|||
|
|
测试状态: ✓ 已成功验证推送功能
|
|||
|
|
|