2021-09-16

友盟推送
一、文档地址:
https://developer.umeng.com/docs/67966/detail/206987
二、快速集成:

  1. 在根目录build.gradle中添加maven仓库地址
    maven { url ‘https://repo1.maven.org/maven2/’ }

  2. 在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. 若需移除自启动能力,在AndroidManifest.xml中添加

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









    三、 基础接口接入

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

  6. public class PushHelper {
    public static final String TAG = “TAG”;
    /**

    • 预初始化,已添加子进程中初始化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);
      }

    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, “Umeng”,
    UMConfigure.DEVICE_TYPE_PHONE, PushConstants.MESSAGE_SECRET);

    //获取消息推送实例
    PushAgent pushAgent = PushAgent.getInstance(context);
    //注册推送服务,每次调用register方法都会回调该接口
    pushAgent.register(new UPushRegisterCallback() {
    
        @Override
        public void onSuccess(String deviceToken) {
            //注册成功会返回deviceToken deviceToken是推送消息的唯一标志
            Log.e(TAG, "注册成功:deviceToken:--> " + deviceToken);
        }
    
        @Override
        public void onFailure(String errCode, String errDesc) {
            Log.e(TAG, "注册失败:--> " + "code:" + errCode + ", desc:" + errDesc);
        }
    });
    

    }
    }

注意:主进程和子进程(:channel)均需要调用推送注册接口,否则退到后台会有收不到消息的问题。
3. 在UMConfigure.init方法后调用注册接口,注册成功后可获取deviceToken
public class PushHelper {
public static final String TAG = “TAG”;
public static final String APP_KEY = “”;
public static final String APP_SCREEN = “”;

/**
 * 预初始化,已添加子进程中初始化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);
}

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, “Umeng”,
UMConfigure.DEVICE_TYPE_PHONE, APP_SCREEN);

    //获取消息推送实例
    PushAgent pushAgent = PushAgent.getInstance(context);
    //注册推送服务,每次调用register方法都会回调该接口
    pushAgent.register(new UPushRegisterCallback() {

        @Override
        public void onSuccess(String deviceToken) {
            //注册成功会返回deviceToken deviceToken是推送消息的唯一标志
            Log.e(TAG, "注册成功:deviceToken:--> " + deviceToken);
        }

        @Override
        public void onFailure(String errCode, String errDesc) {
            Log.e(TAG, "注册失败:--> " + "code:" + errCode + ", desc:" + errDesc);
        }
    });
}

}
注意:获取deviceToken的值后,才可以进行消息推送测试
4. 应用活跃统计
在App的SplashActivity或MainActivity中onCreate()方法添加
public class MainActivity extends AppCompatActivity {

@Override
protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    if (hasAgreedAgreement()) {
        /**
         * 警告
         * 该方法是推送平台多维度推送决策必调用的方法,请务必调用
         * 需在用户同意隐私政策协议之后调用,否则会出现合规问题
         */
        PushAgent.getInstance(this).onAppStart();
    }
    setContentView(R.layout.activity_main);
    handleAgreement();
}


private boolean hasAgreedAgreement() {
    return MyPreferences.getInstance(this).hasAgreePrivacyAgreement();
}

private void handleAgreement() {
    if (!hasAgreedAgreement()) {
        AlertDialog.Builder builder = new AlertDialog.Builder(this);
        builder.setTitle(R.string.agreement_title);
        builder.setMessage(R.string.agreement_msg);
        builder.setPositiveButton(R.string.agreement_ok, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                //用户点击隐私协议同意按钮后,初始化PushSDK
                MyPreferences.getInstance(getApplicationContext()).setAgreePrivacyAgreement(true);
                PushHelper.init(getApplicationContext());
            }
        });
        builder.setNegativeButton(R.string.agreement_cancel, new DialogInterface.OnClickListener() {
            @Override
            public void onClick(DialogInterface dialog, int which) {
                dialog.dismiss();
                finish();
            }
        });
        builder.create().show();
    }
}

}
工具类代码
public class PushConstants {
/**
* 应用申请的Appkey
*/
public static final String APP_KEY = “”;

/**
 * 应用申请的UmengMessageSecret
 */
public static final String MESSAGE_SECRET = "";

/**
 * 渠道名称,修改为您App的发布渠道名称
 */
public static final String CHANNEL = "Umeng";

}
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);
}

}
四、 代码混淆
-dontwarn com.umeng.**
-dontwarn com.taobao.**
-dontwarn anet.channel.**
-dontwarn anetwork.channel.**
-dontwarn org.android.**
-dontwarn org.apache.thrift.**
-dontwarn com.xiaomi.**
-dontwarn com.huawei.**
-dontwarn com.meizu.**

-keepattributes Annotation

-keep class com.taobao.** {;}
-keep class org.android.** {
;}
-keep class anet.channel.** {;}
-keep class com.umeng.** {
;}
-keep class com.xiaomi.** {;}
-keep class com.huawei.** {
;}
-keep class com.meizu.** {;}
-keep class org.apache.thrift.** {
;}

-keep class com.alibaba.sdk.android.** {;}
-keep class com.ut.** {
;}
-keep class com.ta.** {*;}

-keep public class *.R$ {
public static final int *;
}
五、 更多样式设置
https://developer.umeng.com/docs/67966/detail/98583
六、 DEMO地址
https://download.csdn.net/download/tong_csdn/26246669

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值