一、导入相关的包,和在build.gradle的一些配置
二.在AndroidManifest.xml的配置和注册
<!-- 信鸽推送 start -->
<!-- YOUR_PACKAGE_PATH.CustomPushReceiver需要改为自己的Receiver: -->
<receiver
android:name=".XinGe.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>
<!--信鸽推送之华为配置 start******信鸽推送之华为Eclipse配置;这里注销使用AS配置可能影响环信的华为推送-->
<meta-data
android:name="com.huawei.hms.client.appid"
android:value="xxxxxxx" />
<activity
android:name="com.huawei.hms.activity.BridgeActivity"
android:configChanges="orientation|locale|screenSize|layoutDirection|fontScale"
android:excludeFromRecents="true"
android:exported="false"
android:hardwareAccelerated="true"
android:theme="@android:style/Theme.Translucent">
<meta-data
android:name="hwc-theme"
android:value="androidhwext:style/Theme.Emui.Translucent" />
</activity>
<!-- android:process=":updateProvider"加个process标签可适配华为低版本crash问题;华为打包提示错误 -->
<provider
android:name="com.huawei.hms.update.provider.UpdateProvider"
android:authorities="你项目的包名.hms.update.provider"
android:exported="false"
android:grantUriPermissions="true" />
<receiver android:name="com.huawei.hms.support.api.push.PushEventReceiver">
<intent-filter>
<!-- 接收通道发来的通知栏消息,兼容老版本PUSH -->
<action android:name="com.huawei.intent.action.PUSH" />
</intent-filter>
</receiver>
<!--<!– xxx.xx.xx为CP自定义的广播名称,比如: com.huawei.hmssample. HuaweiPushRevicer-->
<receiver android:name=".XinGe.receiver.HwReceiver">
<intent-filter>
<!-- 必须,用于接收TOKEN -->
<action android:name="com.huawei.android.push.intent.REGISTRATION" />
<!-- 必须,用于接收消息 -->
<action android:name="com.huawei.android.push.intent.RECEIVE" />
<!-- 可选,用于点击通知栏或通知栏上的按钮后触发onEvent回调 -->
<action android:name="com.huawei.android.push.intent.CLICK" />
<!-- 可选,查看PUSH通道是否连接,不查看则不需要 -->
<action android:name="com.huawei.intent.action.PUSH_STATE" />
</intent-filter>
</receiver>
<!-- 信鸽推送之华为配置 end -->
<!-- 信鸽推送之小米配置 start;版本3.2.6-release已不需要注册 -->
<receiver
android:name=".XinGe.receiver.MiReceiver"
android:exported="true">
<intent-filter>
<action android:name="com.xiaomi.mipush.RECEIVE_MESSAGE" />
</intent-filter>
<intent-filter>
<action android:name="com.xiaomi.mipush.MESSAGE_ARRIVED" />
</intent-filter>
<intent-filter>
<action android:name="com.xiaomi.mipush.ERROR" />
</intent-filter>
</receiver>
<!-- 信鸽推送之小米配置 end -->
<!-- 信鸽推送之魅族配置 start ;版本3.2.6-release已不需要注册-->
<receiver android:name=".XinGe.receiver.MzReceiver">
<intent-filter>
<!-- 接收push消息 -->
<action android:name="com.meizu.flyme.push.intent.MESSAGE" />
<!-- 接收register消息 -->
<action android:name="com.meizu.flyme.push.intent.REGISTER.FEEDBACK" />
<!-- 接收unregister消息 -->
<action android:name="com.meizu.flyme.push.intent.UNREGISTER.FEEDBACK" />
<action android:name="com.meizu.c2dm.intent.REGISTRATION" />
<action android:name="com.meizu.c2dm.intent.RECEIVE" />
<category android:name="你项目的包名" />
</intent-filter>
</receiver>
<!-- 信鸽推送之魅族配置 end -->
<!--信鸽推送 end-->
三.信鸽推送设置账号和解绑指定账号
1.启动并注册
// 信鸽推送设置账号
XGPushManager.registerPush(getApplicationContext(), loginInfo.getST_CUSTOMER_CODE());
//此接口会覆盖设备之前绑定过的账号,仅当前注册的账号生效;----测试得到之前绑定的账号也可以接受到推送消息
//XGPushManager.bindAccount(getApplicationContext(), loginInfo.getST_CUSTOMER_CODE());
2.解绑账号
// *******解除信鸽推送的性别标签和账号的绑定*******
// 删除信鸽推送的性别标签
XGPushManager.deleteTag(getApplicationContext(), SharePreferenceXutil.getUserGender());
// 账号解绑
XGPushManager.registerPush(getApplicationContext(), "*");
//XGPushManager.delAccount(getApplicationContext(), SharePreferenceXutil.getCustomerCode());
// //信鸽反注册,相当于删除了标签和解绑了账号
// XGPushManager.unregisterPush(getApplicationContext());
// *******解除信鸽推送的性别标签和账号的绑定*******
四、设置小米、华为等的推送通道的账号,并注册信鸽
// 开启信鸽日志输出
XGPushConfig.enableDebug(getApplicationContext(), true);
// 设置小米APPID和APPKEY
XGPushConfig.setMiPushAppId(getApplicationContext(), "xxxxxxxx");
XGPushConfig.setMiPushAppKey(getApplicationContext(), "xxxxxxxxxxxxxx");
// 打开第三方推送
XGPushConfig.enableOtherPush(getApplicationContext(), true);
//设置魅族APPID和APPKEY
XGPushConfig.setMzPushAppId(this, "xxxxxxxxxx");
XGPushConfig.setMzPushAppKey(this, "xxxxxxxxxxxxxxxxxx");
// 信鸽注册代码
// XGPushManager.bindAccount(this, SharePreferenceXutil.getCustomerCode(), new XGIOperateCallback() {
XGPushManager.registerPush(this, new XGIOperateCallback() {
@Override
public void onSuccess(Object data, int flag) {
L.e("注册成功,------------设备token为:" + data);
final String xgToken = String.valueOf(data);
if (!xgToken.equals(SharePreferenceXutil.getXGToken())) {
// 設置是否推送信息/更新推送列表
new GetNetworkInfo().setPush(xgToken, new CallBack() {
@Override
public void onResponse(String response) {
SetPushModel info = new Gson().fromJson(response, SetPushModel.class);
if (info.getRESULTCODE().getVIPCODE() == 0) {
// 保存信鸽Token
SharePreferenceXutil.saveXGToken(xgToken);
}
}
});
}
// 判断语言标签设置是否成功
if (SharePreferenceXutil.getLanguageTag().equals("")) {
// 语言标签设置失败时才再次设置语言标签
Utils.setXgLanguageTag(getApplicationContext());
}
}
@Override
public void onFail(Object data, int errCode, String msg) {
L.e("注册失败,-------------错误码:" + errCode + ",错误信息:" + msg);
}
});
五.点击推送消息跳转到相关的界面
@Override
protected void onResume() {
super.onResume();
init();
}
// @Override
// protected void onPause() {
// super.onPause();
// XGPushManager.onActivityStoped(this);
// }
private void init() {
//获取点击的推送消息的回掉返回的数据
XGPushClickedResult click = XGPushManager.onActivityStarted(this);
if (click == null) { // 判断是否来自信鸽的打开方式
startActivity(new Intent(this,MainActivity.class));
} else {
if (click.getActionType() == XGPushClickedResult.NOTIFACTION_CLICKED_TYPE) {
// 通知在通知栏被点击啦。。。。。
// APP自己处理点击的相关动作
// 这个动作可以在activity的onResume也能监听,请看第3点相关内容
PushParsing info = new Gson().fromJson(click.getCustomContent(), PushParsing.class);// 解析返回数据中CustomContent类中的数据
content = info.getST_CODE();
selectId = Integer.parseInt(info.getNO_TYPE());
// Android6.0以上(包括6.0)系统,不能只是在AndroidManifest.xml中进行配置,还要在程序代码中进行动态设置相应的权限。
//不判断是否有权限直接跳转到相应的界面的过程中会崩溃
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.M) {
if (ActivityCompat.checkSelfPermission(this, Manifest.permission.READ_PHONE_STATE) != PackageManager.PERMISSION_GRANTED) {
//requestPermissions(new String[]{Manifest.permission.READ_PHONE_STATE}, 2);//给了权限也不会直接跳转到相关界面,会跳转到主界面
ToastXutil.showToast(this, getString(R.string.language_needPhoneAuthorize));
startActivity(new Intent(this, MainActivity.class));
finish();
} else {
jumpOtherActivity();
}
} else {
jumpOtherActivity();
}
} else if (click.getActionType() == XGPushClickedResult.NOTIFACTION_DELETED_TYPE) {
// 通知被清除啦。。。。
// APP自己处理通知被清除后的相关动作
}
}
}
private void jumpOtherActivity() {
Intent intent = new Intent();
switch (selectId) {
case 0:
SharePreferenceXutil.saveStopHref(false);// 不阻止网址内的超链接跳转
intent.setClass(getApplicationContext(), xxx1.class);
intent.putExtra("url", content);
break;
case 1:
intent.setClass(getApplicationContext(), xxx2.class);
intent.putExtra("code", content);
break;
case 2:
intent.setClass(getApplicationContext(), xxx3.class);
intent.putExtra("Index", 1);
ArrayList<String> listCode = SharePreferenceXutil.getTypeCode();
if (listCode.indexOf(content) == -1) {
ToastXutil.showToast(getApplicationContext(), "No Type");
SharePreferenceXutil.saveTypeNameId(0);
} else {
SharePreferenceXutil.saveTypeNameId(listCode.indexOf(content) + 1);
intent.putExtra("ST_CODE", content);
}
break;
case 3:
String classifyStr = content.substring(0, content.indexOf(";"));
String brandsStr = content.substring(content.indexOf(";") + 1);
String classifyNames = getString(R.string.language_classify) +SharePreferenceXutil.getLanguageId();
intent.setClass(getApplicationContext(), xxx3.class);
intent.putExtra("Index", 1);
if (brandsStr.length() == 0) {
Utils.saveClassifyOrBrand(1, classifyStr, "0");
Utils.saveClassifyAndBrands(classifyNames, classifyStr);
intent.putExtra("filterField", "st_web_catalog" + "_" + classifyStr);
} else {
String brandsNames = getString(R.string.language_brands) +SharePreferenceXutil.getLanguageId();
Utils.saveClassifyOrBrand(2, classifyStr, brandsStr);
Utils.saveClassifyAndBrands(classifyNames, classifyStr);
Utils.saveClassifyAndBrands(brandsNames, brandsStr);
intent.putExtra("filterField", "st_web_catalog" + "_" + classifyStr + ";st_web_subcatalog_" + brandsStr);
}
break;
case 4:
intent.setClass(getApplicationContext(), xxx4.class);
intent.putExtra("OrderCode", content);// 订单号
break;
default:
intent.setClass(getApplicationContext(), MainActivity.class);
break;
}
startActivity(intent);
WelcomeActivity.this.finish();
}
// @Override
// public void onRequestPermissionsResult(int requestCode, String[] permissions, int[] grantResults) {
// super.onRequestPermissionsResult(requestCode, permissions, grantResults);
// if (requestCode == 1)
// if (grantResults[0] == PackageManager.PERMISSION_GRANTED) {// 取得权限
// jumpOtherActivity();//给了权限也不会跳到相应的界面
// } else {
// // 未取得权限
// ToastXutil.showToast(this, getString(R.string.language_needPhoneAuthorize));
// }
// }
六.导入权限和代码混淆等其他详情查看官方文档