Flutter项目中使用ShareSDK和Moblink的踩坑和爬坑记录
前言:大环境下公司降本(裁Yuan)增效,移动端只剩下我一个人,不得不考虑将现有App转向Flutter开发。从iOS转向Flutter目前也快 3个月了,也踩了不少坑,后续如果有时间会慢慢都总结起来。
先记录下爬的坑中,我感觉一个既浪费了时间,还没有什么成就感的系列问题,希望能给有同样需求的同学们,节省下这些时间。
集成 MobLink 插件遇到的坑
1、打Android包时gradle 报错终止打包
控制器会提示如下错误:
* What went wrong:
Execution failed for task ':moblink:verifyProfileResources'.
> A failure occurred while executing com.android.build. grade. task
> Android resource linking failed
ERROR: /Users/bingsen/.gradle/caches/transforms-3/8a02f4a14c2b android:attr/fontVariationSettings not found.
ERROR: /Users/bingsen/.gradle/caches/transforms-3/8a02f4a14c2b
not found.
会出现这个问题是因为官方插件设置的 compileSdkVersion 过低导致的。
解决步骤如下:
-
在 Android Studio 中的
Project面板下,依次展开External Libraries→Flutter Plugings -
找到 Moblink 插件,打开android目录下的 build.gradle
-
找到 andriod.compileSdkVersion 将 27 改为 28或更高版本(具体根据你自己的项目来决定)
2、使用Moblink在安卓侧无法获取场景还原参数
首先官方文档中写的配置是一定要按要求加上的,最主要的两个是客户端的配置,和 Mob 工作台的配置,下面先贴出官方文档。
Flutter 集成文档: www.mob.com/wiki/detail…
工作台操作指南:www.mob.com/wiki/detail…
下面重点来了,按官方文档配置完成后,Android 侧还有一个额外的设置:
-
找到自己Android工程目录下的
AndroidManifest.xml文件 -
在
application节点下插入Mob-AppKey和Mob-AppSecret<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" xmlns:tools="http://schemas.android.com/tools" package="com.excample.project"> ... <application > <meta-data android:name="Mob-AppKey" android:value="your mob AppKey" /> <meta-data android:name="Mob-AppSecret" android:value="your mob AppSecret" /> ... </application> </manifest>
再运行代码,你会惊喜的发现,已经可以正常获取场景还原参数了。不知道为何官方文档中只写了在 gradle 中添加 key 和 secret,导致我一度以为是自己代码端没有写好。还是在安装官方 android 端demo(不是Flutter的demo)后,发现场景还原的功能是正常的。对比了各处配置,最后发现 manifest 里也得配置,内心一阵澎湃🙂。
同时集成 ShareSDK 和 Moblink 时遇到的坑
iOS 侧 Cocopods 异常
按照官方配置,同时集成两个插件后,运行 flutter run 或者 pod install 会提示
[!] The 'Pods-Runner' target has frameworks with conflicting names: mobfoundation.framework.
导致冲突的原因是,sharesdk_plugin 和 mobcommonlib 在最新版本的插件中 iOS 侧依赖的库已经指向了 'AEINFoundation'(mobfoundation.framework 作为其子包),而 mob_link 所依赖的 mob_linksdk_pro 还是直接依赖 mobfoundation。
解决方案如下:
-
将 sharesdk_plugin.podspec 下所有依赖 mob_sharesdk_spec2 的选项改为 mob_sharesdk
To
-
将 mobcommonlib.podspec 下的 AEINFoundation 改为 MOBFoundation
终极方案
大家都知道对于第三方插件依赖,修改本地文件是下下策,当插件更新或者团队开发时往往容易覆盖掉修改的内容。所以为了避免此影响,最优的方案还得是我们自己 fork 官方源,修改完成后将 pubspec 中插件的地址指向我们修改后的源。
授人以鱼不如授人以渔鱼,下面附上我已经修改好的 github 源,大家可直接引用:
dependencies:
# ...
mobcommonlib:
git:
url: https://github.com/LonlyCat/MobCommonlib.git
moblink:
git:
url: https://github.com/LonlyCat/Moblink.git
sharesdk_plugin:
git:
url: https://github.com/LonlyCat/ShareSDK-For-Flutter.git
path: sharesdk_plugin/