以下仅作为自己的工作笔记。
// 此处以JPush 3.0.9 版本为例。
// 此处以JCore 1.1.7 版本为例。
1.将下载下来的官方文档sdk解压,然后复制jar包和.so文件及drawable-hdpi, layout, values文件夹中的资源文件。
1.1 。 将libs中jcore-android-1.1.7.jar和jpush-android-3.0.9.jar包及所有.so文件复制粘贴至主工程的libs中。(记得将jar包Build Path)
sdk libs中jar包及.so文件
复制粘贴后的主工程libs
1.2.将res/ 中drawable-hdpi,layout, values文件夹中的资源文件全部复制至到你的主工程中 res/ 对应同名的目录下。
2.根据 SDK 压缩包里的 AndroidManifest.xml 样例文件,来配置你的应用程序项目的 AndroidManifest.xml 。
2.1 将如下权限添加到自己的AndroidManifest.xml中
android:name="您应用的包名.permission.JPUSH_MESSAGE" android:protectionLevel="signature" /> 2.2 将如下核心功能添加至你的application中。 <application android:name="自己的Application名字" android:allowBackup="true" android:icon="@drawable/ic_caijing" android:label="@string/app_name" android:theme="@style/AppTheme" > android:name="cn.jpush.android.service.PushService" android:enabled="true" android:exported="false" > android:authorities="您应用的包名.DataProvider" android:name="cn.jpush.android.service.DataProvider" android:exported="true" /> android:name="cn.jpush.android.service.DaemonService" android:enabled="true" android:exported="true"> android:name="cn.jpush.android.service.PushReceiver" android:enabled="true" > android:name="cn.jpush.android.ui.PushActivity" android:configChanges="orientation|keyboardHidden" android:theme="@android:style/Theme.NoTitleBar" android:exported="false" > android:name="cn.jpush.android.ui.PopWinActivity" android:configChanges="orientation|keyboardHidden" android:exported="false" android:theme="@style/MyDialogStyle"> android:name="cn.jpush.android.service.DownloadService" android:enabled="true" android:exported="false" > android:name="您自己定义的Receiver" android:enabled="true"> application> 3.初始化SDK public class MyAplication extends Application { // private static ACache mCache; @Override public void onCreate() { // TODO Auto-generated method stub super.onCreate(); //Jpush初始化 JPushInterface.setDebugMode(true); JPushInterface.init(this); } } 4.设置标签与别名(在登录成功后调用如下方法) 4.1 /** * 设置标签与别名 */ @SuppressWarnings("deprecation") private void setTagAndAlias() { // TODO Auto-generated method stub /** *这里设置了别名,在这里获取的用户登录的信息 *并且此时已经获取了用户的userId,然后就可以用用户的userId来设置别名了 **/ Set //这里可以设置你要推送的人,一般是用户uid 不为空在设置进去 可同时添加多个 if (!TextUtils.isEmpty(userId)){ tags.add(userId);//设置tag } //上下文、别名【Sting行】、标签【Set型】、回调 JPushInterface. mAliasCallback); } 4.2 /** * 设置标签与别名的回调 */ @SuppressWarnings("deprecation") private final @Override public void gotResult(int code, String alias, Set String logs; switch (code) { case 0: logs = "Set tag and alias success极光推送别名设置成功"; Log.e("TAG", logs); break; case 6002: logs = "Failed to set alias and tags due to timeout. Try again after 60s.极光推送别名设置失败,60秒后重试"; Log.e("TAG", logs); break; default: logs = "极光推送设置失败,Failed with errorCode = " + code; Log.e("TAG", logs); break; } } }; 4.3(当用户退出登入时,调用如下方法) /** * 取消设置标签与别名 */ @SuppressWarnings("deprecation") private void cancleTagAndAlias() { // TODO Auto-generated method stub //TODO 上下文、别名、标签、回调 退出后空数组与空字符串取消之前的设置 Set JPushInterface. } 5.用户自定义receiver public class MyReceiver extends BroadcastReceiver { private static final String TAG = "JPush"; @Override public void onReceive(Context context, Intent intent) { Bundle bundle = intent.getExtras(); Log.d(TAG, "[MyReceiver] onReceive - " + intent.getAction() + ", extras: " + printBundle(bundle)); if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) { String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID); Log.d(TAG, "[MyReceiver] 接收Registration Id : " + regId); } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) { Log.d(TAG, "[MyReceiver] 接收到推送下来的自定义消息: " + bundle.getString(JPushInterface.EXTRA_MESSAGE)); } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) { Log.d(TAG, "[MyReceiver] 接收到极光推送默认的通知"); int notifactionId = bundle.getInt(JPushInterface.EXTRA_NOTIFICATION_ID); Log.d(TAG, "[MyReceiver] 接收到极光推送默认的通知的ID: " + notifactionId); receivingNotification(context,bundle); } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) { Log.d(TAG, "[MyReceiver] 用户点击打开了通知"); openNotification(context,bundle); } else if (JPushInterface.ACTION_RICHPUSH_CALLBACK.equals(intent.getAction())) { Log.d(TAG, "[MyReceiver] 用户收到到RICH PUSH CALLBACK: " + bundle.getString(JPushInterface.EXTRA_EXTRA)); //在这里根据 JPushInterface.EXTRA_EXTRA 的内容处理代码,比如打开新的Activity, 打开一个网页等.. } else { Log.d(TAG, "[MyReceiver] Unhandled intent - " + intent.getAction()); } } // 打印所有的 intent extra 数据 @SuppressLint("NewApi") private static String printBundle(Bundle bundle) { StringBuilder sb = new StringBuilder(); for (String key : bundle.keySet()) { if (key.equals(JPushInterface.EXTRA_NOTIFICATION_ID)) { sb.append("\nkey:" + key + ", value:" + bundle.getInt(key)); } else if (key.equals(JPushInterface.EXTRA_EXTRA)) { if (bundle.getString(JPushInterface.EXTRA_EXTRA).isEmpty()) { Log.i(TAG, "This message has no Extra data"); continue; } try { JSONObject json = new JSONObject(bundle.getString(JPushInterface.EXTRA_EXTRA)); Iterator while (it.hasNext()) { String myKey = it.next().toString(); sb.append("\nkey:" + key + ", value: [" + myKey + " - " +json.optString(myKey) + "]"); } } catch (JSONException e) { Log.e(TAG, "Get message extra JSON error!"); } } else { sb.append("\nkey:" + key + ", value:" + bundle.getString(key)); } } return sb.toString(); } private void receivingNotification(Context context, Bundle bundle){ String title = bundle.getString(JPushInterface.EXTRA_NOTIFICATION_TITLE); Log.i(TAG, " title : " + title); String message = bundle.getString(JPushInterface.EXTRA_ALERT); Log.i(TAG, "message : " + message); String extras = bundle.getString(JPushInterface.EXTRA_EXTRA); Log.i(TAG, "extras : " + extras); } private void openNotification(Context context, Bundle bundle){ String extras = bundle.getString(JPushInterface.EXTRA_EXTRA); String myValue = ""; try { JSONObject extrasJson = new JSONObject(extras); //得到后台给的参数所对应的值。 myValue = extrasJson.optString("extraParm"); Log.i("extraParm---", myValue); } catch (Exception e) { Log.w(TAG, "Unexpected: extras is not a valid json", e); return; } //根据值判断跳转页面 if ("1".equals(myValue)) { Intent mIntent = new Intent(context, StuSleepManagementActivity.class); mIntent.putExtras(bundle); mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(mIntent); } else if ("2".equals(myValue)){ Intent mIntent = new Intent(context, NewSleepFacultyQueryActivity.class); mIntent.putExtras(bundle); mIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK); context.startActivity(mIntent); } } } setAliasAndTags(context, userId, tags,TagAliasCallback mAliasCallback = new TagAliasCallback() {setAliasAndTags(context, "", tags, mAliasCallback);