Flutter项目中使用ShareSDK和Moblink的踩坑和爬坑记录

696 阅读3分钟

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 过低导致的。

解决步骤如下:

  1. 在 Android Studio 中的 Project 面板下,依次展开External LibrariesFlutter Plugings

    CleanShot 2022-11-27 at 22.53.25@2x_VFlkts4ISR.png

  2. 找到 Moblink 插件,打开android目录下的 build.gradle

    CleanShot 2022-11-27 at 22.57.43@2x_l4Rw2pdEG1.png

  3. 找到 andriod.compileSdkVersion 将 27 改为 28或更高版本(具体根据你自己的项目来决定)

    CleanShot 2022-11-27 at 23.01.52@2x_D2-JrNJ1IB.png

2、使用Moblink在安卓侧无法获取场景还原参数

首先官方文档中写的配置是一定要按要求加上的,最主要的两个是客户端的配置,和 Mob 工作台的配置,下面先贴出官方文档。

Flutter 集成文档: www.mob.com/wiki/detail…

工作台操作指南:www.mob.com/wiki/detail…

下面重点来了,按官方文档配置完成后,Android 侧还有一个额外的设置:

  1. 找到自己Android工程目录下的 AndroidManifest.xml 文件

    CleanShot 2022-11-27 at 23.19.57@2x_QGDxl31whT.png

  2. application 节点下插入 Mob-AppKeyMob-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_pluginmobcommonlib 在最新版本的插件中 iOS 侧依赖的库已经指向了 'AEINFoundation'(mobfoundation.framework 作为其子包),而 mob_link 所依赖的 mob_linksdk_pro 还是直接依赖 mobfoundation

解决方案如下:

  • 将 sharesdk_plugin.podspec 下所有依赖 mob_sharesdk_spec2 的选项改为 mob_sharesdk

    CleanShot 2022-11-28 at 00.42.52@2x_KMBs5wLEJl.png

    To

    CleanShot 2022-11-28 at 00.43.31@2x_4fQuAPnPao.png

  • 将 mobcommonlib.podspec 下的 AEINFoundation 改为 MOBFoundation

    CleanShot 2022-11-28 at 00.45.09@2x_lg-M6l8wjr.png

终极方案

大家都知道对于第三方插件依赖,修改本地文件是下下策,当插件更新或者团队开发时往往容易覆盖掉修改的内容。所以为了避免此影响,最优的方案还得是我们自己 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/