时间:2021-05-20
最近在看推送方面的知识,用的是信鸽推送主要是因为后台用的是信鸽
推送用第三方推送,也就是在客户端建一个广播接收器,当服务器发送消息时发送到信鸽,信鸽再发送一次,广播接受器接受下;
我实现的功能比较简单,当app在运行状态时,会在主页展示一个弹窗展示推送的消息;如果app不在运行状态且service没被销毁就展示默认的通知
那么如何在主页展示弹窗:当广播接受器收到我要的消息时,用观察者模式,收到消息在发送个消息个主界面
官方的Demo连接:http://xg.qq.com/xg/help/ctr_help/download
修改后Demo的地址:http://download.csdn.net/detail/qq_29774291/9635735
1.先按照官网的例子添加好权限及服务有些服务要改成自己的包名;
2.把官网的广播接受器先复制到自己的项目中,再在清单文件中添加;
3.随后添加从官网给出的3个AccessKey了
<meta-data android:name="com.tencent.rdm.uuid" android:value="eb5fa555d70c3246a4944f55be8c266b" /><!-- 【必须】 请将YOUR_ACCESS_ID修改为APP的AccessId,“21”开头的10位数字,中间没空格 --><!-- 【必须】 请修改为APP的AccessId,“21”开头的10位数字,中间没空格 --><meta-dataandroid:name="XG_V2_ACCESS_ID"android:value="2100219302" /><!-- 【必须】 请修改为APP的AccessKey,“A”开头的12位字符串,中间没空格 --><meta-dataandroid:name="XG_V2_ACCESS_KEY"android:value="A15KJ71W9ELC" />4.现在在主界面中注册信鸽推送主要是获取一个token,然后可以上传给服务端,现在服务器就可以给你发送消息了;当然从信鸽官方后台可以发送消息,但是从信鸽后台发送的消息有时会接受不到,这点做的完全不及极光推送好
XGPushConfig.enableDebug(this, true);这句发布的时候记得改为false或删除
//信鸽startprivate String token;private Message message = null;private void XGInit() {// TODO Auto-generated method stubXGPushConfig.enableDebug(this, true);// 如果需要知道注册是否成功,请使用registerPush(getApplicationContext(),// XGIOperateCallback)带callback版本// 如果需要绑定账号,请使用registerPush(getApplicationContext(),account)版本// 具体可参考详细的开发指南// 传递的参数为ApplicationContext//Context context = getApplicationContext();//1.获取设备的TokenHandler handler = new HandlerExtension(MainActivity.this);message = handler.obtainMessage();XGPushManager.registerPush(getApplicationContext(), new XGIOperateCallback() {@Overridepublic void onSuccess(Object data, int flag) {// TODO Auto-generated method stubLog.d("jiejie", "+++ register push sucess. token:" + data + " " + flag);token = data + "";message.obj = "+++ register push sucess. token:" + data;System.out.println(token);message.sendToTarget();}@Overridepublic void onFail(Object data, int errCode, String msg) {// TODO Auto-generated method stubLog.d("jiejie", "+++ register push fail. token:" + data+ ", errCode:" + errCode + ",msg:"+ msg);message.obj = "+++ register push fail. token:" + data+ ", errCode:" + errCode + ",msg:" + msg;message.sendToTarget();}});}private static class HandlerExtension extends Handler{WeakReference<MainActivity> mActivity;HandlerExtension(MainActivity activity) {mActivity = new WeakReference<MainActivity>(activity);}@Overridepublic void handleMessage(Message msg) {// TODO Auto-generated method stubsuper.handleMessage(msg);MainActivity theActivity = mActivity.get();if(theActivity == null){theActivity = new MainActivity();}if(msg != null){Log.d(Constants.LogTag, msg.obj.toString());System.out.println("ddd"+msg.obj.toString());}}}5.修改广播接受器中的onTextMessage方法,当消息发送来时,将消息发送到主界面,不展示通知
不过你先要知道你app是否正在运行状态
/*** 判断是否运行在前台* * @param context* @return*/public static boolean isRunningForeground(Context context) {String packageName = getPackageName(context);String topActivityClassName = getTopActivityName(context);Log.d("TAG", "packageName=" + packageName + ",topActivityClassName=" + topActivityClassName);if (packageName != null && topActivityClassName != null && topActivityClassName.startsWith(packageName)) {Log.d("TAG", "---> isRunningForeGround");return true;} else {Log.d("TAG", "---> isRunningBackGround");return false;}}// 方法2、通过RunningAppProcessInfo类判断(不需要额外权限):public static boolean isBackground(Context context) {ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();for (RunningAppProcessInfo appProcess : appProcesses) {if (appProcess.processName.equals(context.getPackageName())) {if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_BACKGROUND) {Log.i("后台", appProcess.processName);return true;} else {Log.i("前台", appProcess.processName);return false;}}}return false;}6.通知EventBus来实现观察者模式在广播接收器中发送消息
// 消息透传@Overridepublic void onTextMessage(Context context, XGPushTextMessage message) {String text = "收到消息:" + message.toString();EventBus.getDefault().post(text);System.out.println(text);// 获取自定义key-valuePushTextMessage pushTextMessage = new PushTextMessage();String title = message.getTitle();String content = message.getContent();pushTextMessage.setTitle(title);pushTextMessage.setContent(content); String customContent = message.getCustomContent();if (customContent != null && customContent.length() != 0) {try {// JSONObject obj = new JSONObject(customContent);// // key1为前台配置的key// if (!obj.isNull("key")) {// String value = obj.getString("key");// LogUtils.log(LogTag, "get custom value:" + value);// }CustomContent custom = com.alibaba.fastjson.JSONObject.parseObject(customContent, CustomContent.class);if (custom != null) {pushTextMessage.setCustomContent(custom);}// ...} catch (Exception e) {System.out.println(e + "d");e.printStackTrace();}}show(context, text);Log.d("jiejie", "pushTextMessage:" + pushTextMessage);// EventBus.getDefault().post(pushTextMessage);try {// APP自主处理消息的过程...boolean isForeground = AppUtil.isRunningForeground(context);Log.d("jiejie", isForeground + "d");if (isForeground) {EventBus.getDefault().post(pushTextMessage);} else {notify(context, title, content);}} catch (Exception e) {System.out.println(e + "ddd");e.printStackTrace();}7.在主界面中接受EventBus发送的消息,展示一个弹窗
@Subscribepublic void onMessageReviced(final PushTextMessage pushTextMessage){Log.d("jiejie", "好" + " 标题" +pushTextMessage.getTitle() + " 内容:" +pushTextMessage.getContent() + "CustomContent" + pushTextMessage.getCustomContent().getCmd());if(pushTextMessage != null){showAlertDialog(this, pushTextMessage);}}private void showAlertDialog(Context context,PushTextMessage text){AlertDialog.Builder dialog = new AlertDialog.Builder(context);dialog.setTitle("推送的标题");dialog.setMessage(text.getContent());dialog.setPositiveButton("确认", new DialogInterface.OnClickListener() {@Overridepublic void onClick(DialogInterface arg0, int arg1) {// TODO Auto-generated method stub}});AlertDialog mDialog = dialog.create();mDialog.show();}@Overrideprotected void onDestroy() {// TODO Auto-generated method stubsuper.onDestroy();EventBus.getDefault().unregister(this);}以上所述是小编给大家介绍的iOS中关于信鸽推送的使用demo详解,希望对大家有所帮助,如果大家有任何疑问请给我留言,小编会及时回复大家的。在此也非常感谢大家对网站的支持!
声明:本页内容来源网络,仅供用户参考;我单位不保证亦不表示资料全面及准确无误,也不保证亦不表示这些资料为最新信息,如因任何原因,本网内容或者用户因倚赖本网内容造成任何损失或损害,我单位将不会负任何法律责任。如涉及版权问题,请提交至online#300.cn邮箱联系删除。
IOS10远程推送适配iOS10推送新增了UserNotificationsFramework,使用起来其实很简单。建议看看极光推送的Demo,里面写的更详细。
先说说为啥选用极光推送作为第三方的推送服务。首先我所了解的推送产品有信鸽、个推、极光,之前用到过个推,感觉还不错,只是代码没有极光简洁,信鸽是腾讯旗下的产品,出
Android中ThreadLocal使用示例概要:Demo描述:ThreadLocal使用示例.关于ThreadLocal的官方文档描述Implementsa
IOS开发之Object-C中的对象详解前言关于C语言的基础部分已经记录完毕,接下来就是学习Object-C了,编写oc程序需要使用Foundation框架。下
苹果在今天推送iOS10.1.1正式版新版本,新版iOS10.1.1怎么升级更新呢?下面小编分享下iOS10.1.1正式版新版升级更新教程详解。 新版iO