• 首页 首页 icon
  • 工具库 工具库 icon
    • IP查询 IP查询 icon
  • 内容库 内容库 icon
    • 快讯库 快讯库 icon
    • 精品库 精品库 icon
    • 问答库 问答库 icon
  • 更多 更多 icon
    • 服务条款 服务条款 icon

友盟推送学习

武飞扬头像
码码姑娘
帮助1

一、首次使用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中添加库依赖

  1.  
    dependencies {
  2.  
    //友盟基础库依赖(必须)
  3.  
    api 'com.umeng.umsdk:common:9.4.2'
  4.  
    api 'com.umeng.umsdk:asms:1.4.1'
  5.  
    //友盟Push依赖
  6.  
    api 'com.umeng.umsdk:push:6.4.0'
  7.  
    }

若需移除自启动能力,在AndroidManifest.xml中添加

  1.  
    <uses-permission android:name="android.permission.RECEIVE_BOOT_COMPLETED"
  2.  
    tools:node="remove" />

若需移除关联启动能力,在AndroidManifest.xml中添加

  1.  
    <service
  2.  
    android:name="com.taobao.accs.ChannelService"
  3.  
    android:exported="false"
  4.  
    tools:replace="android:exported" />
  5.  
    <service
  6.  
    android:name="com.taobao.accs.data.MsgDistributeService"
  7.  
    android:exported="false"
  8.  
    tools:replace="android:exported" />
  9.  
    <receiver
  10.  
    android:name="com.taobao.accs.EventReceiver"
  11.  
    android:exported="false"
  12.  
    tools:replace="android:exported" />
  13.  
    <receiver
  14.  
    android:name="com.taobao.accs.ServiceReceiver"
  15.  
    android:exported="false"
  16.  
    tools:replace="android:exported" />
  17.  
    <service
  18.  
    android:name="org.android.agoo.accs.AgooService"
  19.  
    android:exported="false"
  20.  
    tools:replace="android:exported" />
  21.  
    <service
  22.  
    android:name="com.umeng.message.UmengIntentService"
  23.  
    android:exported="false"
  24.  
    tools:replace="android:exported" />
  25.  
    <service
  26.  
    android:name="com.umeng.message.XiaomiIntentService"
  27.  
    android:exported="false"
  28.  
    tools:replace="android:exported" />
  29.  
    <receiver
  30.  
    android:name="com.taobao.agoo.AgooCommondReceiver"
  31.  
    android:exported="false"
  32.  
    tools:replace="android:exported" />
  33.  
    <service
  34.  
    android:name="com.umeng.message.UmengMessageIntentReceiverService"
  35.  
    android:exported="false"
  36.  
    tools:replace="android:exported" />
学新通

4、接口接入

在自定义Application类的onCreate()中初始化SDK

  1.  
    package com.umeng.message.demo;
  2.  
     
  3.  
    import android.app.Application;
  4.  
     
  5.  
    import com.umeng.commonsdk.UMConfigure;
  6.  
    import com.umeng.message.demo.helper.PushHelper;
  7.  
     
  8.  
    /**
  9.  
    * 应用程序类
  10.  
    */
  11.  
    public class MyApplication extends Application {
  12.  
     
  13.  
    /**
  14.  
    * onCreate()中初始化SDK
  15.  
    */
  16.  
    @Override
  17.  
    public void onCreate() {
  18.  
    super.onCreate();
  19.  
    //日志开关
  20.  
    UMConfigure.setLogEnabled(true);
  21.  
    //预初始化
  22.  
    PushHelper.preInit(this);
  23.  
    //初始化
  24.  
    initPushSDK();
  25.  
    }
  26.  
     
  27.  
    /**
  28.  
    * 初始化推送SDK
  29.  
    */
  30.  
    private void initPushSDK() {
  31.  
    /*
  32.  
    * 若用户已同意隐私政策,直接初始化;
  33.  
    * 若用户未同意隐私政策,待用户同意后,再通过PushHelper.init(...)方法初始化。
  34.  
    */
  35.  
    boolean agreed = MyPreferences.getInstance(this).hasAgreePrivacyAgreement();
  36.  
    if (agreed) {
  37.  
    //建议在线程中执行初始化
  38.  
    new Thread(new Runnable() {
  39.  
    @Override
  40.  
    public void run() {
  41.  
    PushHelper.init(getApplicationContext());
  42.  
    }
  43.  
    }).start();
  44.  
    }
  45.  
    }
  46.  
    }
学新通

