zoukankan      html  css  js  c++  java
  • 信鸽推送的使用

    最近在看推送方面的知识,用的是信鸽推送主要是因为后台用的是信鸽

    推送用第三方推送,也就是在客户端建一个广播接收器,当服务器发送消息时发送到信鸽,信鸽再发送一次,广播接受器接受下;

    我实现的功能比较简单,当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-data
                android:name="XG_V2_ACCESS_ID"
                android:value="2100219302" />
            <!-- 【必须】 请修改为APP的AccessKey,“A”开头的12位字符串,中间没空格 -->
            <meta-data
                android:name="XG_V2_ACCESS_KEY"
                android:value="A15KJ71W9ELC" />

    4.现在在主界面中注册信鸽推送主要是获取一个token,然后可以上传给服务端,现在服务器就可以给你发送消息了;当然从信鸽官方后台可以发送消息,但是从信鸽后台发送的消息有时会接受不到,这点做的完全不及极光推送好

    XGPushConfig.enableDebug(this, true);这句发布的时候记得改为false或删除
     1 //信鸽start
     2         private String token;
     3         private Message message = null;
     4     private void XGInit() {
     5         // TODO Auto-generated method stub
     6         XGPushConfig.enableDebug(this, true);
     7         // 如果需要知道注册是否成功,请使用registerPush(getApplicationContext(),
     8         // XGIOperateCallback)带callback版本
     9         // 如果需要绑定账号,请使用registerPush(getApplicationContext(),account)版本
    10         // 具体可参考详细的开发指南
    11         // 传递的参数为ApplicationContext
    12         //Context context = getApplicationContext();
    13         //1.获取设备的Token
    14         Handler handler = new HandlerExtension(MainActivity.this);
    15         message = handler.obtainMessage();
    16         XGPushManager.registerPush(getApplicationContext(), new XGIOperateCallback() {
    17             
    18             @Override
    19             public void onSuccess(Object data, int flag) {
    20                 // TODO Auto-generated method stub
    21                 Log.d("jiejie", "+++ register push sucess. token:" + data  + "  " + flag);
    22                 token = data + "";
    23                 message.obj = "+++ register push sucess. token:" + data;
    24                 System.out.println(token);
    25                 message.sendToTarget();
    26             }
    27             
    28             @Override
    29             public void onFail(Object data, int errCode, String msg) {
    30                 // TODO Auto-generated method stub
    31                 Log.d("jiejie", "+++ register push fail. token:" + data
    32                         + ", errCode:" + errCode + ",msg:"
    33                         + msg);
    34                 message.obj = "+++ register push fail. token:" + data
    35                         + ", errCode:" + errCode + ",msg:" + msg;
    36                 message.sendToTarget();
    37             }
    38         });
    39     }
    40     private static class HandlerExtension extends Handler{
    41         WeakReference<MainActivity> mActivity;
    42         HandlerExtension(MainActivity activity) {
    43             mActivity = new WeakReference<MainActivity>(activity);
    44         }
    45         @Override
    46         public void handleMessage(Message msg) {
    47             // TODO Auto-generated method stub
    48             super.handleMessage(msg);
    49             MainActivity theActivity = mActivity.get();
    50             if(theActivity == null){
    51                 theActivity = new MainActivity();
    52             }
    53             if(msg != null){
    54                 Log.d(Constants.LogTag, msg.obj.toString());
    55                 System.out.println("ddd"+msg.obj.toString());
    56             }
    57         }
    58     }

    5.修改广播接受器中的onTextMessage方法,当消息发送来时,将消息发送到主界面,不展示通知

    不过你先要知道你app是否正在运行状态

     1  /**
     2      * 判断是否运行在前台
     3      * 
     4      * @param context
     5      * @return
     6      */
     7     public static boolean isRunningForeground(Context context) {
     8         String packageName = getPackageName(context);
     9         String topActivityClassName = getTopActivityName(context);
    10         Log.d("TAG", "packageName=" + packageName + ",topActivityClassName=" + topActivityClassName);
    11         if (packageName != null && topActivityClassName != null && topActivityClassName.startsWith(packageName)) {
    12             Log.d("TAG", "---> isRunningForeGround");
    13             return true;
    14         } else {
    15             Log.d("TAG", "---> isRunningBackGround");
    16             return false;
    17         }
    18     }
    19 
    20     // 方法2、通过RunningAppProcessInfo类判断(不需要额外权限):
    21 
    22     public static boolean isBackground(Context context) {
    23         ActivityManager activityManager = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
    24         List<RunningAppProcessInfo> appProcesses = activityManager.getRunningAppProcesses();
    25         for (RunningAppProcessInfo appProcess : appProcesses) {
    26             if (appProcess.processName.equals(context.getPackageName())) {
    27                 if (appProcess.importance == RunningAppProcessInfo.IMPORTANCE_BACKGROUND) {
    28                     Log.i("后台", appProcess.processName);
    29                     return true;
    30                 } else {
    31                     Log.i("前台", appProcess.processName);
    32                     return false;
    33                 }
    34             }
    35         }
    36         return false;
    37     }

    6.通知EventBus来实现观察者模式在广播接收器中发送消息

     1  // 消息透传
     2     @Override
     3     public void onTextMessage(Context context, XGPushTextMessage message) {
     4         String text = "收到消息:" + message.toString();
     5         EventBus.getDefault().post(text);
     6         System.out.println(text);
     7         // 获取自定义key-value
     8         PushTextMessage pushTextMessage = new PushTextMessage();
     9 
    10         String title = message.getTitle();
    11         String content = message.getContent();
    12         pushTextMessage.setTitle(title);
    13         pushTextMessage.setContent(content);       
    14         String customContent = message.getCustomContent();
    15         if (customContent != null && customContent.length() != 0) {
    16             try {
    17                 // JSONObject obj = new JSONObject(customContent);
    18                 // // key1为前台配置的key
    19                 // if (!obj.isNull("key")) {
    20                 // String value = obj.getString("key");
    21                 // LogUtils.log(LogTag, "get custom value:" + value);
    22                 // }
    23                 CustomContent custom = com.alibaba.fastjson.JSONObject.parseObject(customContent, CustomContent.class);
    24                 if (custom != null) {
    25                     pushTextMessage.setCustomContent(custom);
    26                 }
    27 
    28                 // ...
    29             } catch (Exception e) {
    30                 System.out.println(e + "d");
    31                 e.printStackTrace();
    32             }
    33         }
    34         show(context, text);
    35         Log.d("jiejie", "pushTextMessage:" + pushTextMessage);
    36        // EventBus.getDefault().post(pushTextMessage);
    37         try {
    38             // APP自主处理消息的过程...
    39             boolean isForeground = AppUtil.isRunningForeground(context);
    40             Log.d("jiejie", isForeground + "d");
    41             if (isForeground) {
    42                 EventBus.getDefault().post(pushTextMessage);
    43             } else {
    44                 notify(context, title, content);
    45             }
    46         } catch (Exception e) {
    47             System.out.println(e  + "ddd");
    48             e.printStackTrace();
    49         }

    7.在主界面中接受EventBus发送的消息,展示一个弹窗

     1 @Subscribe
     2     public void onMessageReviced(final PushTextMessage pushTextMessage){
     3         Log.d("jiejie", "好"  + "  标题" +pushTextMessage.getTitle() + " 内容:" +pushTextMessage.getContent()  + "CustomContent" + pushTextMessage.getCustomContent().getCmd());
     4         if(pushTextMessage != null){
     5             showAlertDialog(this, pushTextMessage);
     6         }
     7     }
     8     private void showAlertDialog(Context context,PushTextMessage text){
     9         AlertDialog.Builder dialog = new AlertDialog.Builder(context);
    10         dialog.setTitle("推送的标题");
    11         dialog.setMessage(text.getContent());
    12         dialog.setPositiveButton("确认", new DialogInterface.OnClickListener() {
    13             
    14             @Override
    15             public void onClick(DialogInterface arg0, int arg1) {
    16                 // TODO Auto-generated method stub
    17                 
    18             }
    19         });
    20         AlertDialog mDialog = dialog.create();
    21         mDialog.show();
    22     }
    23     
    24     @Override
    25     protected void onDestroy() {
    26         // TODO Auto-generated method stub
    27         super.onDestroy();
    28         EventBus.getDefault().unregister(this);
    29     }
  • 相关阅读:
    matlab播放音乐
    virtualbox安装增强功能时【未能加载虚拟光盘】
    VirtualBox piix4_smbus Error
    VirtualBox虚拟机运行Ubuntu如何不卡
    微信支付注意事项
    ListView实现RadioButton的单选效果
    他山之石____Java 线程池的原理与实现
    线程池的使用____银行业务调度系统
    基础加强____【动态代理 & AOP】【实现类Spring的AOP框架】
    基础加强____【Java类加载器 & "委托机制"】
  • 原文地址:https://www.cnblogs.com/wangfengdange/p/5923434.html
Copyright © 2011-2022 走看看