个推接入注意事项总结

    之前没有接入过个推,现在总结下接入个推的坑。接入文档就不说了,官方已经很详细了。

   下面只说重点和遇到的坑

  1. build.gradle配置文件

manifestPlaceholders = [
    GETUI_APP_ID : "APP_ID",
    GETUI_APP_KEY : "APP_KEY",
    GETUI_APP_SECRET : "APP_SECRET"
]

  2. 通知栏图标

      最好和官方说的尺寸一样,重点是命名,客户端图片名字要和公司服务器配置推送的图标一样,比如getui_push.png。要两端一致,不能有改动。

   3.模拟器上要运行程序需要加些配置,但加了个推就失效了

/**
     * 运行到真机上,必须注释掉下面代码,否则所有推送设置失效
     */
//    splits {
//        abi {
//            enable true
//            reset()
//            include 'x86', 'armeabi-v7a','x86_64'
//            universalApk true
//        }
//    }

   4.处理信息地方(只能处理透传信息,通知栏的标题和内容是处理不到的)

 @Override
    public void onReceiveMessageData(Context context, GTTransmitMessage msg) {
        String appid = msg.getAppid();
        String taskid = msg.getTaskId();
        String messageid = msg.getMessageId();
        byte[] payload = msg.getPayload();
        String pkg = msg.getPkgName();
        String cid = msg.getClientId();

        // 第三方回执调用接口,actionid范围为90000-90999,可根据业务场景执行
        boolean result = PushManager.getInstance().sendFeedbackMessage(context, taskid, messageid, 90001);
        
        if (payload == null) {
            Log.e(TAG, "receiver payload = null");
        } else {
            sendMessage(new String(payload), 0);
        }

    }
private void sendMessage(String data, int what) {
        Message msg = Message.obtain();
        msg.what = what;
        msg.obj = data;
        MyApplication.sendMessage(msg);
    }
在MyApplication处理信息,显示等操作
public class PushHandler extends Handler {

        @Override
        public void handleMessage(Message msg) {
            switch (msg.what) {
                case 0:
                    //处理推送信息
                    if (null != msg.obj) {
                        String msgCustom = (String) msg.obj;
                        ToastUtils.showLong(sContext,msgCustom);
                        LogUtils.i("msgCustom", msgCustom);
                    }
               }
            }
       }

    5.应用前台,后台运行,不运行(这只是finish所有Activity,没有关闭进程)判断。注:关闭进程是收不到推送

经常需要用到前台和后台处理不同的逻辑的。项目中用到的是通知栏绑定透传信息+透传信息来处理
/**
     * 辅助返回应用启动状态
     */
    private int checkAppRunning(Context context) {
        ActivityManager am = (ActivityManager) context.getSystemService(Context.ACTIVITY_SERVICE);
        List<ActivityManager.RunningTaskInfo> list = am.getRunningTasks(100);
        for (ActivityManager.RunningTaskInfo info : list) {
            if (info.baseActivity.getPackageName().equals(MY_PKG_NAME)) {
                return APP_BASE;//不用,经常有问题
            }
            if (info.topActivity.getPackageName().equals(MY_PKG_NAME)) {
                return APP_TOP;//不用,经常有问题
            }
        }
        return APP_NOT_STARTED;//可用,用来返回不运行状态,但没有关闭进程的
    }


public int isRunningForeground(Context context){
        String packageName=getPackageName(context);
        String topActivityClassName=getTopActivityName(context);
        //System.out.println("packageName="+packageName+",topActivityClassName="+topActivityClassName);
        if (packageName!=null&&topActivityClassName!=null&&topActivityClassName.startsWith(packageName)) {
            //System.out.println("---> isRunningForeGround");
            return APP_TOP; //前台运行,用户正在用
        } else {
            //System.out.println("---> isRunningBackGround");
            return APP_BASE;  //后台运行,用户在用其他应用
        }
    }


    public  String getTopActivityName(Context context){
        String topActivityClassName=null;
        ActivityManager activityManager =
                (ActivityManager)(context.getSystemService(android.content.Context.ACTIVITY_SERVICE )) ;
        List<ActivityManager.RunningTaskInfo> runningTaskInfos = activityManager.getRunningTasks(1) ;
        if(runningTaskInfos != null){
            ComponentName f=runningTaskInfos.get(0).topActivity;
            topActivityClassName=f.getClassName();
        }
        return topActivityClassName;
    }

    public String getPackageName(Context context){
        String packageName = context.getPackageName();
        return packageName;
    }

  6.有时点击通知栏不启动收起问题

/**
     *
     * 收起通知栏
     * @param context
     */
    public static void collapseStatusBar(Context context) {
        try {
            Object statusBarManager = context.getSystemService("statusbar");
            Method collapse;

            if (Build.VERSION.SDK_INT <= 16) {
                collapse = statusBarManager.getClass().getMethod("collapse");
            } else {
                collapse = statusBarManager.getClass().getMethod("collapsePanels");
            }
            collapse.invoke(statusBarManager);
        } catch (Exception localException) {
            localException.printStackTrace();
        }
    }

差不多遇到的问题就这些,还有问题或者不对的,加我QQ:893151960

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值