当初说坚持更新博客(两天一更),然而没有坚持下来, 一晃一年过去了。。。岁月是把杀猪刀啊,言归正传
今天来记录一下第三方应用(极光推送), 之前做过然后这次项目中 需要接入极光推送, 然后我就打开了之前的项目,
然后寻思吧之前的代码拿来,这样岂不是可以省去很多时间,然而并不是。。。。 理想是没美好的,现实是残酷的。因为第三方平台也是在更新, 所以,我就从新打开了极光的官方去看了文档, 然而也并不是很理想,反正有很多的坑, 我对极光做了一次封装,还有页面的跳转 ,这样我们在对接 使用的时候 可以通俗易懂,好了, 接下来就来说一下遇到的一些问题。
好了 实现第一步 就是添加依赖。
//************************************ 极光推送 ************************************************* implementation 'cn.jiguang.sdk.plugin:xiaomi:3.2.0' implementation 'cn.jiguang.sdk.plugin:huawei:3.2.0' implementation 'cn.jiguang.sdk.plugin:oppo:3.2.0' // implementation 'cn.jiguang.sdk.plugin:meizu:3.2.0' //此版本插件仅支持JPushSDK3.1.8及以上版本 implementation 'cn.jiguang.sdk:jpush:3.2.0' implementation 'cn.jiguang.sdk:jcore:1.2.7' //************************************ 极光推送 end *************************************************
build.gradle 中的配置, 推送那款机型去那个平台申请 Key 极光也不例外
manifestPlaceholders = [ JPUSH_PKGNAME : applicationId, JPUSH_APPKEY : "",//JPush上注册的包名对应的appkey. JPUSH_CHANNEL : "",//暂时填写默认值即可. XIAOMI_APPKEY : "",//小米平台注册的appkey XIAOMI_APPID : "",//小米平台注册的appid HUAWEI_APPID : "",//华为平台注册的appid OPPO_APPKEY : "", // OP // PO平台注册的appkey OPPO_APPID : "", // OPPO平台注册的appid OPPO_APPSECRET: "",//OPPO平台注册的appsecret // MEIZU_APPKEY : "",//魅族平台注册的appkey // MEIZU_APPID : "",//魅族平台注册的appid ]
配置完成以后 重点来了, 就是 极光的广播服务 和 跳转 页面
清单文件中配置
Application中初始化
/** * 初始化友盟统计 */ private void initYouMeng() { // //上下文、appkey、下载渠道、设备类型、推送密匙 // UMConfigure.init(mContext, YMAppkey, "ggb", UMConfigure.DEVICE_TYPE_PHONE, null); // MobclickAgent.setScenarioType(mContext, MobclickAgent.EScenarioType.E_UM_NORMAL); UMConfigure.init(mContext, UMConfigure.DEVICE_TYPE_PHONE, ""); UMConfigure.setLogEnabled(isLog); // 选用AUTO页面采集模式 MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO); }
广播的实现代码
package com.ggmall.ggb.personal.receiver; import android.content.BroadcastReceiver; import android.content.Context; import android.content.Intent; import android.os.Bundle; import com.google.gson.Gson; import com.orhanobut.logger.Logger; import cn.jpush.android.api.JPushInterface; public class JPushReceiver extends BroadcastReceiver { private static final String TAG = "JIGUANG---"; @Override public void onReceive(Context context, Intent intent) { try { Bundle bundle = intent.getExtras(); Logger.e("极光>>>>>>+"+intent.getExtras()); if (JPushInterface.ACTION_REGISTRATION_ID.equals(intent.getAction())) { // String regId = bundle.getString(JPushInterface.EXTRA_REGISTRATION_ID); // Logger.e(TAG + "接收Registration Id : " + regId); } else if (JPushInterface.ACTION_MESSAGE_RECEIVED.equals(intent.getAction())) { //不走厂商通道 Logger.e(TAG + "接收到推送下来的自定义消息(内容为): " + bundle.getString(JPushInterface.EXTRA_MESSAGE)); } else if (JPushInterface.ACTION_NOTIFICATION_RECEIVED.equals(intent.getAction())) { Gson gson = new Gson(); //华为、oppo、vivo厂商通道不走该方法;魅族非运行状态不会触发 Logger.e(TAG + "接收到推送下来的通知"); Logger.e(TAG + "接收到推送下来的标题:"+bundle.getString(JPushInterface.EXTRA_TITLE)); Logger.e(TAG + "接收到推送下来的内容:"+bundle.getString(JPushInterface.EXTRA_MESSAGE)); Logger.e(TAG + "接收到推送下来的json:"+bundle.getString(gson.toJson(JPushInterface.EXTRA_EXTRA))); } else if (JPushInterface.ACTION_NOTIFICATION_OPENED.equals(intent.getAction())) { Logger.e(TAG + "用户点击打开了通知"); //打开自定义的Activity Intent i = new Intent(context, PushToActivity.class); i.putExtras(bundle); i.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_CLEAR_TOP); context.startActivity(i); } else { Logger.e(TAG + "Unhandled intent - " + intent.getAction()); } } catch (Exception e) { e.printStackTrace(); } } }
跳转页面的代码
package com.ggmall.ggb.personal.receiver; import android.os.Bundle; import android.text.TextUtils; import androidx.appcompat.app.AppCompatActivity; import com.ggmall.ggb.personal.utils.IntentConfig; import com.ggmall.ggb.personal.utils.IntentKeyConfig; import com.google.gson.Gson; import com.orhanobut.logger.Logger; import java.util.Map; import cn.jpush.android.api.JPushInterface; public class PushToActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); // setContentView(R.layout.activity_push_to); String actionType; Mapmap; String data; /** * 华为厂商使用getIntent().getData() * 其他厂商使用getIntent().getExtras() */ if (getIntent().getData() == null) { Bundle bundle = getIntent().getExtras(); if (bundle == null) return; //oppo通道数据 data = bundle.getString("JMessageExtra"); if (TextUtils.isEmpty(data)) { //oppo通道数据为空,其他手机获取数据方式 data = bundle.getString(JPushInterface.EXTRA_EXTRA); Logger.e("JIGUANG---data--" + data); NExtrasBean bean = new Gson().fromJson(data, NExtrasBean.class); actionType = bean.getActionType(); map = bean.getActionParam(); } else { //oppo通道数据不为空 Logger.e("JIGUANG---oppo--" + data); PushOtherBean bean = new Gson().fromJson(data, PushOtherBean.class); actionType = bean.getN_extras().getActionType(); map = bean.getN_extras().getActionParam(); } } else { //华为获取数据方式 data = getIntent().getData().toString(); Logger.e("JIGUANG---hw--" + data); PushOtherBean bean = new Gson().fromJson(data, PushOtherBean.class); actionType = bean.getN_extras().getActionType(); map = bean.getN_extras().getActionParam(); } startA(map, actionType); // startB(actionType); } public void startA(Map map, String actionType) { Logger.e("进入隐式跳转>>"); try { IntentKeyConfig.startIntentImplicitJump(this, map, actionType); } catch (Exception e) { e.printStackTrace(); } onBackPressed(); } public void startB(String actionType) throws Exception { Logger.e("对应type跳转>>"); IntentConfig.startIntentImplicitJump(this, actionType); onBackPressed(); } }
下面就是跳转的封装 (包含隐式跳转和显示跳转)
package com.ggmall.ggb.personal.utils; import android.app.Activity; import android.content.Context; import android.content.Intent; import android.os.Bundle; import com.alibaba.baichuan.trade.biz.login.AlibcLogin; import com.alibaba.baichuan.trade.biz.login.AlibcLoginCallback; import com.ggmall.ggb.personal.app.App; import com.ggmall.ggb.personal.base.BaseEntry; import com.ggmall.ggb.personal.base.BaseObserver; import com.ggmall.ggb.personal.base.bean.SerializableMapBean; import com.ggmall.ggb.personal.sp.SPKey; import com.ggmall.ggb.personal.ui.X5WebViewAcitivty; import com.ggmall.ggb.personal.ui.home.activity.AlbcWebActivity; import com.ggmall.ggb.personal.ui.home.bean.ChecktbkauthbindBean; import com.ggmall.ggb.personal.ui.home.bean.GoodsBuyBean; import com.ggmall.ggb.personal.ui.home.homeModel.HomeModel; import com.ggmall.ggb.personal.ui.home.homeModel.JumpLinkTransfer; import com.orhanobut.logger.Logger; import java.util.HashMap; import java.util.Map; /** * Intent传参 put key值 * 与隐式跳转 * Created by ${ShinnyYang} on 2020/2/18. */ public class IntentKeyConfig { public static final String DATA = "data"; //"actionParam"字段专用,其他字段不要用 public static final String ACTION_TYPE = "actionType"; //"actionType"字段专用,其他字段不要用 public static final String ARGS_PAGE = "args_page"; public static final String POSITION = "position"; /** * 隐式跳转intent * * @param mContext * @param map 所传参数map * @param actionType 页面action */ public static void startIntentImplicitJump(Context mContext, Mapmap, String actionType) throws Exception { Logger.e("mainAdapter跳转参数==>" + actionType + "===>" + map); //处理请求参数 Map m = new HashMap<>(); m = ActionTypeMapUtil.getActionTypeMap(map); String token = App.userInfoSp.getString(SPKey.UserInfoSp.token, ""); switch (actionType) { case "taobao_web": break; default: SerializableMapBean bean = new SerializableMapBean(); bean.setMap(map); Intent intent = new Intent(mContext.getPackageName() + actionType); Bundle args = new Bundle(); args.putSerializable(DATA, bean); args.putString(ACTION_TYPE, actionType); intent.putExtras(args); mContext.startActivity(intent); break; } } /** * 显示跳转intent * * @param mContext * @param map 所传参数map */ public static void startIntentJump(Context mContext, Map map, Class extends Activity> activity) { SerializableMapBean bean = new SerializableMapBean(); bean.setMap(map); Intent intent = new Intent(mContext, activity); Bundle args = new Bundle(); args.putSerializable(DATA, bean); intent.putExtras(args); mContext.startActivity(intent); } /** * 显示跳转intent * * @param mContext * @param map 所传参数map * @param requestCode */ public static void startIntentJump(Context mContext, Map map, Class extends Activity> activity, int requestCode) { SerializableMapBean bean = new SerializableMapBean(); bean.setMap(map); Intent intent = new Intent(mContext, activity); Bundle args = new Bundle(); args.putSerializable(DATA, bean); intent.putExtras(args); ((Activity) mContext).startActivityForResult(intent, requestCode); } /** * 阿里百川登陆组件 * * @param mContext * @param url */ public static void albcLogin(Context mContext, String url) { AlibcLogin.getInstance().showLogin(new AlibcLoginCallback() { @Override public void onSuccess(int loginResult, String openId, String userNick) { Intent intent = new Intent(mContext, AlbcWebActivity.class); intent.putExtra(AlbcWebActivity.URLS, url); mContext.startActivity(intent); } @Override public void onFailure(int code, String msg) { } }); } }
完成!!!!!!