Flutter 第三方SDK集成(友盟统计,极光推送,百度地图)

2023-11-18

友盟统计

Flutter SDK集成

  • 首先创建一个项目,接着去友盟工作台添加应用。添加成功后会得到AppKey。
集成友盟+ Flutter SDK
umeng_sdk:
 path: ./umeng_sdk/
  • 修改umeng_sdk文件夹下iOS目录下的umeng_sdandroidk.podspec文件。
  //对应版本号去umeng_sdk/android/libs目录下对应版本
  s.dependency 'UMCCommon' ,  '2.1.8'
  s.dependency 'UMCAnalytics', '8.1.4'
  • 在你自己Flutter项目的main.dart示例代码中,在_incrementCounter加入以下代码
  void _incrementCounter() {
    setState(() {
      // This call to setState tells the Flutter framework that something has
      // changed in this State, which causes it to rerun the build method below
      // so that the display can reflect the updated values. If we changed
      // _counter without calling setState(), then the build method would not be
      // called again, and so nothing would appear to happen.
      _counter++;
    });
//    UmengSdk.onEvent('myevent', {'name':'jack', 'age':18, 'male':true});
    // 取消用户账号
    UmengSdk.onProfileSignOff();
    // 如果需要使用页面统计,则先打开该设置
    UmengSdk.setPageCollectionModeManual();
    // 进入页面统计
    UmengSdk.onPageStart("MyApp");
    // 离开页面统计
    UmengSdk.onPageEnd("MyApp");
    // 错误发送
    UmengSdk.reportError("后台程序执行时间过长");
  }
  • 在自己项目的ios/AppDelegate.m中加入iOS的初始化代码
#import "GeneratedPluginRegistrant.h"
#import <UMCommonLog/UMCommonLogHeaders.h>
#import <UMCommon/UMConfigure.h>
- (BOOL)application:(UIApplication *)application
    didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    [UMCommonLogManager setUpUMCommonLogManager];
    [UMConfigure setLogEnabled:YES];
    [UMConfigure initWithAppkey:@"5861e5daf5ade41326001eab" channel:@"App Store"];
  [GeneratedPluginRegistrant registerWithRegistry:self];
  // Override point for customization after application launch.
  return [super application:application didFinishLaunchingWithOptions:launchOptions];
}
Android 配置
  • 在AndroidManifest.xml设置权限、添加MainApplication/MyActivity、设置Appkey和Channel。
public class MainApplication extends FlutterApplication {
    @Override
    public void onCreate() {
        super.onCreate();
        //App Key会在新建应用成功时产生,App Channel自己命名
        UMConfigure.init(this, "Your App Key", "Your App Channel", UMConfigure.DEVICE_TYPE_PHONE, null);
        UMConfigure.setLogEnabled(true);
    }
}

Channel命名规则

1.可以由英文字母、阿拉伯数字、下划线、中划线、空格、括号组成,可以含汉字以及其他明文字符,但是不建议使用中文命名,会出现乱码。

2.首尾字符不可以为空格。

3.不要使用纯数字作为渠道ID。

4.最多256个字符。

5.”unknown” 及其各种大小写形式,作为友盟保留的字段,不可以作为渠道名。

<manifest>
  <uses-permission android:name="android.permission.INTERNET"/>
  <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/>
  <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
  <uses-permission android:name="android.permission.READ_PHONE_STATE"/>
  <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
  <uses-permission android:name="android.permission.CHANGE_WIFI_MULTICAST_STATE"/>
  <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"/>
  <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE"/>
      <!--修改为新建的Application-->
    <application android:name=".MainApplication" ...>
  </application>
  ...
</manifest>

MainActivity

public class MainActivity extends FlutterActivity {
    @Override
    public void configureFlutterEngine(@NonNull FlutterEngine flutterEngine) {
        GeneratedPluginRegistrant.registerWith(flutterEngine);
    }

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        com.example.umeng_sdk.UmengSdkPlugin.setContext(this);
    }

    @Override
    protected void onPause() {
        super.onPause();
        MobclickAgent.onPause(this);
    }

    @Override
    protected void onResume() {
        super.onResume();
        MobclickAgent.onResume(this);
    }
}
iOS 配置

  • 最后,运行项目友盟工作台就可以看到有一个用户了。
  • Demo地址:https://developer.umeng.com/sdk/flutter?refer=UApp#

极光推送

Flutter SDK集成

  • 首先去友盟工作台添加一个应用。添加成功后会得到AppKey。接着去设置推送设置,将新建项目的包名填入。

  • 在自己项目的pubspec.yaml 文件中加入以下代码 Pub get。

jpush_flutter: 0.5.5
Android 配置
  • /android/app/build.gradle 文件中添加下列代码。
android: {
  ....
  defaultConfig {
    applicationId "替换成自己应用 ID"
    ...
    ndk {
	//选择要添加的对应 cpu 类型的 .so 库。
	abiFilters 'armeabi', 'armeabi-v7a', 'x86', 'x86_64', 'mips', 'mips64', 'arm64-v8a',        
    }

    manifestPlaceholders = [
        JPUSH_PKGNAME : applicationId,
        JPUSH_APPKEY : "appkey", // NOTE: JPush 上注册的包名对应的 Appkey.
        JPUSH_CHANNEL : "developer-default", //暂时填写默认值即可.
    ]
  }    
}
iOS配置
  • 在 xcode8 之后需要点开推送选项: TARGETS -> Capabilities -> Push Notification 设为 on 状态。

  • 在main.dart中添加如下代码。
 String debugLable = 'Unknown';
  final JPush jpush = new JPush();
  @override
  void initState() {
    super.initState();
    initPlatformState();
  }

  // Platform messages are asynchronous, so we initialize in an async method.
  Future<void> initPlatformState() async {
    String platformVersion;

    try {
      jpush.addEventHandler(
          onReceiveNotification: (Map<String, dynamic> message) async {
            setState(() {
              debugLable = "flutter onReceiveNotification: $message";
            });
          }, onOpenNotification: (Map<String, dynamic> message) async {
        setState(() {
          debugLable = "flutter onOpenNotification: $message";
        });
      }, onReceiveMessage: (Map<String, dynamic> message) async {
        setState(() {
          debugLable = "flutter onReceiveMessage: $message";
        });
      }, onReceiveNotificationAuthorization:
          (Map<String, dynamic> message) async {
        setState(() {
          debugLable = "flutter onReceiveNotificationAuthorization: $message";
        });
      });
    } on PlatformException {
      platformVersion = 'Failed to get platform version.';
    }

    jpush.setup(
      appKey: "your AppKey", //你自己应用的 AppKey
      channel: "theChannel",
      production: false,
      debug: true,
    );
    jpush.applyPushAuthority(
        new NotificationSettingsIOS(sound: true, alert: true, badge: true));

    // Platform messages may fail, so we use a try/catch PlatformException.
    jpush.getRegistrationID().then((rid) {
      setState(() {
        debugLable = "flutter getRegistrationID: $rid";
      });
    });

    // If the widget was removed from the tree while the asynchronous platform
    // message was in flight, we want to discard the reply rather than calling
    // setState to update our non-existent appearance.
    if (!mounted) return;

    setState(() {
      debugLable = platformVersion;
    });
  }

  • 最后在极光推送后台消息推送模块发送通知或自定义消息,打开手机通知栏可查看到。在推送后台也可查看推送历史,是否成功。
  • Demo地址:https://github.com/jpush/jpush-flutter-plugin

百度地图

  • 首先创建一个项目,接着去百度地图开发平台创建一个应用。

  • 指定应用类型为Android SDK时开发版SHA1和发布版SHA1获取

开发版SHA1获取

  • 用Android Studio打开项目Android目录,点击右上角侧边栏gradle,进入到android/app/android,双击signingReport,就会得到开发版SHA1。

发布版SHA1获取

指定应用类型为iOS SDK时安全码获取(Bundle Identifier)

安全码获取

设置Android和iOS端API_Key
  • 在Android目录清单文件的application节点中设置Android端AK,添加如下代码
