# 开发人员手册
说明
建议所有自定义应用事件,全部走S2S方式进行上报。
# 选择接入方案
请根据最佳实践选择最匹配的接入方案。
支持接入方式:
- 纯客户端接入
- 客户端 + 服务群(s2s)接入 - 建议该方案
- Adjust / AF 平替接入
# 客户端接入
# 接入前必读
- 要求android最低版本minSdk: 21, 需要使用APK Signature Scheme v2进行签名
- 依赖 以 jar 包形式提供,在
<app-dir>/libs>中加入该SDK,修改build.gradle加入如下依赖implementation fileTree(dir: 'libs', include: ['...', '*.jar']) - 增加权限,
AndroidManifest.xml文件中如已经包含则忽略。<manifest> ... <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="com.google.android.gms.permission.AD_ID" /> ... </manifest> - 配置允许连接HTTP URL, 需要在
application标签加入android:usesCleartextTraffic="true"<application android:usesCleartextTraffic="true"> ... </application> - 注意混淆规则
- 请确保
ing.bepower类不被混淆 - 确保获取GAID的类不被混淆
com.google.android.gms.ads.identifier.AdvertisingIdClient
- 确保第三方归因类不被混淆(如有用到)
com.adjust.sdk.Adjust(如Adjust)
- 请确保
# SDK初始化
在启动的Activity中添加: BePower.init(this);
public class DemoActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ‼️ 如有Adjust或AppsflyerSDK接入,请把下面代码放在三方SDK初始化之后,并且延迟300ms后调用
// 便于获取到三方的设备ID,进行归因校准。
BePower.init(this, new InitedCallback<String>() {
@Override
public void callback(String bdid) {
// 此处初始化成功的回调,可获取bdid
}
});
}
}
历史版本初始化 onCreate 方法(不建议使用)
public class DemoActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
// ‼️ 如有Adjust或AppsflyerSDK接入,请把下面代码放在三方SDK初始化之后,并且延迟300ms后调用
// 便于获取到三方的设备ID,进行归因校准。
BePower.onCreate(this);
}
}
# SDK公共接口
# 接口:获取BDID(BePower设备ID)
提示
- 需要将该值传给游戏服,并与用户数据关联,S2S上报的事件需要携带此参数进行数据关联;
- ⚠️异步延迟:BePower SDK初始化后且在BePower服务器接收到信息后才能获取BDID;
- 测试完整流程:
- 平台应用面板创建应用并上传APK包
- 安装通过跟踪链接下载的APK,才能获取到BDID(安全逻辑设定);
// isDebug: 可不传(默认false),为true时会默认BDID:bdid-T000000000001
BePower.getBdid(boolean isDebug)
// 首次打开APP获取bdid时,可能会因为延迟导致获取到空值
// 如果需在首次打开时获取BDID,请在sdk初始化中使用回调方法获取。
@Override
BePower.init(this, new Callback<String>() {
@Override
public void callback(String bdid) {
// 此处初始化成功的回调,可获取bdid
}
});
# 接口:事件上报
方法:BePower.report(context, eventToken, eventData, isDebug)
eventToken: 在平台->所有应用->应用详情->事件界面进行创建。
isDebug: Boolean类型,可不传(默认为false),是否为调试模式。请确保正式环境,此值为false.
eventData: 参考下面示例代码。
查看示例代码
// 如果事件参数为空,eventData须是空的HashMap,不能为null.
// 注册事件示例:
Map<String,Object> eventData = new HashMap<>();
eventData.put("uid",'e323ec626319ca94ee8bff2e4c87cf613be6ea19919ed1364124e16807ab3176');
BePower.report(context, 'adfasdfas', eventData);
// 登录事件示例:
Map<String,Object> eventData = new HashMap<>();
eventData.put("uid",'e323ec626319ca94ee8bff2e4c87cf613be6ea19919ed1364124e16807ab3176');
eventData.put("email",'username@gmail.com');
eventData.put("phone",'e323ec626319ca94ee8bff2e4c87cf613be6ea19919ed1364124e16807ab3176');
eventData.put("fb_login_id",'1231adsdfa23');
eventData.put("user_birthday",'1995-03-21');
eventData.put("user_first_name",'mark');
eventData.put("user_last_name",'jo');
BePower.report(context, 'adfasdfas', eventData);
// 充值事件示例:
Map<String,Object> eventData = new HashMap<>();
eventData.put("uid",'e323ec626319ca94ee8bff2e4c87cf613be6ea19919ed1364124e16807ab3176');
eventData.put("phone",'e323ec626319ca94ee8bff2e4c87cf613be6ea19919ed1364124e16807ab3176');
eventData.put("email",'e323ec626319ca94ee8bff2e4c87cf613be6ea19919ed1364124e16807ab3176');
eventData.put("order_id",'1-xxxx-xxxx');
eventData.put("product_id",'product-1');
eventData.put("currency",'inr');
eventData.put("value",10000); // 单位:分
BePower.report(context, 'adfasdfas', eventData);
Debug模式响应数据:
{
"status": 200,
"message": "",
"mode": "debug", // 仅在debug测试时返回
"eventToken": "reg", // 仅在debug测试时返回
"event": " 用户传递内容", // 仅在debug测试时返回
}
# SDK下载
请联系对接人,SDK文件类型:.jar文件。
# 服务器接入
说明
事件上报(S2S),建议自定义应用内事件优先使用S2S方式进行上报,确保上报数据的准确性和实时性。
# 服务器地址
主域名:https://just.bepower.ing
# 上报方式
HTTP POST: ${domain}/api/v1/devices/{bdid}/reports/{event-token}?app_token={app-token}
# URL参数说明
bdid: 支持gaid / bdid,bdid可在BePower SDK初始化成功后获取;
注意⚠️:如bdid为空时,请用gaid(Google Advertising ID)替代。
event-token: 应用事件Token,在平台创建;
app-token: 应用识别码,在平台创建应用后可获取。
# Body参数
格式 Content-Type: application/json,详见下面事件参数列表。
{
"uid": "", // 用户ID
"phone": "", // 手机号
"email": "", // 邮箱
.... ...
"event_at": "" // 事件发生时的UNIX 时间戳(秒),必须以格林威治标准时间 (GMT) 时区格式发送该日期,不要使用包含本地时区的时间戳。
}
# Response
HTTP状态码2xx 表示请求成功, 4xx, 5xx 表示失败,一些httpclient可能会抛出异常,需要进行捕获。
响应数据:
{
"status": 200,
"message": ""
}
# 事件参数
说明
为了便于媒体学习更精准,请确保参数尽量准确并且丰富。
| 属性 | 类型 | 必须 | 备注 | 说明 |
|---|---|---|---|---|
| event_token | string | Y | 事件token | 由平台创建,必传 |
| event_at | Number | Y | 事件发生事件 | 必传。Unix时间戳(以秒为单位),表示该时间的实际发生事件,您必须以格林威治标准时间 (GMT) 时区格式发送该日期。如果该参数如果“为空”,则以服务器接收事件的时间作为事件的发生时间。 |
| third_id | string | N | 第三方设备ID | 事件发生时,如有此值必传 ,如Adjust ADID ,AFID |
| uid | string | Y | 用户唯一ID(SHA256) | 事件发生时,如有此值必传 |
| string | Y | 邮箱(SHA256) | 事件发生时,如有此值必传 | |
| fb_login_id | string | N | FB登录编号 | 事件发生时,如有此值必传 |
| user_birthday | string | N | 出生日期 | YYYY-MM-DD格式 |
| user_first_name | string | N | 用户名 | 事件发生时,如有此值必传 , 推荐使用罗马字母字符 a 至 z。仅限小写字母,且不可包含标点符号。若使用特殊字符,则须按 UTF-8 格式对文本进行编码。 |
| user_last_name | string | N | 用户姓 | 事件发生时,如有此值必传 , 推荐使用罗马字母字符 a 至 z。仅限小写字母,且不可包含标点符号。若使用特殊字符,则须按 UTF-8 格式对文本进行编码。 |
| phone | string | Y | 手机号(SHA256) | 事件发生时,如有此值必传 ,"移除符号、字母及任何前导零。手机号必须包含用于匹配的国家/地区代码(例如,印度手机号前面必须带有数字 91) 示例: 输入:手机号+91 1234-5678-90 ,标准化格式:911234567890 |
| currency | string | Y | 币种 | 事件发生时,充值相关事件必传 ,3位币种代码 |
| value | string | Y | 价值(金额) | 单位:分,充值相关事件必传 |
| order_id | string | Y | 订单ID | 事件发生时,如有此值必传 |
| product_id | string | Y | 商品ID | 事件发生时,如有此值必传 |
| product_name | string | N | 商品名称 | 事件发生时,如有此值必传 |