第一步:注册,在腾讯移动推送,创建我的应用,得到ACCESS ID 和 ACCESS KEY
第二步:在AndroidManifest.xml添加权限
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.RESTART_PACKAGES" />
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.WRITE_SETTINGS" />
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.WAKE_LOCK" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.READ_LOGS" />
<uses-permission android:name="android.permission.VIBRATE" />
第三步:导入依赖
defaultConfig {
//和注册得到ACCESS ID 和 ACCESS KEY时的包名一样
applicationId "你的包名"
//可自行选择不同架构
ndk {
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
//填入你组册得到的ACCESS ID和 ACCESS KEY
manifestPlaceholders = [
XG_ACCESS_ID : "**********",
XG_ACCESS_KEY: "**********",
]
}
dependencies {
//信鸽jar
compile 'com.tencent.xinge:xinge:3.2.5'
//jg包
compile'com.tencent.jg:jg:1.1'
//wup包
compile 'com.tencent.wup:wup:1.0.0.E-release'
//mid包
compile 'com.tencent.mid:mid:4.0.6-release'
}
第四步:创建监听消息的类,继承XGPushBaseReceiver
public class MessageReceiver extends XGPushBaseReceiver {
@Override
public void onRegisterResult(Context context, int i, XGPushRegisterResult xgPushRegisterResult) {
Log.d("XgMessageReceiver","xgPushRegisterResult="+xgPushRegisterResult );
}
@Override
public void onUnregisterResult(Context context, int i) {
}
@Override
public void onSetTagResult(Context context, int i, String s) {
}
@Override
public void onDeleteTagResult(Context context, int i, String s) {
}
//发送应用内消息接受消息的方法
@Override
public void onTextMessage(Context context, XGPushTextMessage xgPushTextMessage) {
Log.e("XgMessageReceiver", Textcontent"+xgPushTextMessage.getContent());
//构造消息,显示在自定义通知栏
XGLocalMessage msg = new XGLocalMessage();
msg.setTitle("信鸽推送");
msg.setContent(message.getTitle());
initCustomPushNotificationBuilder(context, msg);
}
@Override
public void onNotifactionClickedResult(Context context, XGPushClickedResult xgPushClickedResult) {
}
//发送通知栏消息接受消息的方法
@Override
public void onNotifactionShowedResult(Context context, XGPushShowedResult xgPushShowedResult) {
Log.d("XgMessageReceiver","Title="+xgPushShowedResult.getTitle()+"content="+xgPushShowedResult.getContent() );
}
/**
* 设置通知自定义View
*
* @param context
*/
@SuppressWarnings("unused")
private void initCustomPushNotificationBuilder(Context context, XGLocalMessage msg) {
XGCustomPushNotificationBuilder build = new XGCustomPushNotificationBuilder();
build.setSound(
RingtoneManager.getActualDefaultRingtoneUri(
// 设置声音
ProjectApplication.getApplication(), RingtoneManager.TYPE_ALARM))
// setSound(
// Uri.parse("android.resource://" + getPackageName()
// + "/" + R.raw.wind)) 设定Raw下指定声音文件
.setDefaults(Notification.DEFAULT_VIBRATE) // 振动
.setFlags(Notification.FLAG_NO_CLEAR); // 是否可清除
// 设置自定义通知layout,通知背景等可以在layout里设置
build.setLayoutId(R.layout.layout_notification);
// 设置自定义通知内容id
build.setLayoutTextId(R.id.content);
// 设置自定义通知标题id
build.setLayoutTitleId(R.id.title);
// 设置自定义通知图片id
build.setLayoutIconId(R.id.icon);
// 设置自定义通知图片资源
build.setLayoutIconDrawableId(R.drawable.logo);
// 设置状态栏的通知小图标
build.setIcon(R.drawable.right);
// 设置时间id
build.setLayoutTimeId(R.id.time);
// 若不设定以上自定义layout,又想简单指定通知栏图片资源
// build.setNotificationLargeIcon(R.drawable.ic_action_search);
// 客户端保存build_id
XGPushManager.setPushNotificationBuilder(ProjectApplication.getApplication(), 1, build);
XGPushManager.addLocalNotification(context, msg);
}
// 通知展示
@Override
public void onNotifactionShowedResult(Context context,
XGPushShowedResult notifiShowedRlt) {
}
// 通知点击回调 actionType=1为该消息被清除,actionType=0为该消息被点击
@Override
public void onNotifactionClickedResult(Context context,
XGPushClickedResult message) {
}
}
第五步:在AndroidManifest.xml里注册MessageReceiver
<receiver android:name="完整包名"
android:exported="true" >
<intent-filter>
<!-- 接收消息透传 -->
<action android:name="com.tencent.android.tpush.action.PUSH_MESSAGE" />
<!-- 监听注册、反注册、设置/删除标签、通知被点击等处理结果 -->
<action android:name="com.tencent.android.tpush.action.FEEDBACK" />
</intent-filter>
</receiver>
/**
<!-- 【必须】 信鸽receiver广播接收 -->
<receiver
android:name="com.tencent.android.tpush.XGPushReceiver"
android:process=":xg_service_v3">
<intent-filter android:priority="0x7fffffff">
<!-- 【必须】 信鸽SDK的内部广播 -->
<action android:name="com.tencent.android.tpush.action.SDK" />
<action android:name="com.tencent.android.tpush.action.INTERNAL_PUSH_MESSAGE" />
<!-- 【必须】 系统广播:网络切换 -->
<action android:name="android.net.conn.CONNECTIVITY_CHANGE" />
<!-- 【可选】 系统广播:开屏 -->
<action android:name="android.intent.action.USER_PRESENT" />
<!-- 【可选】 一些常用的系统广播,增强信鸽service的复活机会,请根据需要选择. -->
<action android:name="android.bluetooth.adapter.action.STATE_CHANGED" />
<action android:name="android.intent.action.ACTION_POWER_CONNECTED" />
<action android:name="android.intent.action.ACTION_POWER_DISCONNECTED" />
</intent-filter>
<!-- 【可选】 usb相关的系统广播,增强信鸽service的复活机会,请根据需要添加 -->
<intent-filter android:priority="0x7fffffff">
<action android:name="android.intent.action.MEDIA_UNMOUNTED" />
<action android:name="android.intent.action.MEDIA_REMOVED" />
<action android:name="android.intent.action.MEDIA_CHECKING" />
<action android:name="android.intent.action.MEDIA_EJECT" />
<data android:scheme="file" />
</intent-filter>
</receiver>
<!-- 【必须】 信鸽service -->
<service
android:name="com.tencent.android.tpush.service.XGPushServiceV3"
android:exported="true"
android:persistent="true"
android:process=":xg_service_v3" />
<!-- 【必须】 通知service,其中android:name部分要改为当前包名 -->
<service
android:name="com.tencent.android.tpush.rpc.XGRemoteService"
android:exported="true">
<intent-filter>
<!-- 【必须】 请修改为当前APP名包.PUSH_ACTION,如demo的包名为:com.qq.xgdemo -->
<action android:name="*****.PUSH_ACTION" />
</intent-filter>
</service>
<!-- 【必须】 增强xg_service存活率 -->
<service
android:name="com.tencent.android.tpush.service.XGDaemonService"
android:process=":xg_service_v3" />
<!-- 【必须】 【注意】authorities修改为 包名.AUTH_XGPUSH, 如demo的包名为:com.qq.xgdemo -->
<provider
android:name="com.tencent.android.tpush.XGPushProvider"
android:authorities="****.AUTH_XGPUSH"
android:exported="true" />
<!-- 【必须】 【注意】authorities修改为 包名.TPUSH_PROVIDER, 如demo的包名为:com.qq.xgdemo -->
<provider
android:name="com.tencent.android.tpush.SettingsContentProvider"
android:authorities="****.TPUSH_PROVIDER"
android:exported="false" />
<!-- 【必须】 【注意】authorities修改为 包名.TENCENT.MID.V3, 如demo的包名为:com.qq.xgdemo -->
<provider
android:name="com.tencent.mid.api.MidProvider"
android:authorities="****.TENCENT.MID.V3"
android:exported="true" />
**/
第六步:开启debug日志数据
XGPushConfig.enableDebug(getApplicationContext(), true);
第七步:token注册
XGPushManager.registerPush(getApplicationContext(), new XGIOperateCallback() {
@Override
public void onSuccess(Object data, int flag) {
//token在设备卸载重装的时候有可能会变
Log.d("TPush", "注册成功,设备token为:" + data);
}
@Override
public void onFail(Object data, int errCode, String msg) {
Log.d("TPush", "注册失败,错误码:" + errCode + ",错误信息:" + msg);
}
});
}
发送消息
接收消息: