1.开发者中心 (umeng.com)去下载相应的sdk,集成
1. 申请Appkey
开发者中心 (umeng.com)注册获取appkey
2. 接入Push SDK
-
在根目录build.gradle中添加maven仓库地址
-
maven { url 'https://repo1.maven.org/maven2/' }
-
在app/build.gradle中添加库依赖
dependencies { //友盟基础库依赖(必须) api 'com.umeng.umsdk:common:9.4.2' api 'com.umeng.umsdk:asms:1.4.1' //友盟Push依赖 api 'com.umeng.umsdk:push:6.4.0' }
3. 基础接口引入
-
在自定义Application类的onCreate()中初始化SDK,
-
onCreate()中添加代码块
-
//预初始化 PushHelper.preInit(this); //初始化 initPushSDK();
-
Application类中
/** * 初始化推送SDK */ private void initPushSDK() { /* * 若用户已同意隐私政策,直接初始化; * 若用户未同意隐私政策,待用户同意后,再通过PushHelper.init(...)方法初始化。 */ boolean agreed = MyPreferences.getInstance(this).hasAgreePrivacyAgreement(); if (!agreed) { return; } boolean isMainProcess = UMUtils.isMainProgress(this); if (isMainProcess) { //启动优化:建议在子线程中执行初始化 new Thread(new Runnable() { @Override public void run() { PushHelper.init(getApplicationContext()); } }).start(); } else { //若不是主进程(":channel"结尾的进程),不可在子线程中执行 PushHelper.init(getApplicationContext()); } }
新类
public class PushConstants { /** * 应用申请的Appkey */ // public static final String APP_KEY = "应用申请的Appkey"; public static final String APP_KEY = "6164ee01ac9567566e92b286"; /** * 应用申请的UmengMessageSecret */ // public static final String MESSAGE_SECRET = "应用申请的UmengMessageSecret"; public static final String MESSAGE_SECRET = "22706247cd7e9799482e31246e26e795"; /** * 后台加密消息的密码(仅Demo用,请勿将此密码泄漏) */ public static final String APP_MASTER_SECRET = "6vnajkupxywhpgf60ndh73pbotyd8mfn"; /** * 渠道名称,修改为您App的发布渠道名称 */ public static final String CHANNEL = "Umeng"; }
import android.content.Context; import android.content.SharedPreferences; /** * 数据持久化类 */ public class MyPreferences { private static final String NAME = "app_settings"; private static final String KEY_PRIVACY_AGREEMENT = "privacy_agreement"; private static volatile MyPreferences instance; private final SharedPreferences preferences; private MyPreferences(Context context) { preferences = context.getSharedPreferences(NAME, Context.MODE_PRIVATE); } public static MyPreferences getInstance(Context context) { if (instance == null) { synchronized (MyPreferences.class) { if (instance == null) { instance = new MyPreferences(context); } } } return instance; } /** * 设置隐私协议是否同意 * * @param value 是否同意 */ public void setAgreePrivacyAgreement(boolean value) { preferences.edit().putBoolean(KEY_PRIVACY_AGREEMENT, value).apply(); } /** * 是否同意了隐私协议 * * @return true 已经同意;false 还没有同意 */ public boolean hasAgreePrivacyAgreement() { return preferences.getBoolean(KEY_PRIVACY_AGREEMENT, false); } }
5.在UMConfigure.init方法后调用注册接口,注册成功后可获取deviceToken
public class PushHelper { private static final String TAG = PushHelper.class.getSimpleName(); /** * 预初始化,已添加子进程中初始化sdk。 * 使用场景:用户未同意隐私政策协议授权时,延迟初始化 * * @param context 应用上下文 */ public static void preInit(Context context) { try { //解决推送消息显示乱码的问题 AccsClientConfig.Builder builder = new AccsClientConfig.Builder(); builder.setAppKey("umeng:" + PushConstants.APP_KEY); builder.setAppSecret(PushConstants.MESSAGE_SECRET); builder.setTag(AccsClientConfig.DEFAULT_CONFIGTAG); ACCSClient.init(context, builder.build()); TaobaoRegister.setAccsConfigTag(context, AccsClientConfig.DEFAULT_CONFIGTAG); } catch (Exception e) { e.printStackTrace(); } UMConfigure.preInit(context, PushConstants.APP_KEY, PushConstants.CHANNEL); } /** * 初始化。 * 场景:用户已同意隐私政策协议授权时 * * @param context 应用上下文 */ public static void init(Context context) { // 在此处调用基础组件包提供的初始化函数 相应信息可在应用管理 -> 应用信息 中找到 http://message.umeng.com/list/apps // 参数一:当前上下文context; // 参数二:应用申请的Appkey; // 参数三:渠道名称; // 参数四:设备类型,必须参数,传参数为UMConfigure.DEVICE_TYPE_PHONE则表示手机;传参数为UMConfigure.DEVICE_TYPE_BOX则表示盒子;默认为手机; // 参数五:Push推送业务的secret 填充Umeng Message Secret对应信息 UMConfigure.init(context, PushConstants.APP_KEY, PushConstants.CHANNEL, UMConfigure.DEVICE_TYPE_PHONE, PushConstants.MESSAGE_SECRET); UMConfigure.init(context, "6164ee01ac9567566e92b286" , "umeng", UMConfigure.DEVICE_TYPE_PHONE, "");//58e //获取消息推送实例 final PushAgent pushAgent = PushAgent.getInstance(context); //推送消息拦截处理 pushAdvancedFunction(context); Log.i(TAG, "deviceToken --> " ); //注册推送服务,每次调用register方法都会回调该接口 pushAgent.register(new UPushRegisterCallback() { @Override public void onSuccess(String deviceToken) { //注册成功会返回deviceToken deviceToken是推送消息的唯一标志 Log.i(TAG, "deviceToken --> " + deviceToken); } @Override public void onFailure(String errCode, String errDesc) { Log.e(TAG, "register failure:--> " + "code:" + errCode + ",desc:" + errDesc); } }); registerDeviceChannel(context); } /** * 注册设备推送通道(小米、华为等设备的推送) * * @param context 应用上下文 */ private static void registerDeviceChannel(Context context) { // //小米通道,填写您在小米后台APP对应的xiaomi id和key // MiPushRegistar.register(context, PushConstants.MI_ID, PushConstants.MI_KEY); // //华为,注意华为通道的初始化参数在minifest中配置 // HuaWeiRegister.register((Application) context.getApplicationContext()); // //魅族,填写您在魅族后台APP对应的app id和key // MeizuRegister.register(context, PushConstants.MEI_ZU_ID, PushConstants.MEI_ZU_KEY); // //OPPO,填写您在OPPO后台APP对应的app key和secret // OppoRegister.register(context, PushConstants.OPPO_KEY, PushConstants.OPPO_SECRET); // //vivo,注意vivo通道的初始化参数在minifest中配置 // VivoRegister.register(context); } //推送高级功能集成说明 private static void pushAdvancedFunction(Context context) { PushAgent pushAgent = PushAgent.getInstance(context); //设置通知栏显示通知的最大个数(0~10),0:不限制个数 pushAgent.setDisplayNotificationNumber(0); //推送消息处理 UmengMessageHandler msgHandler = new UmengMessageHandler() { //处理通知栏消息 @Override public void dealWithNotificationMessage(Context context, UMessage msg) { super.dealWithNotificationMessage(context, msg); Log.i(TAG, "notification receiver:" + msg.getRaw().toString()); } //自定义通知样式 @Override public Notification getNotification(Context context, UMessage uMessage) { return super.getNotification(context, uMessage); } //处理透传消息 @Override public void dealWithCustomMessage(Context context, UMessage msg) { super.dealWithCustomMessage(context, msg); Log.i(TAG, "custom receiver:" + msg.getRaw().toString()); } }; pushAgent.setMessageHandler(msgHandler); //推送消息点击处理 UmengNotificationClickHandler notificationClickHandler = new UmengNotificationClickHandler() { @Override public void openActivity(Context context, UMessage msg) { super.openActivity(context, msg); Log.i(TAG, "click openActivity: " + msg.getRaw().toString()); } @Override public void launchApp(Context context, UMessage msg) { super.launchApp(context, msg); Log.i(TAG, "click launchApp: " + msg.getRaw().toString()); } @Override public void dismissNotification(Context context, UMessage msg) { super.dismissNotification(context, msg); Log.i(TAG, "click dismissNotification: " + msg.getRaw().toString()); } }; pushAgent.setNotificationClickHandler(notificationClickHandler); } }
-
deviceToken是推送平台生成的用于标识设备的id,长度为44位
-
同一台设备上不同应用对应的deviceToken不一样
-
获取deviceToken的值后,才可以进行消息推送测试
-
4. 消息推送测试
恭喜您已经顺利获取deviceToken,可以通过推送消息平台向这台设备推送消息了~
5. 接入完成
此时在您的测试手机上可以验证和处理推送消息了!