<meta-data
    android:name="com.baidu.lbsapi.API_KEY"
    android:value="开发者申请的AK" />
  • 在dart文件中,通过对外接口setApiKey设置iOS端AK,可参考百度定位Flutter插件Demo。代码如下。
@override
void initState() {
  super.initState();

  _locationPlugin.requestPermission();
  //动态申请定位权限

  LocationFlutterPlugin.setApiKey("开发者申请的AK");
  //设置iOS端AK, Android端AK可以直接在清单文件中配置
}

定位

Flutter SDK 集成
  • 在自己项目的pubspec.yaml文件添加如下代码。Pub get。
flutter_bmflocation: ^1.0.2
Map<String, Object> _loationResult;
  BaiduLocation _baiduLocation; // 定位结果

  StreamSubscription<Map<String, Object>> _locationListener;

  LocationFlutterPlugin _locationPlugin = new LocationFlutterPlugin();

  @override
  void initState() {
    super.initState();

    /// 动态申请定位权限
    _locationPlugin.requestPermission();

    /// 设置ios端ak, android端ak可以直接在清单文件中配置
    LocationFlutterPlugin.setApiKey("百度地图开放平台申请的ios端ak");

    _locationListener = _locationPlugin
        .onResultCallback()
        .listen((Map<String, Object> result) {
      setState(() {
        _loationResult = result;
        try {
          _baiduLocation = BaiduLocation.fromMap(result); // 将原生端返回的定位结果信息存储在定位结果类中
        } catch (e) {
          print(e);
        }
      });
    });

  }

  @override
  void dispose() {
    super.dispose();
    if (null != _locationListener) {
      _locationListener.cancel(); // 停止定位
    }
  }
/// 启动定位
  void _startLocation() {
    if (null != _locationPlugin) {
      _setLocOption();
      _locationPlugin.startLocation();
    }
  }

  /// 停止定位
  void _stopLocation() {
    if (null != _locationPlugin) {
      _locationPlugin.stopLocation();
    }
  }
  /// 设置android端和ios端定位参数
  void _setLocOption() {
    /// android 端设置定位参数
    BaiduLocationAndroidOption androidOption = new BaiduLocationAndroidOption();
    androidOption.setCoorType("bd09ll"); // 设置返回的位置坐标系类型
    androidOption.setIsNeedAltitude(true); // 设置是否需要返回海拔高度信息
    androidOption.setIsNeedAddres(true); // 设置是否需要返回地址信息
    androidOption.setIsNeedLocationPoiList(true); // 设置是否需要返回周边poi信息
    androidOption.setIsNeedNewVersionRgc(true); // 设置是否需要返回最新版本rgc信息
    androidOption.setIsNeedLocationDescribe(true); // 设置是否需要返回位置描述
    androidOption.setOpenGps(true); // 设置是否需要使用gps
    androidOption.setLocationMode(LocationMode.Hight_Accuracy); // 设置定位模式
    androidOption.setScanspan(1000); // 设置发起定位请求时间间隔

    Map androidMap = androidOption.getMap();

    /// ios 端设置定位参数
    BaiduLocationIOSOption iosOption = new BaiduLocationIOSOption();
    iosOption.setIsNeedNewVersionRgc(true); // 设置是否需要返回最新版本rgc信息
    iosOption.setBMKLocationCoordinateType("BMKLocationCoordinateTypeBMK09LL"); // 设置返回的位置坐标系类型
    iosOption.setActivityType("CLActivityTypeAutomotiveNavigation"); // 设置应用位置类型
    iosOption.setLocationTimeout(10); // 设置位置获取超时时间
    iosOption.setDesiredAccuracy("kCLLocationAccuracyBest");  // 设置预期精度参数
    iosOption.setReGeocodeTimeout(10); // 设置获取地址信息超时时间
    iosOption.setDistanceFilter(100); // 设置定位最小更新距离
    iosOption.setAllowsBackgroundLocationUpdates(true); // 是否允许后台定位
    iosOption.setPauseLocUpdateAutomatically(true); //  定位是否会被系统自动暂停

    Map iosMap = iosOption.getMap();

    _locationPlugin.prepareLoc(androidMap, iosMap);
  }