在UMConfigure.init方法后调用注册接口,注册成功后可获取device Token

  1.  
    public class PushHelper {
  2.  
     
  3.  
    private static final String TAG = PushHelper.class.getSimpleName();
  4.  
     
  5.  
    /**
  6.  
    * 预初始化,已添加子进程中初始化sdk。
  7.  
    * 使用场景:用户未同意隐私政策协议授权时,延迟初始化
  8.  
    *
  9.  
    * @param context 应用上下文
  10.  
    */
  11.  
    public static void preInit(Context context) {
  12.  
    try {
  13.  
    //解决推送消息显示乱码的问题
  14.  
    AccsClientConfig.Builder builder = new AccsClientConfig.Builder();
  15.  
    builder.setAppKey("umeng:" PushConstants.APP_KEY);
  16.  
    builder.setAppSecret(PushConstants.MESSAGE_SECRET);
  17.  
    builder.setTag(AccsClientConfig.DEFAULT_CONFIGTAG);
  18.  
    ACCSClient.init(context, builder.build());
  19.  
    TaobaoRegister.setAccsConfigTag(context, AccsClientConfig.DEFAULT_CONFIGTAG);
  20.  
    } catch (Exception e) {
  21.  
    e.printStackTrace();
  22.  
    }
  23.  
    UMConfigure.preInit(context, PushConstants.APP_KEY, PushConstants.CHANNEL);
  24.  
    }
  25.  
     
  26.  
    /**
  27.  
    * 初始化。
  28.  
    * 场景:用户已同意隐私政策协议授权时
  29.  
    *
  30.  
    * @param context 应用上下文
  31.  
    */
  32.  
    public static void init(Context context) {
  33.  
    // 在此处调用基础组件包提供的初始化函数 相应信息可在应用管理 -> 应用信息 中找到 http://message.umeng.com/list/apps
  34.  
    // 参数一:当前上下文context;
  35.  
    // 参数二:应用申请的Appkey;
  36.  
    // 参数三:渠道名称;
  37.  
    // 参数四:设备类型,必须参数,传参数为UMConfigure.DEVICE_TYPE_PHONE则表示手机;传参数为UMConfigure.DEVICE_TYPE_BOX则表示盒子;默认为手机;
  38.  
    // 参数五:Push推送业务的secret 填充Umeng Message Secret对应信息
  39.  
     
  40.  
    //.init方法后调用注册接口,注册成功后可获取deviceToken
  41.  
    UMConfigure.init(context, PushConstants.APP_KEY, PushConstants.CHANNEL,
  42.  
    UMConfigure.DEVICE_TYPE_PHONE, PushConstants.MESSAGE_SECRET);
  43.  
     
  44.  
    //获取消息推送实例
  45.  
    final PushAgent pushAgent = PushAgent.getInstance(context);
  46.  
     
  47.  
    //推送消息拦截处理
  48.  
    pushAdvancedFunction(context);
  49.  
     
  50.  
    //注册推送服务,每次调用register方法都会回调该接口
  51.  
    pushAgent.register(new UPushRegisterCallback() {
  52.  
     
  53.  
    @Override
  54.  
    public void onSuccess(String deviceToken) {
  55.  
    //注册成功会返回deviceToken deviceToken是推送消息的唯一标志
  56.  
    Log.i(TAG, "注册成功,deviceToken --> " deviceToken);
  57.  
    }
  58.  
     
  59.  
    @Override
  60.  
    public void onFailure(String errCode, String errDesc) {
  61.  
    Log.e(TAG, "register failure:--> " "code:" errCode ",desc:" errDesc);
  62.  
    }
  63.  
    });
  64.  
    registerDeviceChannel(context);
  65.  
    }
  66.  
     
  67.  
    //这里可以注册不同的厂商的设备的推送通道
  68.  
    private static void registerDeviceChannel(Context context) {}
  69.  
     
  70.  
    //同时可以进行一些推送的高级功能,具体看这个方法,以及UmengMessageHandler(推送消息处理)、UmengNotificationClickHandler(推送消息点击处理)
  71.  
    private static void pushAdvancedFunction(Context context) {}
学新通

应用活跃统计,在App的SplashActivity或MainActivity中onCreate()方法添加:

  1.  
    if (hasAgreementAgreed) {
  2.  
    PushAgent.getInstance(this).onAppStart();
  3.  
    }

PushConstants类中定义了常量,上述的Appkey、Umeng Message Secret、App Master Secret等、以及如果要实现后台推送的各个后台app对应的id

  1.  
    class PushConstants {
  2.  
    /**
  3.  
    * 应用申请的Appkey
  4.  
    */
  5.  
    public static final String APP_KEY = "应用申请的Appkey";
  6.  
    /**
  7.  
    * 应用申请的UmengMessageSecret
  8.  
    */
  9.  
    public static final String MESSAGE_SECRET = "应用申请的UmengMessageSecret";
  10.  
    }

app/build.gradle中替换您的应用id

  1.  
    android {
  2.  
    defaultConfig {
  3.  
    applicationId "您的应用id"
  4.  
    }
  5.  
    }

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
系列文章
更多 icon
同类精品
更多 icon
继续加载