面向接口编程实施模块化/组件化解耦,以友盟、极光等统计分析为例

模块化/组件化

  • 通过模块化/组件化组织代码,面向接口编程,尽可能做到高内聚、低耦合、重复用。
  • 模块可分为多种类型,一般分为:基础库(日志打印、网络请求、图片加载等)、三方包(微信登录、统计分析、消息推送等)、业务组件(APP外壳、会员中心、商城等)。
  • 常见组件间通信方式:直接依赖(耦合太重,不推荐)、事件或广播(难以溯源,不推荐)、路由(如 ARouter)、面向接口(推荐)。

模块化/组件化的优势:

  • 结构清晰:业务独立,每个业务作为单独的组件,代码实现分离,不会搅在一起。
  • 便于协作:每个开发人员只关心自己负责的模块/组件,每个模块/组件作为一个子工程,没有太多的耦合。
  • 便于维护:各模块/组件管理自己的代码、布局、资源,主工程可以方便添加与移除。

组件化开发的实施步骤

  • 1、在接口层(contract),每个业务模块(如统计分析)定义相关接口(如StatisticContract)并继承自IContract约定好要对外提供的方法。
/**
 * 接口约定,用于通过注解技术反射获取接口的实例
 */
public interface IContract {

}
public interface StatisticContract extends IContract {

    void setup(@NonNull Application application, @NonNull String appKey, @NonNull String channel,
               boolean agreeEulaOrPolicy, boolean isRelease);

    void onEvent(@NonNull String eventID, @NonNull Map<String, Object> map);

    //省略...
}
  • 2、具体的业务组件如友盟统计(umeng)依赖接口层(contract),对约定的接口进行实现(如UMengImpl),同时通过注解ContractImplStatisticContract指定该实现类。若在将来要更换成极光统计(jiguang),则重新指定实现类即可。
implementation project(':contract')
/**
 * 用于指定接口的实现类
 */
@Retention(RetentionPolicy.RUNTIME)
@Target(ElementType.TYPE)
public @interface ContractImpl {
    String className();
}
@ContractImpl(className = "com.github.gzuliyujiang.umeng.UMengImpl")
//@ContractImpl(className = "com.github.gzuliyujiang.jiguang.JiGuangImpl")
public interface StatisticContract extends IContract {
//省略...
}
  • 3、其他使用方都依赖接口层(contract),且具体的业务模块(如umeng)必须通过runtimeOnly进行代码隔离,并通过接口管理器(ContractMaster)获取所需的接口(如StatisticContract)使用。
implementation project(':contract')
runtimeOnly project(':umeng')
//runtimeOnly project(':jiguang')
/**
 * 通过“注解+反射”获取指定接口的实例
 */
public final class ContractMaster {

    @NonNull
    public static <T extends IContract> T get(@NonNull Class<T> contract) {
        //省略...
    }

}
ContractMaster.get(StatisticContract.class)
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
要在uniapp中集成友盟消息推送,可以按照以下步骤进行操作: 1. 在友盟官网创建应用:首先,在友盟官网上创建一个应用并获取AppKey和AppSecret。确保应用类型选择为“推送”。 2. 安装插件:使用uniapp的插件市场搜索并安装友盟推送插件。你可以在`manifest.json`文件中添加以下代码: ```json "uni-app-plus": { "plugins": { "umeng-push": { "version": "1.0.0", "provider": "xxxxxxxx" // 这里填写你的友盟AppKey } } } ``` 3. 配置Android平台:对于Android平台,你需要在`manifest.json`文件中配置一些必要的信息。添加以下代码: ```json "umeng_push": { "appkey": "xxxxxxxx", // 这里填写你的友盟AppKey "channel": "umeng", // 渠道名称,可以自定义 "xiaomi_appid": "", // 小米推送AppId,可选 "xiaomi_appkey": "" // 小米推送AppKey,可选 } ``` 4. 配置iOS平台:对于iOS平台,你需要在`Info.plist`文件中添加以下代码: ```xml <key>UmengPushAppkey</key> <string>xxxxxxxx</string> <!-- 这里填写你的友盟AppKey --> <key>UMessage_StartWithAppkeyEnabled</key> <false/> ``` 5. 调用推送API:在需要使用推送的页面或组件中,使用uniapp的API进行消息推送。你可以使用`uni.request`方法向友盟推送服务器发送消息,示例如下: ```javascript uni.request({ url: 'https://msg.umeng.com/api/send', method: 'POST', header: { 'Content-Type': 'application/json', 'Authorization': 'Basic ' + base64(appKey + ':' + appMasterSecret) }, data: { "appkey": "xxxxxxxx", // 这里填写你的友盟AppKey "timestamp": Date.now(), "policy": { "expire_time": "2022-01-01 00:00:00" }, "payload": { "body": { "custom": { "key1": "value1", "key2": "value2" } }, "display_type": "message", "body": { "ticker": "通知栏提示文字", "title": "通知标题", "text": "通知内容", "after_open": "go_app" } } }, success: function(res) { console.log(res.data); } }); ``` 请确保替换示例代码中的`xxxxxxxx`为你自己的友盟AppKey。另外,你还需要根据具体需求调整消息内容、推送策略等。 以上是集成友盟消息推送的基本步骤,具体操作还需要根据你的实际需求进行调整。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值