友盟推送学习
一、首次使用U_Push
1、首先注册友盟账号,进入工作台,选择产品U_Push。
2、创建应用
3、在自己的项目中自动集成SDK
开发环境要求:
-
Android Studio 3.0以上
-
Android minSdkVersion: 14
-
Cradle: 4.4以上
在根目录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'
-
}
若需移除自启动能力,在AndroidManifest.xml中添加
-
<uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"
-
tools:node="remove" />
若需移除关联启动能力,在AndroidManifest.xml中添加
-
<service
-
android:name="com.taobao.accs.ChannelService"
-
android:exported="false"
-
tools:replace="android:exported" />
-
<service
-
android:name="com.taobao.accs.data.MsgDistributeService"
-
android:exported="false"
-
tools:replace="android:exported" />
-
<receiver
-
android:name="com.taobao.accs.EventReceiver"
-
android:exported="false"
-
tools:replace="android:exported" />
-
<receiver
-
android:name="com.taobao.accs.ServiceReceiver"
-
android:exported="false"
-
tools:replace="android:exported" />
-
<service
-
android:name="org.android.agoo.accs.AgooService"
-
android:exported="false"
-
tools:replace="android:exported" />
-
<service
-
android:name="com.umeng.message.UmengIntentService"
-
android:exported="false"
-
tools:replace="android:exported" />
-
<service
-
android:name="com.umeng.message.XiaomiIntentService"
-
android:exported="false"
-
tools:replace="android:exported" />
-
<receiver
-
android:name="com.taobao.agoo.AgooCommondReceiver"
-
android:exported="false"
-
tools:replace="android:exported" />
-
<service
-
android:name="com.umeng.message.UmengMessageIntentReceiverService"
-
android:exported="false"
-
tools:replace="android:exported" />
4、接口接入
在自定义Application类的onCreate()中初始化SDK
-
package com.umeng.message.demo;
-
-
import android.app.Application;
-
-
import com.umeng.commonsdk.UMConfigure;
-
import com.umeng.message.demo.helper.PushHelper;
-
-
/**
-
* 应用程序类
-
*/
-
public class MyApplication extends Application {
-
-
/**
-
* onCreate()中初始化SDK
-
*/
-
-
public void onCreate() {
-
super.onCreate();
-
//日志开关
-
UMConfigure.setLogEnabled(true);
-
//预初始化
-
PushHelper.preInit(this);
-
//初始化
-
initPushSDK();
-
}
-
-
/**
-
* 初始化推送SDK
-
*/
-
private void initPushSDK() {
-
/*
-
* 若用户已同意隐私政策,直接初始化;
-
* 若用户未同意隐私政策,待用户同意后,再通过PushHelper.init(...)方法初始化。
-
*/
-
boolean agreed = MyPreferences.getInstance(this).hasAgreePrivacyAgreement();
-
if (agreed) {
-
//建议在线程中执行初始化
-
new Thread(new Runnable() {
-
-
public void run() {
-
PushHelper.init(getApplicationContext());
-
}
-
}).start();
-
}
-
}
-
}
在UMConfigure.init方法后调用注册接口,注册成功后可获取device Token
-
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对应信息
-
-
//.init方法后调用注册接口,注册成功后可获取deviceToken
-
UMConfigure.init(context, PushConstants.APP_KEY, PushConstants.CHANNEL,
-
UMConfigure.DEVICE_TYPE_PHONE, PushConstants.MESSAGE_SECRET);
-
-
//获取消息推送实例
-
final PushAgent pushAgent = PushAgent.getInstance(context);
-
-
//推送消息拦截处理
-
pushAdvancedFunction(context);
-
-
//注册推送服务,每次调用register方法都会回调该接口
-
pushAgent.register(new UPushRegisterCallback() {
-
-
-
public void onSuccess(String deviceToken) {
-
//注册成功会返回deviceToken deviceToken是推送消息的唯一标志
-
Log.i(TAG, "注册成功,deviceToken --> " deviceToken);
-
}
-
-
-
public void onFailure(String errCode, String errDesc) {
-
Log.e(TAG, "register failure:--> " "code:" errCode ",desc:" errDesc);
-
}
-
});
-
registerDeviceChannel(context);
-
}
-
-
//这里可以注册不同的厂商的设备的推送通道
-
private static void registerDeviceChannel(Context context) {}
-
-
//同时可以进行一些推送的高级功能,具体看这个方法,以及UmengMessageHandler(推送消息处理)、UmengNotificationClickHandler(推送消息点击处理)
-
private static void pushAdvancedFunction(Context context) {}
应用活跃统计,在App的SplashActivity或MainActivity中onCreate()方法添加:
-
if (hasAgreementAgreed) {
-
PushAgent.getInstance(this).onAppStart();
-
}
PushConstants类中定义了常量,上述的Appkey、Umeng Message Secret、App Master Secret等、以及如果要实现后台推送的各个后台app对应的id
-
class PushConstants {
-
/**
-
* 应用申请的Appkey
-
*/
-
public static final String APP_KEY = "应用申请的Appkey";
-
/**
-
* 应用申请的UmengMessageSecret
-
*/
-
public static final String MESSAGE_SECRET = "应用申请的UmengMessageSecret";
-
}
app/build.gradle中替换您的应用id
-
android {
-
defaultConfig {
-
applicationId "您的应用id"
-
}
-
}
AndroidManifest.xml中package值若和build.gradle中applicationId不一致,需调用设置资源包名方法
PushAgent.getInstance(context).setResourcePackageName(...);
以上都完成后,可以进行代码的执行,在执行成功在log信息中有打印出来的"注册成功,deviceToken --> " deviceToken
,获取到这个设备对应的Token,可以进行消息的测试推送。
5、测试推送
使用刚刚创建的应用,创建推送,点击测试模式,添加测试设备,点击测试消息、新建测试任务,
消息编辑-目标人群选择 deviceToken用户-其他可以默认。
二、具体了解
三、在线推送
对官方的demo做测试:
(一)、华为 可以
首先设置华为手机可以打印日志信息,具体操作大致一样(可能不同版本的手机的后台设置不一样):
在打开拨号界面输入:##2846579## 输入完成后会自动进入测试菜单界面,然后Project Menu → 后台设置 → 后台调试关闭 →USB端口设置改为Google模式 → AP LOG设置打开。
在控制台就可以输出token。
(二)、小米 可以
(三)、魅族 可以
(四)、vivo 可以
(五)、OPPO 可以
四、离线推送
厂商推送指的是手机硬件厂商提供的系统级别的推送服务,在网络畅通和推送合法的情况,通过手机厂商通道推送消息给该型号的手机,无论应用是否存活,都保证消息推送到位。厂商推送账号必须注册为企业认证账号。
需要法务申请
存在的问题:
app离线推送走的是厂商通道,在线推送走的是友盟的通道。
如果使用的是离线厂商推送,后续的动作是打开应用,app离线的时候点击消息就会跳转到指定的界面,但是这个界面是勾选的厂商推送填写的跳转的指定界面,而不是行为动作跳转的指定界面。所以就会出现问题是 如果此时其实app是在线的,也是会跳转到填写的指定界面,而不是行为动作跳转指定界面。
这篇好文章是转载于:学新通技术网
- 版权申明: 本站部分内容来自互联网,仅供学习及演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,请提供相关证据及您的身份证明,我们将在收到邮件后48小时内删除。
- 本站站名: 学新通技术网
- 本文地址: /boutique/detail/tanhfifkeg
-
Android Gradle 插件自定义 Gradle 插件模块 ③ ( Gradle 插件模块发布配置 | Windows 本地 Maven 仓库地址 | 插件上传到本地 Maven 仓库 )
-
Gradle 和 AGP 构建 API: 配置您的构建文件
-
友盟推送学习
-
Android Studio重装:后打开:前的项目后报错Java Runtime (class file version 55.0), this version of the Java Runt
-
Android项目工程结构
-
AS:Warning: 意外的元素 (uri:““, local:“base-extension“)。所需元素为<{}codename>,<{}layoutlib>,<{}api-level>
-
photoshop保存的图片太大微信发不了怎么办
PHP中文网 06-15 -
Android 11 保存文件到外部存储,并分享文件
Luke 10-12 -
word里面弄一个表格后上面的标题会跑到下面怎么办
PHP中文网 06-20 -
《学习通》视频自动暂停处理方法
HelloWorld317 07-05 -
photoshop扩展功能面板显示灰色怎么办
PHP中文网 06-14 -
微信公众号没有声音提示怎么办
PHP中文网 03-31 -
怎样阻止微信小程序自动打开
PHP中文网 06-13 -
excel下划线不显示怎么办
PHP中文网 06-23 -
excel打印预览压线压字怎么办
PHP中文网 06-22 -
photoshop蒙版画笔没反应怎么办
PHP中文网 06-24