本文档中账号功能、删除标签功能适用于 SDK 1.2.3.0 或更高版本,1.2.3.0 及之前版本请参见 接口文档。
所有 API 接口的包名路径前缀都是:com.tencent.android.tpush
,其中有以下几个重要的对外提供接口的类名,如下表所示:
类名 | 说明 |
---|---|
XGPushManager | Push 服务推送 |
XGPushConfig | Push 服务配置项接口 |
XGPushBaseReceiver | 接收消息和结果反馈的 Receiver,需要开发者在 AndroidManifest.xml 自主完成静态注册 |
- App 只有在完成移动推送的启动与注册后才可以移动推送 SDK 提供 Push 服务,在这之前请确保配置 AccessId 和 AccessKey。
- 新版的 SDK 已经将启动移动推送和 App 注册统一集成在注册接口中,即只需调用注册接口便默认完成启动和注册操作。
- 注册成功后,会返回设备 Token,Token 用于标识设备唯一性,同时也是移动推送维持与后台连接的唯一身份标识。关于如何获取 Token 请参考 获取 Token。
注册接口通常提供简版和带 callback 版本的接口,请根据业务需要决定选择接口。
以下为设备注册相关接口方法,若需了解调用时机及调用原理,可查看 设备注册流程。
普通注册只注册当前设备,后台能够针对不同的设备 Token 发送推送消息,以下有2个版本的 API 接口方法:
public static void registerPush(Context context)
context:当前应用上下文对象,不能为 null。
XGPushManager.registerPush(getApplicationContext());
为方便用户获取注册是否成功的状态,提供带 callback 的版本。
public static void registerPush(Context context,final XGIOperateCallback callback)
- context:当前应用上下文对象,不能为 null。
- callback:callback 调用,主要包括操作成功和失败的回调,不能为 null。
XGPushManager.registerPush(this, new XGIOperateCallback() {
@Override
public void onSuccess(Object data, int flag) {
Log.d("TPush", "注册成功,设备token为:" + data);
}
@Override
public void onFail(Object data, int errCode, String msg) {
Log.d("TPush", "注册失败,错误码:" + errCode + ",错误信息:" + msg);
}
})
有2种途径可以获取注册是否成功。
使用 Callback 版本的注册接口。 XGIOperateCallback 类提供注册成功或失败的处理接口,请参考注册接口里面的示例。
/**
* 操作回调接口
*/
public interface XGIOperateCallback {
/**
* 操作成功时的回调。
* @param data 操作成功的业务数据,如注册成功时的token信息等。
* @param flag 标记码
*/
public void onSuccess(Object data, int flag);
/**
* 操作失败时的回调
* @param data 操作失败的业务数据
* @param errCode 错误码
* @param msg 错误信息
*/
public void onFail(Object data, int errCode, String msg);
}
继承 XGPushBaseReceiver 可通过重写 XGPushBaseReceiver 的 onRegisterResult 方法获取。
? 继承 XGPushBaseReceiver 的子类 需要配置在 AndroidManifest.xml,请参考下文 消息配置。
/**
*
* @param context 当前上下文
* @param errorCode 0 为成功,其它为错误码
* @param message 注册结果返回
*/
@Override
public void onRegisterResult(Context context, int errorCode, XGPushRegisterResult message) {
if (context == null || message == null) {
return;
}
String text = "";
if (errorCode == XGPushBaseReceiver.SUCCESS) { // 注册成功
// 在这里拿token
String token = message.getToken();
text = "注册成功,token:" + token;
} else {
text = message + "注册失败,错误码:" + errorCode;
}
Log.d(LogTag, text);
}
方法名 | 返回值 | 默认值 | 描述 |
---|---|---|---|
getToken() | String | 无 | 设备的 Token,即设备唯一识别 ID |
getAccessId() | long | 0 | 获取注册的 AccessId |
getAccount | String | 无 | 获取注册绑定的账号 |
getTicket() | String | 无 | 登录态票据 |
getTicketType() | short | 0 | 票据类型 |
以下为反注册接口方法,若需了解调用时机及调用原理,可查看 设备反注册流程。
! 调用反注册接口后,需要重新调用注册接口才可接收到推送。
当用户已退出或 App 被关闭,不再需要接收推送时,可以取消注册 App,即反注册(一旦设备反注册,直到这个设备重新注册成功期间内,下发的消息该设备都无法收到)。
public static void unregisterPush(Context context)
context: App 的上下文对象。
XGPushManager.unregisterPush(getApplicationContext(), new XGIOperateCallback() {
@Override
public void onSuccess(Object data, int i) {
Log.d("TPush", "反注册成功");
}
@Override
public void onFail(Object data, int errCode, String msg) {
Log.d("TPush", "反注册失败,错误码:" + errCode + ",错误信息:" + msg);
}
});
可通过重写 XGPushBaseReceiver的onUnregisterResult 方法获取。
?
- 反注册操作切勿过于频繁,可能会造成后台同步延时。
- 切换账号无需反注册,多次注册自动会以最后一次为准。
/**
* 反注册结果
* @param context 当前上下文
* @param errorCode 为成功,其它为错误码
*/
@Override
public void onUnregisterResult(Context context, int errorCode) {
if (context == null) {
return;
}
String text = "";
if (errorCode == XGPushBaseReceiver.SUCCESS) {
text = "反注册成功";
} else {
text = "反注册失败" + errorCode;
}
Log.d(LogTag, text);
}
指的是在设备的通知栏展示的内容,由移动推送 SDK 完成所有的操作,App 可以监听通知被打开的行为,即在前台下发的通知,无需 App 做任何处理,默认会展示在通知栏。
?
- 成功注册移动推送服务后,通常不需要任何设置便可下发通知。
- 通常来说,结合自定义通知样式,常规的通知,能够满足大部分业务需求,如果需要更灵活的方式,请考虑使用消息。
移动推送 SDK 提供回调接口供开发者获取抵达的通知内容,可以通过重写XGPushBaseReceiver 的 onNotificationShowedResult(Context, XGPushShowedResult)
方法实现。其中,XGPushShowedResult 对象提供读取通知内容的接口。
! 因部分厂商通道 SDK 未提供通知抵达回调方法,且当 App 进程未运行时,厂商通道的抵达回调方法无法触发。因此 SDK 内提供的回调接口
onNotificationShowedResult
仅支持移动推送自建通道下发通知抵达的监听,不支持厂商通道消息抵达的监听。
public abstract void onNotificationShowedResult(Context context,XGPushShowedResult notifiShowedRlt);
- context:当前应用上下文。
- notifiShowedRlt: 抵达的通知对象。
使用移动推送 SDK 默认已经统计通知/消息的抵达量、通知的点击和清除动作。SDK 提供回调接口供开发者监听通知点击事件,通过重写 XGPushBaseReceiver 的 onNotificationClickedResult(Context, XGPushClickedResult)
方法实现。
?
- 自 SDK 版本 v1.2.0.1 起,支持各厂商通道、移动推送自建通道下发的通知点击事件的监听。
- 请不要此回调接口内另外做页面跳转动作,SDK 会自动按照推送任务配置的跳转动作进行通知点击跳转。如需下发并获取推送自定义参数,推荐使用 Intent 方式,请参考文档 通知点击跳转。
public abstract void onNotificationClickedResult(Context context, XGPushClickedResult notifiClickedRlt);
// 通知点击回调,actionType=0 为该消息被点击,actionType=2 为该消息被清除
@Override
public void onNotificationClickedResult(Context context, XGPushClickedResult message) {
if (context == null || message == null) {
return;
}
String text = "";
if (message.getActionType() == NotificationAction.clicked.getType()) {
// 通知在通知栏被点击
// APP自己处理点击的相关动作
text = "通知被打开 :" + message;
} else if (message.getActionType() == NotificationAction.delete.getType()) {
// 通知被清除
// APP自己处理通知被清除后的相关动作
text = "通知被清除 :" + message;
}
// APP自主处理的过程。
Log.d(LogTag, "广播接收到通知:" + text);
}
- context:当前应用上下文。
- XGPushClickedResult:被打开的通知对象。
XGPushClickedResult
类成员方法列表:
方法名 | 返回值 | 默认值 | 描述 |
---|---|---|---|
getMsgId() | long | 0 | 消息 ID |
getTitle() | String | 无 | 通知标题 |
getContent() | String | 无 | 通知正文内容 |
getActionType() | String | 无 | 0 表示该通知被点击,2 表示该通知被清除 |
getPushChannel() | String | 100 | 被点击通知的所下发通道标识。 |
清除本 App 在通知栏上的所有通知。
public static void cancelAllNotifaction(Context context)
context:Context 对象。
XGPushManager.cancelAllNotifaction(context);
开发者可以创建通知 channel。
public static void createNotificationChannel(Context context, String channelId, String channelName, boolean enableVibration, boolean enableLights, boolean enableSound, Uri soundUri)
? 此接口仅适用于1.1.5.4及以上版本。
- context:当前应用上下文。
- channelId:通知渠道 Id。
- channelName:通知渠道名称。
- enableVibration:是否震动。
- enableLights:是否有呼吸。
- enableSound:是否有铃声。
- soundUri :铃声资源 Uri,enableSound 为 true 才有效,若使用系统默认铃声,则设置为 null。
// 请将铃声文件放置在 Android 工程资源目录 raw 下,此处以文件 ring.mp3 为例
String uri = "android.resource://" + context.getPackageName() + "/" + R.raw.ring;
Uri soundUri = Uri.parse(uri);
XGPushManager.createNotificationChannel(context,"default_message", "默认通知", true, true, true, soundUri);
指的是由移动推送下发给 App 的内容,需要 App 继承 XGPushBaseReceiver 接口实现并自主处理所有操作过程,也就是说,下发的消息默认是不会展示在通知栏的,移动推送只负责将消息从移动推送服务器下发到 App 这个过程,不负责消息的处理逻辑,需要 App 自己实现。
- 消息指的是由开发者通过前台或后台脚本下发的文本消息,移动推送只负责将消息传递给 App,App 完全自主负责消息体的处理。
- 消息具有灵活性强和高度定制性的特点,更适合 App 自主处理个性化业务需求,例如下发 App 配置信息、自定义处理消息的存储和展示等。
请自行继承 XGPushBaseReceiver ,并且在配置文件中配置如下内容:
<receiver android:name="com.tencent.android.xg.cloud.demo.MessageReceiver">
<intent-filter>
<!-- 接收消息透传 -->
<action android:name="com.tencent.android.xg.vip.action.PUSH_MESSAGE" />
<!-- 监听注册、反注册、设置/删除标签、通知被点击等处理结果 -->
<action android:name="com.tencent.android.xg.vip.action.FEEDBACK" />
</intent-filter>
</receiver>
开发者在前台下发消息,需要 App 继承 XGPushBaseReceiver 重写 onTextMessage 方法接收,成功接收后,再根据特有业务场景进行处理。
? 请确保在 AndroidManifest.xml 已经注册过该 receiver,即设 YOUR_PACKAGE.XGPushBaseReceiver。
public void onTextMessage(Context context,XGPushTextMessage message)
- context:应用当前上下文。
- message:接收到消息结构体。
方法名 | 返回值 | 默认值 | 描述 |
---|---|---|---|
getContent() | String | 无 | 消息正文内容,通常只需要下发本字段即可 |
getCustomContent() | String | 无 | 消息自定义 key-value |
getTitle() | String | 无 | 消息标题(从前台下发应用内消息字中的描述不属于标题) |
本地通知由用户自定义设置,保存在本地。当应用打开,移动推送 SDK Service 会根据网络心跳,判断当前是否有通知(5分钟一次), 本地通知需要 Service 开启才能弹出,可能存在5分钟左右延时。(当设置的时间小于当前设备时间通知弹出)
//新建本地通知
XGLocalMessage local_msg = new XGLocalMessage();
//设置本地消息类型,1:通知,2:消息
local_msg.setType(1);
// 设置消息标题
local_msg.setTitle("qq");
//设置消息内容
local_msg.setContent("ww");
//设置消息日期,格式为:20140502
local_msg.setDate("20140930");
//设置消息触发的小时(24小时制),例如:22代表晚上10点
local_msg.setHour("19");
//获取消息触发的分钟,例如:05代表05分
local_msg.setMin("31");
//设置消息样式,默认为0或不设置
local_msg.setBuilderId(0);
//设置动作类型:1打开activity或App本身,2打开浏览器,3打开Intent ,4通过包名打开应用
local_msg.setAction_type(1);
//设置拉起应用页面
local_msg.setActivity("com.qq.xgdemo.SettingActivity");
// 设置URL
local_msg.setUrl("http://www.baidu.com");
// 设置Intent
local_msg.setIntent("intent:10086#Intent;scheme=tel;action=android.intent.action.DIAL;S.key=value;end");
// 是否覆盖原先build_id的保存设置。1覆盖,0不覆盖
local_msg.setStyle_id(1);
// 设置音频资源
local_msg.setRing_raw("mm");
// 设置key,value
HashMap<String, Object> map = new HashMap<String, Object>();
map.put("key", "v1");
map.put("key2", "v2");
local_msg.setCustomContent(map);
//添加通知到本地
XGPushManager.addLocalNotification(context,local_msg);
清除本 App 已经创建但未弹出的本地通知。
public static void clearLocalNotifications(Context context)
context:Context 对象。
XGPushManager.clearLocalNotifications(context);
以下为账号管理相关接口方法,若需了解调用时机及调用原理,可查看 账号相关流程。
添加或更新账号。若原来没有该类型账号,则添加;若原来有,则覆盖。可以同时添加多个账号,一个账号对应一个账号类型。
public static void upsertAccounts(Context context, List<AccountInfo> accountInfoList, XGIOperateCallback callback)
- context: Context 对象。
- accountInfoList: 账号列表:账号信息包含一个账号类型和账号名称。
- callback: 绑定账号操作的回调。
XGIOperateCallback xgiOperateCallback = new XGIOperateCallback() {
@Override
public void onSuccess(Object data, int flag) {
Log.i("TPush", "onSuccess, data:" + data + ", flag:" + flag);
}
@Override
public void onFail(Object data, int errCode, String msg) {
Log.w("TPush", "onFail, data:" + data + ", code:" + errCode + ", msg:" + msg);
}
};
List<XGPushManager.AccountInfo> accountInfoList = new ArrayList<>();
accountInfoList.add(new XGPushManager.AccountInfo(XGPushManager.AccountType.UNKNOWN.getValue(), "account-test"));
XGPushManager.upsertAccounts(context, accountInfoList, xgiOperateCallback);
?
添加或更新手机号码。若原来没有绑定手机号码,则绑定;若原来有,则覆盖(SDK 1.2.5.0+)
? 手机号格式为
+[国家或地区码][手机号]
,例如+8613711112222(其中前面有一个+号 ,86为国家或地区码,13711112222为手机号)。若绑定的手机号不带国家或地区码,则移动推送下发短信时自动增加+86的前缀;若带上国家或地区码,则按照指定的号码绑定。如需删除绑定的手机号,则需调用delAccountsByKeys
接口并设置accountTypeSet 为 1002
。
public static void upsertPhoneNumber(Context context, String phoneNumber, XGIOperateCallback callback)
- context: Context 对象。
- phoneNumber:phoneNumber E.164标准,格式为+[国家或地区码][手机号],例如+8613711112222。SDK 内部加密传输。
- callback: 绑定手机号操作的回调。
XGIOperateCallback xgiOperateCallback = new XGIOperateCallback() {
@Override
public void onSuccess(Object data, int flag) {
Log.i("TPush", "onSuccess, data:" + data + ", flag:" + flag);
}
@Override
public void onFail(Object data, int errCode, String msg) {
Log.w("TPush", "onFail, data:" + data + ", code:" + errCode + ", msg:" + msg);
}
};
XGPushManager.upsertPhoneNumber(context, phoneNumber, xgiOperateCallback);
对已绑定的账号进行解绑。
//解绑指定账号(有注册回调)
void delAccount(Context context, final String account, XGIOperateCallback callback)
//解绑指定账号(无注册回调)
void delAccount(Context context, final String account )
? 账号解绑只是解除 Token 与 App 账号的关联,若使用全量/标签/Token 推送,仍然能收到通知/消息。
- context:当前应用上下文对象,不能为 null。
- account:账号。
XGPushManager.delAccount(getApplicationContext(),"test");
对一个或多个账号类型的账号进行解绑。(SDK 1.2.3.0+)
public static void delAccounts(Context context, final Set<Integer> accountTypeSet, XGIOperateCallback callback)
- context: Context 对象。
- accountTypeSet: 需解绑账号的账号类型。
- callback: 账号解绑操作的回调。
XGIOperateCallback xgiOperateCallback = new XGIOperateCallback() {
@Override
public void onSuccess(Object data, int flag) {
Log.i("TPush", "onSuccess, data:" + data + ", flag:" + flag);
}
@Override
public void onFail(Object data, int errCode, String msg) {
Log.w("TPush", "onFail, data:" + data + ", code:" + errCode + ", msg:" + msg);
}
};
Set<Integer> accountTypeSet = new HashSet<>();
accountTypeSet.add(XGPushManager.AccountType.CUSTOM.getValue());
accountTypeSet.add(XGPushManager.AccountType.IMEI.getValue());
XGPushManager.delAccounts(context, accountTypeSet, xgiOperateCallback);
? SDK 1.2.2.0 版本废弃 delAllAccount 接口,推荐使用 clearAccounts 接口。
对的所有已绑定账号进行解绑。
//解绑所有的账号信息(有注册回调)
void clearAccounts(Context context, XGIOperateCallback callback)
//解绑所有的账号信息(无注册回调)
void clearAccounts(Context context)
? 账号解绑只是解除 Token 与 App 账号的关联,若使用全量/标签/Token 推送,仍然能收到通知/消息。
context:当前应用上下文对象,不能为 null。
XGPushManager.clearAccounts(getApplicationContext());
以下为标签管理相关接口方法,若需了解调用时机及调用原理,可查看 标签相关流程。
目前移动推送平台提供的预设标签包括:App 版本,系统版本,省份,活跃信息,系统语言,SDK 版本,国家&地区,手机品牌,手机机型。预设标签会在 SDK 内部自动上报。
一次设置多个标签,会覆盖这个设备之前设置的标签。 开发者可以针对不同的用户设置标签,然后根据标签名群发通知。 一个应用最多有10000个 tag, 每个 Token 在一个应用下最多100个 tag,如需提高该限制,请联系 在线客服。每个自定义 tag 可绑定的设备 Token 数量无限制,tag 中不准包含空格。
public static void clearAndAppendTags(Context context, String operateName, Set<String> tags)
- context:Context 对象。
- operateName:用户定义的操作名称,回调结果会原样返回,用于标识回调属于哪次操作。
- tags:标签名集合,每个标签是一个 String。限制:每个 tag 不能超过50字节(超过会抛弃),不能包含空格(含有空格会删除空格)。最多设置100个 tag,超过部分会抛弃。
可通过重写 XGPushBaseReceiver的onSetTagResult 方法获取。
String[] tags = "tag1 tag2".split(" ");
Set<String> tagsSet = new HashSet<>(Arrays.asList(tags));
XGPushManager.clearAndAppendTags(getApplicationContext(), "clearAndAppendTags :" + System.currentTimeMillis(), tagsSet);
? SDK 1.2.2.0 版本废弃 addTags 接口,推荐使用 appendTags 接口。
- 如果新覆盖的标签都带有
:
号,例如test:2, level:2
,则会删除这个设备已绑定的所有test:*
和level:*
标签,再新增test:2
和level:2
。 - 如果新增的标签有部分不带
:
号,例如test:2 level
,则会删除这个设备的全部历史标签,再新增test:2
和level
标签。
? 新增的 tags 中,
:
号为后台关键字,请根据具体的业务场景使用。
- 此接口调用的时候需要间隔一段时间(建议大于5s),否则可能造成更新失败。
public static void appendTags(Context context, String operateName, Set<String> tags)
- context:Context 对象。
- operateName:用户定义的操作名称,回调结果会原样返回,用于标识回调属于哪次操作。
- tags:标签名集合,每个标签是一个 String。限制:每个 tag 不能超过50字节(超过会抛弃),不能包含空格(含有空格会删除空格)。最多设置100个 tag,超过部分会抛弃。
可通过重写 XGPushBaseReceiver的onSetTagResult 方法获取。
String[] tags = "tag1 tag2".split(" ");
Set<String> tagsSet = new HashSet<>(Arrays.asList(tags));
XGPushManager.appendTags(getApplicationContext(), "appendTags:" + System.currentTimeMillis(), tagsSet);
? SDK 1.2.2.0 版本废弃 deleteTags 接口,推荐使用 delTags 接口。
一次删除多个标签。
public static void delTags(Context context, String operateName, Set<String> tags, XGIOperateCallback callback)
- context:Context 对象。
- operateName:用户定义的操作名称,回调结果会原样返回,用于标识回调属于哪次操作。
- tags:标签名集合,每个标签是一个 String。限制:每个 tag 不能超过50字节(超过会抛弃),不能包含空格(含有空格会删除空格)。最多设置100个tag,超过部分会抛弃。
- callback: 删除标签操作的回调
可通过重写 XGPushBaseReceiver 的 onSetTagResult 方法获取。
XGIOperateCallback xgiOperateCallback = new XGIOperateCallback() {
@Override
public void onSuccess(Object data, int flag) {
Log.i("TPush", "onSuccess, data:" + data + ", flag:" + flag);
}
@Override
public void onFail(Object data, int errCode, String msg) {
Log.w("TPush", "onFail, data:" + data + ", code:" + errCode + ", msg:" + msg);
}
};
Set<String> tagSet = new HashSet<>();
tagSet.add("tag1");
tagSet.add("tag2");
XGPushManager.delTags(context, "delTags", tagSet, xgiOperateCallback);
? SDK 1.2.2.0 版本开始废弃 cleanTags 接口,推荐使用 clearTags 接口。
清除这个设备的所有标签。
public static void clearTags(Context context, String operateName, XGIOperateCallback callback)
- context:Context 对象。
- operateName:用户定义的操作名称,回调结果会原样返回,用于标识回调属于哪次操作。
- callback: 清理所有标签操作的回调。
可通过重写 XGPushBaseReceiver 的 onSetTagResult 方法获取。
XGIOperateCallback xgiOperateCallback = new XGIOperateCallback() {
@Override
public void onSuccess(Object data, int flag) {
Log.i("TPush", "onSuccess, data:" + data + ", flag:" + flag);
}
@Override
public void onFail(Object data, int errCode, String msg) {
Log.w("TPush", "onFail, data:" + data + ", code:" + errCode + ", msg:" + msg);
}
};
XGPushManager.clearTags(context, "clearTags", xgiOperateCallback);
? 查询设备关联的标签(此接口仅适用于1.2.5.0及以上版本)。
获取这个设备的标签。
public static void queryTags(final Context context, final String operateName, final int offset, final int limit, final XGIOperateCallback callback)
- context:Context 对象
- operateName:用户定义的操作名称,回调结果会原样返回,用于给用户区分是哪个操作
- offset:开始的位置
- limit:获取标签的数量,最多为100个
- callback:获取标签操作的回调
可通过重写 XGPushBaseReceiver 的 onQueryTagsResult 方法获取。
XGIOperateCallback xgiOperateCallback = new XGIOperateCallback() {
@Override
public void onSuccess(Object data, int flag) {
Log.i("TPush", "onSuccess, data:" + data + ", flag:" + flag);
}
@Override
public void onFail(Object data, int errCode, String msg) {
Log.w("TPush", "onFail, data:" + data + ", code:" + errCode + ", msg:" + msg);
}
};
XGPushManager.queryTags(context, 0, 100, xgiOperateCallback);
开发者可以针对不同的用户设置属性,然后在管理平台推送的时候进行个性化推送。以下为用户属性相关接口方法,若需了解调用时机及调用原理,可查看 用户属性相关流程。
添加属性(带回调):有则覆盖,无则添加。
public static void upsertAttributes(Context context, String operateName, Map<String, String> attributes, XGIOperateCallback callback)
- context:Context 对象。
- operateName:用户定义的操作名称,回调结果会原样返回,用于给用户区分是哪个操作。
- attributes:属性集合,每个属性通过 key-value 标识。
- callback:添加属性操作的回调。
!
- 属性使用键值对传输,都只接受 string 字符串类型,非空串。
- 属性个数限制50个。
- 属性 key,value 长度都限制50个字符以内。
XGIOperateCallback xgiOperateCallback = new XGIOperateCallback() {
@Override
public void onSuccess(Object data, int flag) {
log("action - onSuccess, data:" + data + ", flag:" + flag);
}
@Override
public void onFail(Object data, int errCode, String msg) {
log("action - onFail, data:" + data + ", code:" + errCode + ", msg:" + msg);
}
};
Map<String,String> attr = new HashMap<>();
attr.put("name", "coding-test");
attr.put("gender", "male");
attr.put("age", "100");
XGPushManager.upsertAttributes(context, "addAttributes-test", attr, xgiOperateCallback);
删除指定的属性。
public static void delAttributes(Context context, String operateName, Set<String> attributes, XGIOperateCallback callback)
- context:Context 对象。
- operateName:用户定义的操作名称,回调结果会原样返回,用于给用户区分是哪个操作。
- attributes:属性集合,每个属性通过 key-value 标识。
- callback:删除属性操作的回调。
!
- 属性使用键值对传输,都只接受 string 字符串类型,非空串。
- 属性个数限制50个。
- 属性 key,value 长度都限制50个字符以内。
XGIOperateCallback xgiOperateCallback = new XGIOperateCallback() {
@Override
public void onSuccess(Object data, int flag) {
log("action - onSuccess, data:" + data + ", flag:" + flag);
}
@Override
public void onFail(Object data, int errCode, String msg) {
log("action - onFail, data:" + data + ", code:" + errCode + ", msg:" + msg);
}
};
Set<String> stringSet = new HashSet<>();
stringSet.add("name");
stringSet.add("gender");
XGPushManager.delAttributes(context, "delAttributes-test", stringSet, xgiOperateCallback);
删除已设置的所有属性。
public static void clearAttributes(Context context, String operateName, XGIOperateCallback callback)
- context:Context 对象。
- operateName:用户定义的操作名称,回调结果会原样返回,用于给用户区分是哪个操作。
- callback:清理所有属性操作的回调。
XGIOperateCallback xgiOperateCallback = new XGIOperateCallback() {
@Override
public void onSuccess(Object data, int flag) {
log("action - onSuccess, data:" + data + ", flag:" + flag);
}
@Override
public void onFail(Object data, int errCode, String msg) {
log("action - onFail, data:" + data + ", code:" + errCode + ", msg:" + msg);
}
};
XGPushManager.clearAttributes(context, "cleanAttributes-test", xgiOperateCallback);
设置属性(带回调),会覆盖这个设备之前设置的所有属性(即清理并设置)。
!
- 属性使用键值对传输,都只接受 string 字符串类型,非空串。
- 属性个数限制50个。
- 属性 key,value 长度都限制50个字符以内。
public static void clearAndAppendAttributes(Context context, String operateName, Map<String, String> attributes, XGIOperateCallback callback)
- context:Context 对象。
- operateName:用户定义的操作名称,回调结果会原样返回,用于给用户区分是哪个操作。
- attributes:属性集合,每个属性通过 key-value 标识。
- callback:设置属性操作的回调。
XGIOperateCallback xgiOperateCallback = new XGIOperateCallback() {
@Override
public void onSuccess(Object data, int flag) {
log("action - onSuccess, data:" + data + ", flag:" + flag);
}
@Override
public void onFail(Object data, int errCode, String msg) {
log("action - onFail, data:" + data + ", code:" + errCode + ", msg:" + msg);
}
};
Map<String,String> attr = new HashMap<>();
attr.put("name", "coding-test");
attr.put("gender", "male");
attr.put("age", "100");
XGPushManager.clearAndAppendAttributes(context, "setAttributes-test", attr, xgiOperateCallback);
所有的配置相关接口在 XGPushConfig 类中,为了使配置及时生效,开发者需要保证配置接口在启动或注册移动推送之前被调用。
移动推送默认开启联合保活能力,若需要关闭联合保活能力,请在应用初始化的时候,例如 Application 或 LauncherActivity 的 onCreate 中调用如下接口,并传递 false。
XGPushConfig.enablePullUpOtherApp(Context context, boolean pullUp);
? 1.2.6.0 起默认关闭联合保活功能,可不再调用此接口。在 SDK 1.3.4.0 及以上的版本关联启动功能已下线。
- context:应用上下文
- pullUp:true(开启联合保活);false(关闭联合保活)
? 若有以下日志打印,则表明联合保活功能已经关闭:I/TPNS: [ServiceUtil] disable pull up other app。
XGPushConfig.enablePullUpOtherApp(context, false); // 默认为 true: 开启保活
为保证数据的安全性,请在发布时确保已关闭 Debug 模式。
public static void enableDebug(Context context, boolean debugMode)
- context:App 上下文对象。
- debugMode:默认为 false。如果要开启 Debug 日志,设为 true。
XGPushConfig.enableDebug(context, true); // 默认为 false: 不打开
Token 是移动推送保持与后台长连接的唯一身份标识,是 App 接收消息的唯一 ID,只有设备注册成功后才能获取 Token,获取方法如下。(移动推送的 Token 在应用卸载重新安装的时候有可能会变。)
带 XGIOperateCallback 的注册接口的 onSuccess(Object data, int flag) 方法中,参数 data 便是 Token,具体可参考注册接口的相关示例。
重写 XGPushBaseReceiver 的 onRegisterResult (Context context, int errorCode,XGPushRegisterResult registerMessage) 方法,通过参数 registerMessage 提供的 getToken 接口获取,具体请参见 获取注册结果 章节。
当设备一旦注册成功后,便会将 Token 存储在本地,之后可通过 XGPushConfig.getToken(context) 接口获取。 Token 是一个设备的身份识别 ID,由服务器根据设备属性随机产生并下发到本地,同一 App 在不同设备上的 Token 不同。
public static String getToken(Context context)
? App 第一次注册会产生 Token,之后一直存储在手机上,不论之后是否进行注销注册操作,该 Token 一直存在。当 App 完全卸载重装后,Token 会发生变化。不同 App 之间的 Token 不同。
context:App 上下文对象。
XGPushConfig.getToken(context);
成功时返回正常的 Token;失败时返回 null 或0。
第三方厂商 Token 是厂商设备的身份识别 ID,由厂商下发到本地,同一 App 在不同设备上的 Token 不同。
public static String getOtherPushToken(Context context)
? 需要注册成功之后才能调用,不然返回为 NULL。
context:App 上下文对象。
XGPushConfig.getOtherPushToken(context);
成功时返回正常的 Token;失败时返回 null 或0。
SDK 1.3.2.0 新增,当通知被点击打开时,可以在通知设置的目标页面内,通过此接口直接获取创建推送任务时配置的自定义参数(custom_content)内容; 详细使用方式参见 通知点击跳转。
public static String getCustomContentFromIntent(Context context, Intent intent)
随推送下发的自定义参数(custom_content)字符串
- context:Context 对象, 不能为 null。
- intent:activity intent;在 onCreate 内请直接传入 this.getIntent();在 onNewIntent 内请直接传入回调的 intent。
String customContent = XGPushManager.getCustomContentFromIntent(this, intent);
如果已在 AndroidManifest.xml 配置过,无需再次调用;如果二者都存在,则以本接口为准。
public static boolean setAccessId(Context context, long accessId)
- Context:对象。
- accessId:前台注册得到的 accessId。
long accessId = 0L; // 当前应用的 accessId
XGPushConfig.setAccessId(context, accessId);
- true:成功。
- false:失败。
? 通过本接口设置的 accessId 会同时存储在文件中。
如果已在 AndroidManifest.xml 配置过,无需再次调用;如果二者都存在,则以本接口为准。
public static boolean setAccessKey(Context context, String accessKey)
- Context:对象。
- accessKey:前台注册得到的 accesskey。
String accessKey = ""; // 您应用的 accessKey
XGPushConfig.setAccessKey(context, accessKey);
- true:成功。
- false:失败。
? 通过本接口设置的 accessKey 会同时存储在文件中。
开发者如果发现 TPush 相关功能异常,可以调用该接口,触发本地 Push 日志的上报,反馈问题时,请联系 在线客服 将文件地址给到我们,便于我们排查问题。
public static void uploadLogFile(Context context, HttpRequestCallback httpRequestCallback)
- context:Context 对象, 不能为 null。
- httpRequestCallback: 上传日志结果回调,主要包括操作成功和失败,不能为 null。
XGPushManager.uploadLogFile(context, new HttpRequestCallback() {
@Override
public void onSuccess(String result) {
Log.d("TPush", "上传成功,文件地址:" + result);
}
@Override
public void onFailure(int errCode, String errMsg) {
Log.d("TPush", "上传失败,错误码:" + errCode + ",错误信息:" + errMsg);
}
});
?首先需要开启
XGPushConfig.enableDebug(this, true);
。