• 阿里云移动研发平台体验报告


    今天,我们来聊聊移动端原生开发。本篇文章涉及Android/iOS两大移动端,将从产品优势和使用方式两大角度解读阿里云移动研发平台(EMAS)。

    一、产品优势

    阿里云平台所提供的移动研发平台,英文简称为EMAS,意为Enterprise Mobile Application Studio。从名称上看,该能力有企业级的运行承载能力。官网上对其定义描述如下:

    移动研发平台(Enterprise Mobile Application Studio,简称EMAS),面向企业服务市场,期望把阿里巴巴近十年在移动互联网行业沉淀的DevOps研发支撑能力、移动APP基础中间件能力开放给客户,帮助传统企业快速完成业务移动化的转型升级目标。

    我自己体验后,得到的结论是:和传统移动开发产品相比,该平台可以使企业级移动客户端的开发过程大大简化。我们先来看看它到底都能做些什么吧。
    EMAS主要能力有以下七个:

    • 移动推送
      在实现高效、精确、实时的移动推送的同时,极大地降低了开发成本。

    • HTTPDNS
      面向移动开发者推出的一款域名解析产品,具有域名防劫持、精准调度的特性。

    • 移动热修复
      阿里巴巴首创Hotpatch技术,提供细粒度热修复能力,无需等待,实时修复应用线上问题。

    • 移动测试
      帮助客户发现APP中的各类隐患,减少用户流失,提高APP质量和市场竞争力。

    • 移动数据分析
      移动开发者实现基于大数据技术的精细化运营、提升产品质量和体验、增强用户黏性。

    • 移动用户反馈
      可以快速发送文字、图片、语音进行意见反馈和报告Bug。

    • 移动崩溃分析
      将Android和iOS平台常见APP的崩溃问题进行归类分析,帮助企业快速发现定位问题。

    看到这,您可能会有疑问:现有的产品已经有这些能力了,比如友盟可以做推送和用户分析,腾讯Bugly可以做崩溃反馈……
    可是,集成多个SDK势必造成产品安装包大小的增加,不同平台在实际使用时也较为分散,写代码的程序员的工作量也会随之增加……这其实都还是次要的。
    下面从移动推送能力为切入视角,我们做一次平台间的对比。首先来看极光推送。

    可以看到,相较免费版,不仅无法享受厂商通道,而且推送次数被限制在一天10条内。
    再来看腾讯的信鸽推送,和极光推送类似地,厂商通道也只有付费版才可以享受,免费试用将会受到如下图所示的限制:

    最后,我们来看看EMAS的收费标准:

    • 对于免费的用户:

    注意:这里说的是每个月,对于每个App去重设备数小于5万台的情况,都是免费使用的。

    • 对于收费用户,预付费和后付费两种方式,具体如下:

    再说产品功能,独有的短信补发特性可以在推送无法到达时,切换为短信下发,进一步确保消息送达。此外,集成EMAS推送能力的App将和阿里系的App共享推送通道。无需新启动常驻内存进程,只要淘宝、天猫能收到消息,我们的App就也可以正常收到推送。不仅保证了消息送达率,还优化了App的内存占用率。
    最后,由于EMAS不仅有移动推送的能力,还涵盖了前文中提到的诸多能力,从集成方式上看,可以说是一次集成,能力全能。解放开发者的同时减少App安装包大小。
    下面,我们就来看看怎样集成EMAS能力。

    二、集成EMAS

    集成EMAS的方法非常简单,在阿里云控制台添加产品后,根据指导可以下载一个名为aliyun-emas-services.json的文本文件,这个文件中包含了各种能力的使能开关和appKey等配置信息,其片段如下所示:

    {
      "config": {
    	"emas.appKey":"xxxxxx",
    	"emas.appSecret":"xxxxxx",
    	"emas.packageName":"com.example.demo",
    	"hotfix.idSecret":"xxxxxx",
    	"hotfix.rsaSecret":"xxxxxx",
    	"httpdns.accountId":"xxxxxx",
    	"httpdns.secretKey":"xxxxxx",
    	"appmonitor.tlog.rsaSecret":"xxxxxx"
    },
      "services": {
    	"hotfix_service":{
    		"status":1,
    		"version":"3.2.14"
    	},
    	"ha-adapter_service":{
    		"status":1,
    		"version":"1.1.3.2-open"
    	},
    	"feedback_service":{
    		"status":1,
    		"version":"3.3.1"
    	},
    ...
    

    传统集成方式中,AndroidManifest.xml中的各种meta标签数据现在改由这个json文件配置,且各种key是自动填好的,下载后就能直接用,一般不用做任何修改;下面的services节点是每个能力的开关,当status为1时为启用相应的能力,言简意赅。
    接着,创建一个继承自Application类的Java类,对要使用的能力进行初始化。这一步骤需要查阅相应的能力的产品文档。比如,我们要集成推送能力,相应代码如下:

    private void initPushService(final Context applicationContext) {
        PushServiceFactory.init(applicationContext);
        final CloudPushService pushService = PushServiceFactory.getCloudPushService();
        pushService.register(applicationContext, new CommonCallback() {
            @Override
            public void onSuccess(String response) {
                Log.d(TAG, "初始化推送能力成功");
            }
    
            @Override
            public void onFailed(String errorCode, String errorMessage) {
                Log.d(TAG, "初始化推送能力失败,错误码:" + errorCode + ",详细信息:" + errorMessage);
            }
        });
    }
    

    接着,在创建一个继承自MessageReceiver类的Java类,用于处理收到的推送消息。这里我们将这个类命名为EmacReceiver.java,完整代码如下:

    public class EmacReceiver extends MessageReceiver {
    
        public static final String TAG = EmacReceiver.class.getName();
    
        @Override
        public void onNotification(Context context, String title, String summary, Map<String, String> extraMap) {
    
            Log.d(TAG, "Receive notification, title: " + title + ", summary: " + summary + ", extraMap: " + extraMap);
        }
    
        @Override
        public void onMessage(Context context, CPushMessage cPushMessage) {
            Log.d(TAG, "onMessage, messageId: " + cPushMessage.getMessageId() + ", title: " + cPushMessage.getTitle() + ", content:" + cPushMessage.getContent());
        }
    
        @Override
        public void onNotificationOpened(Context context, String title, String summary, String extraMap) {
            Log.d(TAG, "onNotificationOpened, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap);
        }
    
        @Override
        protected void onNotificationClickedWithNoAction(Context context, String title, String summary, String extraMap) {
            Log.d(TAG, "onNotificationClickedWithNoAction, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap);
        }
    
        @Override
        protected void onNotificationReceivedInApp(Context context, String title, String summary, Map<String, String> extraMap, int openType, String openActivity, String openUrl) {
            Log.d(TAG, "onNotificationReceivedInApp, title: " + title + ", summary: " + summary + ", extraMap:" + extraMap + ", openType:" + openType + ", openActivity:" + openActivity + ", openUrl:" + openUrl);
        }
    
        @Override
        protected void onNotificationRemoved(Context context, String messageId) {
            Log.d(TAG, "onNotificationRemoved");
        }
    }
    

    最后,在AndroidManifest.xml中声明这个Receiver即可:

    <receiver
        android:name=".EmacReceiver"
        android:exported="false"> 
        <intent-filter>
            <action android:name="com.alibaba.push2.action.NOTIFICATION_OPENED" />
        </intent-filter>
        <intent-filter>
            <action android:name="com.alibaba.push2.action.NOTIFICATION_REMOVED" />
        </intent-filter>
        <intent-filter>
            <action android:name="com.alibaba.sdk.android.push.RECEIVE" />
        </intent-filter>
    </receiver>
    

    到此,设备就可以正常收到消息了。当然,我们还可以进一步配置,以便支持各厂商自有推送通道。这里就不再赘述了,具体请各位移步阿里云EMAS官网查看文档。官网链接:https://www.aliyun.com/product/emas

    文章的最后,放一张EMAS的产品架构全图(其中的某些功能将在未来逐步可用)。
    EMAS产品架构

  • 相关阅读:
    DOM 高级编程笔记
    什么是目标管理?什么叫smart原则?
    HTML文档中小meta的大作用
    《javascript权威指南》基础笔记 重要
    应聘时最漂亮的回答 转
    JS在IE和Firefox之间的区别
    apply与call的用法及区别
    谈谈Ajax跨域
    《高性能网站建设指南》、《高性能网站建设进阶指南》笔记
    HTTP协议状态码详解(HTTP Status Code)
  • 原文地址:https://www.cnblogs.com/wenhanxiao/p/12785614.html
Copyright © 2020-2023  润新知