关于Android端配置极光推送

因为业务需要,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;@Overridepublic void onCreate(Bundle savedInstanceState) {super.onCreate(savedInstanceState);requestWindowFeature(Window.FEATURE_NO_TITLE);JPushInterface.init(this);init();registerMessageReceiver(); // used for receive msgif (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());}@Overrideprotected void onResume() {isForeground = true;super.onResume();JPushInterface.onResume(this);}@Overrideprotected void onPause() {isForeground = false;super.onPause();JPushInterface.onPause(this);}@Overrideprotected void onDestroy() {unregisterReceiver(mMessageReceiver);super.onDestroy();}//for receive customer msg from jpush serverprivate 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 {@Overridepublic 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;}@Overridepublic void destroyItem(View view, int index, Object arg2) {// TODO Auto-generated method stub((ViewPager) view).removeView(list.get(index));}@Overridepublic void finishUpdate(View arg0) {// TODO Auto-generated method stub}@Overridepublic int getCount() {// TODO Auto-generated method stubreturn list.size();}@Overridepublic Object instantiateItem(View view, int index) {((ViewPager) view).addView(list.get(index), 0);return list.get(index);}@Overridepublic boolean isViewFromObject(View view, Object object) {// TODO Auto-generated method stubreturn view == (object);}@Overridepublic void restoreState(Parcelable arg0, ClassLoader arg1) {// TODO Auto-generated method stub}@Overridepublic Parcelable saveState() {// TODO Auto-generated method stubreturn null;}@Overridepublic 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打印

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

别人失去了信心,他却下决心实现自己的目标。

关于Android端配置极光推送

相关文章:

你感兴趣的文章:

标签云: