美文网首页
Flutter友盟插件开发使用

Flutter友盟插件开发使用

作者: 早起的年轻人 | 来源:发表于2020-01-14 21:30 被阅读0次

    更多文章请查看 flutter从入门 到精通

    可以用来加载 Html 页面,以实现 Android 中 WebView 或者 是 iOS 中的 UIWebView 中的功能。

    插件源码在这里

    开发插件要具备的知识:

    flutter_fai_umeng 插件可实现的功能:

    • 同时适配于 Android Ios 两个平台
    • 实现友盟多渠道统计
    • 实现页面的进入与退出统计
    • 实现自定义事件的统计
    • 实现错误信息的统计

    1 开始使用

    1 基本使用说明

    1.1 Flutter 项目中 pubspec.xml 文件中 配置插件
      flutter_fai_umeng:
        git:
          url: https://github.com/zhaolongs/flutter_fai_umeng.git
          ref: master
    
    
    1.2 初始化友盟
    import 'package:flutter_fai_umeng/flutter_fai_umeng.dart';
    
        ///友盟的初始化
        ///参数一 appkey
        ///参数二 推送使用的pushSecret
        ///参数三 是否打开调试日志
        FlutterFaiUmeng.uMengInit("5dcfb8f84ca357f70e000b0a",
            pushSecret: "5cb4fc014c143a77fb85cb17edd807a2", logEnabled: true);
    

    flutter_fai_umeng 插件封装了常用的初始化配制
    如在Android 中

    
        public static void uMengInit(Context context, String appkey, String pushSecret, boolean logEnabled) {
            ///在本方法中使用了[getChannelName]方法来获取配置在 AndroidManifest.xml中的友盟的渠道名称
            ///如使用 360加固打包启动了多渠道打包配制,getChannelName 方法将会获取到这个渠道名称
            uMengInit(context, appkey, getChannelName(context), UMConfigure.DEVICE_TYPE_PHONE, pushSecret, logEnabled);
        }
        
        /**
         * @param channel    渠道的命名规范
         *                   1.可以由英文字母、阿拉伯数字、下划线、中划线、空格、括号组成,可以含汉字以及其他明文字符,但是不建议使用中文命名,会出现乱码。
         *                   2.首尾字符不可以为空格。
         *                   3.不要使用纯数字作为渠道ID。
         *                   4.最多256个字符。
         *                   5.”unknown” 及其各种大小写形式,作为【友盟+】保留的字段,不可以作为渠道名。
         *                   <p>
         *                   在您查看数据时,渠道会作为一个数据细分的维度。
         * @param context
         * @param appkey
         * @param channel
         * @param deviceType
         * @param pushSecret
         */
        public static void uMengInit(Context context, String appkey, String channel, int deviceType, String pushSecret, boolean logEnabled) {
            
            /**
             * 设置组件化的Log开关
             * 参数: boolean 默认为false,如需查看LOG设置为true
             * Error(打印SDK集成或运行时错误信息)。
             * Warn(打印SDK警告信息)。
             * Info(打印SDK提示信息)。
             * Debug(打印SDK调试信息)。
             */
            UMConfigure.setLogEnabled(logEnabled);
            //打开调试模式
            MobclickAgent.setDebugMode( logEnabled );
            //true打开 ,false为关闭
            //禁止默认的页面统计方式  (一般不用设置,因为默认是进行统计的)
            //MobclickAgent.openActivityDurationTrack(true);
            //错误收集(默认已经配置,而且已经打开)
            //MobclickAgent.setCatchUncaughtExceptions(true);
            
            if (channel == null || channel.equals("")) {
                channel = "test";
            }
            if (appkey == null || appkey.equals("")) {
                throw new NullPointerException("appkey is null");
            }
            
            /**
             * 注意: 即使您已经在AndroidManifest.xml中配置过appkey和channel值,也需要在App代码中调
             * 用初始化接口(如需要使用AndroidManifest.xml中配置好的appkey和channel值,
             * UMConfigure.init调用中appkey和channel参数请置为null)。
             */
            UMConfigure.init(context, appkey, channel, deviceType, pushSecret);
            // 选用LEGACY_AUTO页面采集模式
            MobclickAgent.setPageCollectionMode(MobclickAgent.PageMode.AUTO);
            // 支持在子进程中统计自定义事件
            UMConfigure.setProcessEvent(true);
            
        
        }
    
        
        
        /**
         * 获取渠道名
         *
         * @param ctx 此处习惯性的设置为activity,实际上context就可以
         * @return 如果没有获取成功,那么返回值为空
         */
        public static String getChannelName(Context ctx) {
            if (ctx == null) {
                return null;
            }
            String channelName = null;
            try {
                PackageManager packageManager = ctx.getPackageManager();
                if (packageManager != null) {
                    //注意此处为ApplicationInfo 而不是 ActivityInfo,因为友盟设置的meta-data是在application标签中,而不是某activity标签中,所以用ApplicationInfo
                    ApplicationInfo applicationInfo = packageManager.getApplicationInfo(ctx.getPackageName(), PackageManager.GET_META_DATA);
                    if (applicationInfo != null) {
                        if (applicationInfo.metaData != null) {
                            channelName = applicationInfo.metaData.getString("UMENG_CHANNEL");
                        }
                    }
                    
                }
            } catch (PackageManager.NameNotFoundException e) {
                e.printStackTrace();
            }
            return channelName;
        }
    

    在 ios 中
    完整源码在这里

       //日志
       [UMConfigure setLogEnabled:logEnabled];
       if(logEnabled){
            //开发者需要显式的调用此函数,日志系统才能工作
            [UMCommonLogManager setUpUMCommonLogManager];
        }
        //渠道设置以及友盟的初始化
       [UMConfigure initWithAppkey:appkey channel:@"App Store"];
       //设置为自动采集页面
       [MobClick setAutoPageEnabled:NO];
    
    1.3 页面的统计

    进入页面

    FlutterFaiUmeng.uMengPageStart("测试页面1");
    

    退出页面

    FlutterFaiUmeng.uMengPageEnd("测试页面1");
    
    1.4 自定义事件的统计
    FlutterFaiUmeng.uMengEventClick("login");
    

    这里使用到的login 是在友盟管理后台设置的自定义事件名称


    在这里插入图片描述
    1.5 错误日志统计

    友盟官方提到

    组件化统计SDK内建JVM层错误统计。
    SDK通过Thread.UncaughtExceptionHandler 捕获程序崩溃日志,并在程序下次启动时发送到服务器
    

    所以在这里编写的 Flutter 插件是延用的友盟官方的策略,如果是开发者自己捕捉的异常,可手动上传。

     FlutterFaiUmeng.uMengError("有错误了");
    

    如有疑问可以回复

    相关文章

      网友评论

          本文标题:Flutter友盟插件开发使用

          本文链接:https://www.haomeiwen.com/subject/alfzactx.html