关于Android端配置极光推送

来源:互联网 发布:硅藻泥脚垫 知乎 编辑:程序博客网 时间:2024/06/06 23:16

因为业务需要,android客户端需要加推送,原来采用的百度推送,但是小米手机有时候收不到,后来换成了极光推送,极光的话所有设备都能收到推送,但是在高峰的时候会推迟,博主说的免费版的,收费的没用过,也不错评论

博主用的android studio开发的,.so文件放置的位置啥的可能和eclipse有点不同,感觉用android studio开发jni一类的真的好费劲,博主现在老腻歪了,唉,废话不多说,进入正题:

首先,去极光推送官网注册一系列流程,不过貌似不用认证,老长时间注册的了,忘得差不多了,然后左侧有添加新应用


开始创建应用,注册的时候必须把包名写对,可以直接把清单文件中的包名复制就可了,当然,android studio一套代码开发多个包的话例外


这里有两个key,第一个的话是android客户端需要配置的,然后就是后台,后台两个都需要,注意的是包名一旦定义便不能更改,定义的话极光推送会自己校验的,给出相应的提示,告诉能不能使用。

再有就是将相应的配置到自己的app中,博主这里直接下载了相应的demo,进行配置,这里的话可以先运行demo,测试一下

因为这个demo的包名和自己的一样,所以只能存在一个demo,好,现在开始配置自己的demo

第一步需要创建两个包,下面用箭头标注了


这里吐槽一下,如果用android studio建立的工程更改过名字的话一般配置的话都不会配置成功的,貌似是因为c语言是弱语言的原因,所以说争取不要配置改过名的工程。

然后是配置lib包


再有就是配置清单文件,最重要的是前面那几行,还有就是service的intent的具体名称


这个千万不要忘了,博主第一次没注意就给忘了,收不到推送

再有就是配置服务,看过腾讯的飞鸽,感觉飞鸽的比极光要好点,能让服务的存活率更高,因为飞鸽的不仅用到了服务还用到了广播重启服务,而极光的仅仅用来接收推送消息有时间大家可以了解一下


名字和路径都要对应,再有就是需要初始化的


还有就是一个util,剩下的activity可以根据需要自己定义就可以了


还有就是xml文件,考进去就可以了

反过来看一下极光的demo


剩下的就是需要初始化,就是入口的activity,或者fragmentactivity,否则的话后台没有办法统计

package cn.edu.sjzc.student.uiActivity;import android.content.BroadcastReceiver;import android.content.Context;import android.content.Intent;import android.content.IntentFilter;import android.content.SharedPreferences;import android.content.SharedPreferences.Editor;import android.os.Bundle;import android.os.Parcelable;import android.support.v4.view.PagerAdapter;import android.support.v4.view.ViewPager;import android.support.v4.view.ViewPager.OnPageChangeListener;import android.view.LayoutInflater;import android.view.MotionEvent;import android.view.View;import android.view.View.OnTouchListener;import android.view.Window;import java.util.ArrayList;import java.util.List;import cn.edu.sjzc.student.R;import cn.edu.sjzc.student.uiFragment.MainTabActivity;import cn.edu.sjzc.student.util.JpushUtil;import cn.jpush.android.api.JPushInterface;public class GuideActivity extends BaseActivity implements OnTouchListener {    private ViewPager viewPager;    private List<View> listView;    private List<View> listDots;    private int thePos = 0;    private int oldPosition;    private int count = 0;    private long firstTime = 0;    private long secondTime = 0;    @Override    public void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        requestWindowFeature(Window.FEATURE_NO_TITLE);        JPushInterface.init(this);        init();        registerMessageReceiver();  // used for receive msg        if (isFirstStart()) {            setTarget();            setContentView(R.layout.activity_guide);            initViewPager();            initDots();        } else {            Intent it = new Intent();            it.setClass(this, AppStartActivicy.class);            startActivity(it);            finish();        }    }    // 初始化 JPush。如果已经初始化,但没有登录成功,则执行重新登录。    private void init() {        JPushInterface.init(getApplicationContext());    }    @Override    protected void onResume() {        isForeground = true;        super.onResume();        JPushInterface.onResume(this);    }    @Override    protected void onPause() {        isForeground = false;        super.onPause();        JPushInterface.onPause(this);    }    @Override    protected void onDestroy() {        unregisterReceiver(mMessageReceiver);        super.onDestroy();    }    //for receive customer msg from jpush server    private MessageReceiver mMessageReceiver;    public static final String MESSAGE_RECEIVED_ACTION = "cn.edu.sjzc.student.broadcasterceiver.MESSAGE_RECEIVED_ACTION";    public static final String KEY_TITLE = "title";    public static final String KEY_MESSAGE = "message";    public static final String KEY_EXTRAS = "extras";    public void registerMessageReceiver() {        mMessageReceiver = new MessageReceiver();        IntentFilter filter = new IntentFilter();        filter.setPriority(IntentFilter.SYSTEM_HIGH_PRIORITY);        filter.addAction(MESSAGE_RECEIVED_ACTION);        registerReceiver(mMessageReceiver, filter);    }    public class MessageReceiver extends BroadcastReceiver {        @Override        public void onReceive(Context context, Intent intent) {            if (MESSAGE_RECEIVED_ACTION.equals(intent.getAction())) {                String messge = intent.getStringExtra(KEY_MESSAGE);                String extras = intent.getStringExtra(KEY_EXTRAS);                StringBuilder showMsg = new StringBuilder();                showMsg.append(KEY_MESSAGE + " : " + messge + "\n");                if (!JpushUtil.isEmpty(extras)) {                    showMsg.append(KEY_EXTRAS + " : " + extras + "\n");                }//                setCostomMsg(showMsg.toString());            }        }    }    /**     */    private boolean isFirstStart() {        SharedPreferences share = getSharedPreferences("fs", MODE_PRIVATE);        String target = share.getString("isfs", "0");        if (target.equals("0")) {            return true;        } else {            return false;        }    }    /**     */    private void setTarget() {        SharedPreferences share = getSharedPreferences("fs", MODE_PRIVATE);        Editor editor = share.edit();        editor.putString("isfs", "no");        editor.commit();    }    private void initViewPager() {        viewPager = (ViewPager) findViewById(R.id.viewpager);        listView = new ArrayList<View>();        LayoutInflater inflater = getLayoutInflater();        listView.add(inflater.inflate(R.layout.lay1, null));        listView.add(inflater.inflate(R.layout.lay2, null));        listView.add(inflater.inflate(R.layout.lay3, null));        listView.add(inflater.inflate(R.layout.lay4, null));        for (int i = 0; i < listView.size(); i++) {            View view = (View) listView.get(i);            view.setOnTouchListener(this);        }        viewPager.setAdapter(new MyPagerAdapter(listView));        viewPager.setOnPageChangeListener(new MyPagerChangeListener());    }    private void initDots() {        listDots = new ArrayList<View>();        listDots.add(findViewById(R.id.dot01));        listDots.add(findViewById(R.id.dot02));        listDots.add(findViewById(R.id.dot03));        listDots.add(findViewById(R.id.dot04));    }    public class MyPagerChangeListener implements OnPageChangeListener {        public void onPageScrollStateChanged(int arg0) {            // TODO Auto-generated method stub        }        public void onPageScrolled(int arg0, float arg1, int arg2) {            // TODO Auto-generated method stub        }        public void onPageSelected(int position) {            ((View) listDots.get(position))                    .setBackgroundResource(R.drawable.dot_focused);            ((View) listDots.get(oldPosition))                    .setBackgroundResource(R.drawable.dot_normal);            oldPosition = position;            thePos = position;            System.out.println(thePos);        }    }    public class MyPagerAdapter extends PagerAdapter {        private List<View> list;        public MyPagerAdapter(List<View> list) {            this.list = list;        }        @Override        public void destroyItem(View view, int index, Object arg2) {            // TODO Auto-generated method stub            ((ViewPager) view).removeView(list.get(index));        }        @Override        public void finishUpdate(View arg0) {            // TODO Auto-generated method stub        }        @Override        public int getCount() {            // TODO Auto-generated method stub            return list.size();        }        @Override        public Object instantiateItem(View view, int index) {            ((ViewPager) view).addView(list.get(index), 0);            return list.get(index);        }        @Override        public boolean isViewFromObject(View view, Object object) {            // TODO Auto-generated method stub            return view == (object);        }        @Override        public void restoreState(Parcelable arg0, ClassLoader arg1) {            // TODO Auto-generated method stub        }        @Override        public Parcelable saveState() {            // TODO Auto-generated method stub            return null;        }        @Override        public void startUpdate(View arg0) {            // TODO Auto-generated method stub        }    }    public boolean onTouch(View arg0, MotionEvent event) {        if (MotionEvent.ACTION_DOWN == event.getAction() && thePos == 3) {            count++;            if (count == 1) {                firstTime = System.currentTimeMillis();            } else {                secondTime = System.currentTimeMillis();                if (secondTime - firstTime > 0) {                    Intent it = new Intent();                    it.setClass(this, LoginDemoActivity.class);                    startActivity(it);                    finish();                }                count = 0;                firstTime = 0;                secondTime = 0;            }        }        return true;    }}

最重要的是要放在相应的生命周期中,如果不是在第一配置的话配送会收到但是后台却不能统计,然后需要进行测试

一个是通知栏,另一个是log打印

收到的推送用户可以自定义显示

package cn.edu.sjzc.student.uiActivity;import cn.edu.sjzc.student.R;import cn.edu.sjzc.student.app.UserApplication;import cn.jpush.android.api.JPushInterface;import android.app.Activity;import android.content.Intent;import android.content.SharedPreferences;import android.os.Bundle;import android.view.View;import android.view.ViewGroup.LayoutParams;import android.widget.ImageButton;import android.widget.TextView;public class TestActivity extends BaseActivity {    private TextView jpush_title, jpush_content;    private String title, content, number;    private ImageButton jpush_back;    @Override    protected void onCreate(Bundle savedInstanceState) {        super.onCreate(savedInstanceState);        setContentView(R.layout.activity_test);        initView();        initData();    }    private void initView() {        TextView tv = new TextView(this);        tv.setText("用户自定义打开的Activity");        Intent intent = getIntent();        if (null != intent) {            Bundle bundle = getIntent().getExtras();            title = bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE);            content = bundle.getString(JPushInterface.EXTRA_ALERT);        }        jpush_back = (ImageButton) findViewById(R.id.jpush_back);        jpush_back.setOnClickListener(this);        jpush_title = (TextView) findViewById(R.id.jpush_title);        jpush_content = (TextView) findViewById(R.id.jpush_content);    }    private void initData() {        SharedPreferences userdata = this.getSharedPreferences(UserApplication.USER_DATA, 0);        number = userdata.getString(UserApplication.USER_DATA_NUMBER, "");        jpush_title.setText(title);        jpush_content.setText(content);    }    @Override    public void onClick(View v) {        super.onClick(v);        switch (v.getId()) {            case R.id.jpush_back:                finish();                break;        }    }}
基本这样就配置成功了,剩下的深入的可以看极光的api,写的很好很详细


0 0
原创粉丝点击