首先,在官网新建应用配置好,会有一个demo可以下载,下下来之后把libs文件夹下的东西都考到as工程下的libs包下,然后添加好依赖!
其次,根据demo下的java文件,进行极光推送初始化
/** * @author 马鹏昊 * @date {2016-8-3} * @des 随着程序启动而运行的类 * @updateAuthor * @updateDate * @updateDes */ public class TheApplication extends Application { private static Context sContext ; @Override public void onCreate() { super.onCreate(); sContext = getApplicationContext(); //极光推送初始化其一 JPushInterface.setDebugMode(true); // 设置开启日志,发布时请关闭日志 JPushInterface.init(this); // 初始化 JPush } public static Context getContext(){ return sContext; } }在主界面时还要初始化一个内容:
//初始化极光推送 JPushInterface.init(getApplicationContext());
然后把demo中的Manifest文件中的内容有选择的考到项目中的配置文件中(只要包名是JPush官方的都考进去,包名是com.example.demo等的不要),其他的java文件看demo就会明白怎么做的。
如果官网能够正常发送推送了说明集成成功了,但是手机端却收不到推送?
查看Error日志会发现如下错误信息,
[JPushGlobal] Get sdk version fail![获取sdk版本失败!]
[JPushGlobal] JPush .so file do not match JPush .jar file in the project, Failed to init JPush
这一切源于Android Studio的特殊性,在Android Studio中你要在module的build.gradle里的android{}里定义.so文件的加载路径:
sourceSets.main { jniLibs.srcDirs = ['libs'] // <-- Set your folder here! }
配置好再运行,你会发现,之前收不到的推送一股脑儿全来了!
demo中的MyReceiver是接收到推送的地方,一般而言,我们只需要在通知栏接收到推送(不用管,自动实现),然后点击跳转到我们自己定义的activity来显示详细的推送信息,我们在这要做的只有
} else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) { Log.d(TAG, "[MyReceiver] 用户点击打开了通知"); //打开自定义的Activity Intent i = new Intent(context, JPushMessageShow.class); i.putExtras(bundle); //i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP ); context.startActivity(i);其中的JPushMessageShow这个类就是我们自定义的来显示详细的推送信息的类,在这个类里
Intent intent = getIntent(); if (null != intent) { Bundle bundle = getIntent().getExtras(); String title = bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE); String content = bundle.getString(JPushInterface.EXTRA_ALERT); pushTitle.setText(title); pushContent.setText(content); }这样就把推送的标题和详细内容显示出来了。
如果更高级一点,推送只想让某些用户才能收到,就要设置alias或者tag了,在主界面配置:
//极光推送设置别名还是TAG标志位 private static final int MSG_SET_ALIAS = 1001; private static final int MSG_SET_TAGS = 1002; private static final String TAG = "JPush"; private final Handler mJPushHandler = new Handler() { @Override public void handleMessage(android.os.Message msg) { super.handleMessage(msg); switch (msg.what) { case MSG_SET_ALIAS: Log.d(TAG, "Set alias in handler."); JPushInterface.setAliasAndTags(getApplicationContext(), (String) msg.obj, null, mAliasCallback); break; case MSG_SET_TAGS: Log.d(TAG, "Set tags in handler."); JPushInterface.setAliasAndTags(getApplicationContext(), null, (Set<String>) msg.obj, mTagsCallback); break; default: Log.i(TAG, "Unhandled msg - " + msg.what); } } };
//极光推送用到的设置别名回调方法 private final TagAliasCallback mAliasCallback = new TagAliasCallback() { @Override public void gotResult(int code, String alias, Set<String> tags) { String logs ; switch (code) { case 0: logs = "Set tag and alias success"; Log.i(TAG, logs); break; case 6002: logs = "Failed to set alias and tags due to timeout. Try again after 60s."; Log.i(TAG, logs); if (JPushUtil.isConnected(getApplicationContext())) { mJPushHandler.sendMessageDelayed(mJPushHandler.obtainMessage(MSG_SET_ALIAS, alias), 1000 * 60); } else { Log.i(TAG, "No network"); } break; default: logs = "Failed with errorCode = " + code; Log.e(TAG, logs); } JPushUtil.showToast(logs, getApplicationContext()); } }; //极光推送用到的设置TAG回调方法 private final TagAliasCallback mTagsCallback = new TagAliasCallback() { @Override public void gotResult(int code, String alias, Set<String> tags) { String logs ; switch (code) { case 0: logs = "Set tag and alias success"; Log.i(TAG, logs); break; case 6002: logs = "Failed to set alias and tags due to timeout. Try again after 60s."; Log.i(TAG, logs); if (JPushUtil.isConnected(getApplicationContext())) { mJPushHandler.sendMessageDelayed(mJPushHandler.obtainMessage(MSG_SET_TAGS, tags), 1000 * 60); } else { Log.i(TAG, "No network"); } break; default: logs = "Failed with errorCode = " + code; Log.e(TAG, logs); } JPushUtil.showToast(logs, getApplicationContext()); } };在上面的代码都加上之后,开始设置别名或者TAG:
//设置别名 String alias = GlobalConstantHolder.USER_ID; if (TextUtils.isEmpty(alias)) { //如果非登陆状态不设置别名 }else{ //调用JPush API设置Alias mJPushHandler.sendMessage(mJPushHandler.obtainMessage(MSG_SET_ALIAS, alias)); }后台也要集成极光推送,发送的时候选择推送的范围就行了,一般把userId作为alias或者Tag来发送,和后台商量好就行。