地图

Flutter SDK集成
  • 在自己项目的pubspec.yaml文件添加如下代码。Pub get。
  # 百度地图
  flutter_bmfmap:  ^1.0.2
  # 计算工具
  flutter_bmfutils: ^1.0.2
Android配置
  • 在Android环境下初始化地图SDK,新建一个自定义的Application,在AndroidManifest.xml文件中声明该Application,代码如下。
public class MyApplication extends BmfMapApplication{
    @Override
    public void onCreate() {
        super.onCreate();
    }
}
  • Android端在app的build.gradle中android内添加如下代码。
 sourceSets {
        main {
            jniLibs.srcDirs 'jnilibs'
        }
    }

    packagingOptions{
        pickFirst 'lib/armeabi-v7a/libapp.so'
        pickFirst 'lib/armeabi/libapp.so'
        pickFirst 'lib/arm64-v8a/libapp.so'
        pickFirst 'lib/x86/libapp.so'
    }
  • 在main.dart中添加如下代码。
///BMFMapOptions构造,BMFMapOptions包含了创建地图所需要的各种状态参数
///经纬度需要自己通过定位获取,参考定位集成。默认为(39.917215, 116.380341);
BMFMapOptions mapOptions = BMFMapOptions(
        center: BMFCoordinate(39.917215, 116.380341),
        zoomLevel: 12,
        mapPadding: BMFEdgeInsets(left: 30, top: 0, right: 30, bottom: 0));
///地图Flutter Widget构造,BMFMapWidget是地图Flutter插件封装的一个支持AndroidView和UiKitView的Widget。
Container(
      height: screenSize.height,
      width: screenSize.width,
      child: BMFMapWidget(
        onBMFMapCreated: (controller) {
          onBMFMapCreated(controller);
        },
        mapOptions: mapOptions,
      ),
    );
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Flutter 第三方SDK集成(友盟统计,极光推送,百度地图) 的相关文章

