具体步骤来自文档,更多参考文档(文档地址)
导入依赖
build.gradle文件中添加依赖
android {
......
defaultConfig {
//信鸽官网上注册的包名.注意application ID 和当前的应用包名以及 信鸽官网上注册应用的包名必须一致。
applicationId "你的包名"
......
ndk {
//根据需要 自行选择添加的对应cpu类型的.so库。
abiFilters 'armeabi', 'armeabi-v7a', 'arm64-v8a'
// 还可以添加 'x86', 'x86_64', 'mips', 'mips64'
}
manifestPlaceholders = [
XG_ACCESS_ID:"注册应用的accessid",
XG_ACCESS_KEY : "注册应用的accesskey",
]
......
}
......
}
dependencies {
......
//信鸽普通版本jar,不包含厂商通道
implementation 'com.tencent.xinge:xinge:4.0.5-release'
//implementation'com.tencent.xinge:xinge:4.3.2-beta'
//jg包
implementation'com.tencent.jg:jg:1.1'
//wup包
implementation 'com.tencent.wup:wup:1.0.0.E-release'
//mid包,minSdkVersion 14
implementation 'com.tencent.mid:mid:4.0.7-Release'
}
注意:
- 如果在添加以上 abiFilter 配置之后 Android Studio 出现以下提示:
NDK integration is deprecated in the current plugin. Consider trying the new experimental plugin.
则在 Project 根目录的 gradle.properties 文件中添加:
android.useDeprecatedNdk=true
- 如需监听消息请参考XGBaseReceiver接口或者是 demo 的 MessageReceiver 类。自行继承XGBaseReceiver并且在配置文件中配置如下内容:
<receiver android:name="完整的类名如:com.qq.xgdemo.receiver.MessageReceiver"
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>
- 4.X以上版本已经兼容了 Android P,默认支持HTTPS,如果要使用HTTP,需要自行配置(点击查看配置方法)
代码混淆
#XG
-keep public class * extends android.app.Service
-keep public class * extends android.content.BroadcastReceiver
-keep class com.tencent.android.tpush.** {* ;}
-keep class com.tencent.mid.** {* ;}
-keep class com.qq.taf.jce.** {*;}
-keep class com.tencent.bigdata.** {* ;}
#XG华为通道
-ignorewarning
-keepattributes *Annotation*
-keepattributes Exceptions
-keepattributes InnerClasses
-keepattributes Signature
-keepattributes SourceFile,LineNumberTable
-keep class com.hianalytics.android.**{*;}
-keep class com.huawei.updatesdk.**{*;}
-keep class com.huawei.hms.**{*;}
-keep class com.huawei.android.hms.agent.**{*;}
#XG小米通道
-keep class com.xiaomi.**{*;}
-keep public class * extends com.xiaomi.mipush.sdk.PushMessageReceiver
#XG魅族通道
-dontwarn com.meizu.cloud.pushsdk.**
-keep class com.meizu.cloud.pushsdk.**{*;}
添加必要的权限
AndroidMani.xml文件中增加信鸽推送必要权限,来自sdk自带demo,部分权限需要动态申请
<!-- 【必须】 信鸽SDK所需权限 -->
<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.WAKE_LOCK" />
<uses-permission android:name="android.permission.VIBRATE" />
<!-- 【常用】 信鸽SDK所需权限 -->
<uses-permission android:name="android.permission.RECEIVE_USER_PRESENT" />
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 【可选】 信鸽SDK所需权限 -->
<uses-permission android:name="android.permission.BROADCAST_STICKY" />
<uses-permission android:name="android.permission.KILL_BACKGROUND_PROCESSES" />
<uses-permission android:name="android.permission.BLUETOOTH" />
注册与反注册
具体参考api绑定账号注册
/*
为信鸽反注册与注册账号
*/
private void initPushRegister() {
XGPushManager.delAccount(mContext.getApplicationContext(), account, new XGIOperateCallback() {
@Override
public void onSuccess(Object o, int i) {
Log.d("TPush", "注销成功,设备token为:" + o);
}
@Override
public void onFail(Object o, int i, String s) {
Log.d("TPush", "注销失败,错误码:" + i + ",错误信息:" + s);
}
});
XGPushManager.bindAccount(mContext.getApplicationContext(), account, new XGIOperateCallback() {
@Override
public void onSuccess(Object o, int i) {
Log.d("TPush", "注册成功,设备token为:" + o);
}
@Override
public void onFail(Object o, int i, String s) {
Log.d("TPush", "注册失败,错误码:" + i + ",错误信息:" + s);
}
});
}
测试
集成sdk后,不需要额外的设置即可接受通知/消息
方法1,通过信鸽控制台,可以对绑定设备/账号推送通知/消息
方法2,后台集成对应SDK,发送消息/通知
点击通知后跳转活动
在信鸽推送控制台操作,可以发现通知中可以指定点击后续操作
默认点击通知会打开应用入口活动,可以打开指定的界面,打开指定的资源,或者自定义的内容
- 由于一般app带有登录界面,我们不希望应用后台运行时,重新运行登录入口,这时就需要在入口界面截断并判断是否需要重启
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_xgtransfer);
// 获取活动启动时的XGPushClickedResult
XGPushClickedResult clickedResult = XGPushManager.onActivityStarted(this);
// 从信鸽推送通知进入
if (clickedResult != null) {
// 如果简单的不希望通过信鸽通知重启入口活动,就直接finish()
// 如果希望判断主程序是否在后台运行,需要自己实现一个活动管理类,通过判断主活动是否存活来决定是否启动入口活动
// 判断主程序是否存活。是,跳转对应活动;否,启动splash登录
if (ActivityManager.getActivity(MainActivity.class) != null) {
startTargetActivity(intentString.getIntent_action());
finish();
} else {
startSplashActivity();
}
// 由于登录延迟,所以需要延时关闭本活动
new Handler().postDelayed(new Runnable() {
@Override
public void run() {
finish();
}
},2000);
}
Log.e(TAG, "onCreate: XGTransferActivity not ending currently");
}
ActivityMananger可以参考这里活动管理器小结BaseActivityManager
如果有各种通知,需要跳转不同的活动,这里建议按照sdk中推荐的第一种方法(1.3. 消息点击事件以及跳转页面方法)
实现方法与上方的splash类似,不过统一后台所有通知点击打开指定的活动,在一个活动里处理跳转的路由