【版权说明】
1. 请支持原创,转载请注明出处:https://blog.csdn.net/cbk861110/article/details/86665564
2. 项目源码请移步:https://github.com/caobaokang419/WeatherApp(欢迎Github Fork&Star,框架和技术实现不妥之处,请帮忙指正),谢谢!
-------------------------------------------
基于MVVM框架的高德天气APP:
功能点实现说明:
- 国内消息推送:集成Umeng推送平台(U-Push),三分钟实现SDK集成;
一、 技术背景:
U-Push 可轻松实现,后台配置,下发消息给应用,应用解析并弹框通知,实现应用消息Push功能。
二、 开发实现(三分钟可完成):
1、U-Push 集成步骤(SDK集成链接:https://developer.umeng.com/docs/66632/detail/98581):
1.) Appkey申请 2.) 接入Push SDK 3.) 基础接口引入 4.) 应用数据统计接口 5.) 消息推送 6.) 接入完成
2. SDK集成演示:
2.1 app gradle jar 添加:
//PushSDK必须依赖基础组件库,所以需要加入对应依赖
implementation 'com.umeng.umsdk:common:1.5.4'
//PushSDK必须依赖utdid库,所以需要加入对应依赖
implementation 'com.umeng.umsdk:utdid:1.1.5.3'
//PushSDK
implementation 'com.umeng.umsdk:push:5.0.2'
2.3 project gradle 添加:
maven { url 'https://dl.bintray.com/umsdk/release' }
2.3 云端生成的应用app key信息:
public class Constants {
// um push
public static final String UM_PUSH_APP_KEY = "5c4e7057b465f50f6300171f";
public static final String UM_PUSH_MESSAGE_SECRET_KEY = "57bdbf9232a34e1d0bc882ae4759b64d";
public static final String UM_PUSH_CHANNEL_NAME = "umeng_amap";
}
2.4 关键代码实现:
public class UmPushManager {
private static final String TAG = "UmPushManager";
/*私有构造*/
private UmPushManager() {
}
public static void register(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,
Constants.UM_PUSH_APP_KEY,
Constants.UM_PUSH_CHANNEL_NAME,
UMConfigure.DEVICE_TYPE_PHONE,
Constants.UM_PUSH_MESSAGE_SECRET_KEY);
//获取消息推送代理示例
PushAgent mPushAgent = PushAgent.getInstance(context);
//注册推送服务,每次调用register方法都会回调该接口
mPushAgent.register(new IUmengRegisterCallback() {
@Override
public void onSuccess(String deviceToken) {
//注册成功会返回deviceToken deviceToken是推送消息的唯一标志
//注册成功:deviceToken:--------> AvMK_CTS9yPTiSuvEqQ20I7JLvqM5gBho_RFCISzBU50
Log.i(TAG, "注册成功:deviceToken:--------> " + deviceToken);
}
@Override
public void onFailure(String s, String s1) {
Log.e(TAG, "注册失败:--------> " + "s:" + s + ",s1:" + s1);
}
});
UmengMessageHandler messageHandler = new UmengMessageHandler() {
/**
* 自定义通知栏样式的回调方法
*/
@Override
public Notification getNotification(Context context, UMessage msg) {
switch (msg.builder_id) {
case 1:
Notification.Builder builder = new Notification.Builder(context);
RemoteViews myNotificationView = new RemoteViews(context.getPackageName(),
R.layout.notification_um_push_view);
myNotificationView.setTextViewText(R.id.notification_title, msg.title);
myNotificationView.setTextViewText(R.id.notification_text, msg.text);
myNotificationView.setImageViewBitmap(R.id.notification_large_icon, getLargeIcon(context, msg));
myNotificationView.setImageViewResource(R.id.notification_small_icon,
getSmallIconId(context, msg));
builder.setContent(myNotificationView)
.setSmallIcon(getSmallIconId(context, msg))
.setTicker(msg.ticker)
.setAutoCancel(true);
return builder.getNotification();
default:
//默认为0,若填写的builder_id并不存在,也使用默认。
return super.getNotification(context, msg);
}
}
};
mPushAgent.setMessageHandler(messageHandler);
UmengNotificationClickHandler notificationClickHandler = new UmengNotificationClickHandler() {
@Override
public void dealWithCustomAction(Context context, UMessage msg) {
Log.e(TAG, "click");
}
};
mPushAgent.setNotificationClickHandler(notificationClickHandler);
}
}
2.5 应用Application U-Push 注册:
public class WtApplication extends /*MultiDex*/Application {
private void initConfig(){
//umeng push register
UmPushManager.register(this);
}
}
-------------------------------------------
-------------------------------------------
文章目录(未完,待续):
一:android 应用子功能及移动框架总述 https://blog.csdn.net/cbk861110/article/details/86665564
二:android 高德天气API说明及城市天气查询实现 https://blog.csdn.net/cbk861110/article/details/86665655
三:android 自定义控件实现(ActionBar + PageIndicatorView) https://blog.csdn.net/cbk861110/article/details/86665790
四:android ViewPager实现左右页面滑动切换 https://blog.csdn.net/cbk861110/article/details/86665964
五:android应用权限动态申请 https://blog.csdn.net/cbk861110/article/details/86666321
六:android RecyclerView 封装及使用 https://blog.csdn.net/cbk861110/article/details/86666392
七:android Xutils3文件下载实现(高德天气城市配置) https://blog.csdn.net/cbk861110/article/details/86666573
八:android DiskLruCache 磁盘缓存 封装和使用 https://blog.csdn.net/cbk861110/article/details/86666664
九:android ThreadPoolExecutor线程池 封装及使用 https://blog.csdn.net/cbk861110/article/details/86667101
十:android 天气网络请求框架(retrofit2&okhttp3&Gson) 封装及使用 https://blog.csdn.net/cbk861110/article/details/86667375
十一:android RxAndroid(响应式编程) 异步网络请求实现 https://blog.csdn.net/cbk861110/article/details/86669178
十二:android DataBinding 数据和UI双向绑定实现 https://blog.csdn.net/cbk861110/article/details/86669708
十三:android room数据库 天气数据读写实现 https://blog.csdn.net/cbk861110/article/details/86670354
十四:android LiveData 使用方法(实现城市天气自动刷新) https://blog.csdn.net/cbk861110/article/details/86670531
十五:android ViewModel 使用方法 https://blog.csdn.net/cbk861110/article/details/86670703
十六:android 集成友盟消息推送机制(U-Push) https://blog.csdn.net/cbk861110/article/details/86683849
-------------------------------------------
【版权说明】
1. 请支持原创,转载请注明出处:https://blog.csdn.net/cbk861110/article/details/86665564
2. 项目源码请移步:https://github.com/caobaokang419/WeatherApp(欢迎Github Fork&Star,框架和技术实现不妥之处,请帮忙指正),谢谢!