随机推荐

  • 南方科技大学计算机学科评估,全国第四轮学科评估结果公布 我校7个学科进入B类...

    原标题 全国第四轮学科评估结果公布 我校7个学科进入B类 近日 教育部学位与研究生教育发展中心公布了全国第四轮学科评估结果 我校25个参评学科有13个上榜 其中 7个学科进入B类 6个学科进入C类 入选学科数位居省属高校第4位 学科评估是教
  • 基于LU分解的矩阵求逆

    import numpy as np import sys def LU deco inverse m dim m shape 0 E np mat np eye dim L np mat np eye dim U m copy for i
  • 无偏估计的数学证明和分析

    最近学习PCA 在求最大化方差 2 1 P 1
  • 自动化测试高频面试题-90%可能会被问到

    Hello 你们的好朋友九九又又又来了 今天猜猜我给大家带来点啥干货呢 最近很多小伙伴出去面试的时候经常会被问到跟自动化测试相关的面试题 所以 今天九九特意给大家整理了一些经常被公司问到的自动化测试相关的面试题 停 咱先收藏起来好吗 别到时
  • js中过一段时间后终止while循环,防止死循环的方法

    今天发现了一个比较有趣的事 相信很多人遇到过写while循环时 在测试时很容易陷入死循环 导致要关闭页面再重启才能继续测试 那如果频繁调试 就每死循环一次就重启一次 很烦 所以想写一个到一定时间就终止循环的函数 刚开始用setTimeout
  • rhel8订阅注册激活

    先注册账号进行订阅 注册系统 https www howtoing com enable rhel subscription in rhel 8
  • JDK1.8的新特性(详细总结)

    目录 前言 一 jdk8简介 二 Lambda表达式语法 函数式接口 三 jdk8 内置四大核心函数接口 消费型接口 海王式接口 只知道索取 供给型接口 舔狗式接口 只知道付出 不索取回报的 函数型接口 双向奔赴 有输入有输出 断言型接口
  • C语言上机实验思路分享5

    实验内容 方法和步骤 1 编写一个函数 由实参传来一个整数n 将它各个位上的数字逆序输出 例如输入 123 输出为321 2 求方程ax 2 bx c O的根 用3个函数分别求当 b 2 4ac大于0 等于0和小于0时的根 并输出结果 从主
  • js使用AjaxFileupload插件实现文件上传

    最近做项目 需要上传表单元素中的文件POST到目标URL 并把得到的数据显示到本页面上 而不跳转到目标URL 那么 现在就要明确两件事 1 不能直接提交表单 因为一旦点击submit就会自动跳转到action界面 2 可以选择ajax进行异
  • Spring boot 整合 log4j2日志、程序异常,发送邮件通知

    官方文档 https logging apache org log4j 2 x 1 Maven修改如下
  • html 元素平滑滚动到某一位置

    在网上查了大半天 有人用高度算 然后setTimeout的 那个观感真的是差到家了 还有人说用 js动画库的 其实很简单 直接用window scrollTo 这个方法就完事了 回到顶部 window scrollTo top 0 beha
  • 【Java】5大排序算法总结(插入排序+希尔排序+选择排序+堆排序+冒泡排序)

    快速导航 1 稳定性 2 插入排序 3 希尔排序 4 选择排序 5 堆排序 6 冒泡排序 1 稳定性 两个相等的数据 如果经过排序后 排序算法能保证其相对位置不发生变化 则我们称该算法是具备稳定性的排序算法 图中排序后a仍然在b前面 此时这
  • Spring的两种代理方式:JDK动态代理和CGLIB动态代理

    代理模式 代理模式的英文叫做Proxy或Surrogate 中文都可译为 代理 所谓代理 就是一个人或者一个机构代表另一个人或者另一个机构采取行动 在一些情况下 一个客户不想或者不能够直接引用一个对象 而代理对象可以在客户端和目标对象之间起
  • Dalvik虚拟机简要介绍和学习计划

    通过修改 android framework base core jni AndroidRuntime cpp 中的 property get dalvik vm heapsize heapsizeOptsBuf 4 16m 来修改 dal
  • 电脑连接蓝牙耳机还是外放,输出设备只有扬声器怎么解决?

    1 问题描述 电脑连接蓝牙耳机耳机后 声音依然外放 输出设备只有扬声器 添加输出设备也找不到蓝牙耳机 2 排查问题 如果大家遇到的问题与我不同 还请查阅其他文章 右键计算机图标 gt 管理 gt 设备管理器 gt 声音 视频和游戏控制器 发
  • 神经网络应用: 手写数字识别(MNIST数据集)

    1 前言 本文使用 tensorflow 2 10 0 版本构建神经网络模型并进行训练 不同版本之间的 API 可能会有不同 请选择合适的版本学习 2 MNIST 数据集介绍 MNIST数据集 Mixed National Institut
  • 高性能计算(HPC)和智能计算理解

    1 现代终端设备一般都跟云端服务器相连 但只要可能 我们都希望计算可以在本地终端解决 这样做的好处是多方面的 既可以减小网络带宽的压力 又可以避免网络传输产生的时延 还可以让用户的数据更安全 现代终端设备一般用一个片上系统 SoC 做计算
  • Docker安装MinIO详细步骤

    本篇博客主要记录在Docker当中安装MinIO 目录 一 查看docker环境是否正常 二 下载minIO的镜像 三 创建minIO容器 四 访问地址 五 安装遇到问题 1 问题一 2 问题二 3 问题三 一 查看docker环境是否正常
  • Ubuntu18 04安装QQ

    Ubuntu18 04安装QQ Created time December 20 2022 5 12 PM Last edited time December 20 2022 6 15 PM Tags QQ Ubuntu18 04 截图工具
  • Flutter 第三方SDK集成(友盟统计,极光推送,百度地图)

    友盟统计 Flutter SDK集成 首先创建一个项目 接着去友盟工作台添加应用 添加成功后会得到AppKey 集成友盟 Flutter SDK 下载Demo Demo地址 https developer umeng com api sdk