• ShareSDK for Flutter


    前言

    这是一个基于ShareSDK功能的扩展的Flutter插件。使用此插件能够帮助您在使用Flutter开发应用时,快速地实现社会化功能,例如第三方授权登录,获取用户信息以及社交平台的分享等功能。
    Demo例子:https://github.com/MobClub/ShareSDK-For-Flutter

    开始集成

    引入插件

    sharesdk_plugin | Flutter Package

    在pubspec.yaml文件中加入下面依赖

    1. dependencies:
    2. mobcommonlib:
    3. sharesdk_plugin:

    然后执行:flutter packages get 导入package

    在你的dart工程文件中,导入下面头文件,开始使用

    import 'package:sharesdk_plugin/sharesdk_plugin.dart';

    iOS端集成配置 

    iOS端自定义需要导入的分享平台(非必须)

    iOS : 这个文件里默认有我们的一些主流平台,如果需要增加平台,或者减少平台,你需要重新编辑 sharesdk_plugin.podspec文件设置 dependency,具体支持的平台可以参阅pod search mob_sharesdk 或者参考官方文档

    1. #
    2. # To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
    3. #
    4. Pod::Spec.new do |s|
    5. s.name = 'sharesdk_plugin'
    6. s.version = '1.1.0'
    7. s.summary = 'Flutter plugin for ShareSDK.'
    8. s.description = <<-DESC
    9. ShareSDK is the most comprehensive Social SDK in the world,which share easily with 40+ platforms.
    10. DESC
    11. s.homepage = 'http://www.mob.com/mobService/sharesdk'
    12. s.license = { :file => '../LICENSE' }
    13. s.author = { 'Mob' => 'mobproduct@mob.com' }
    14. s.source = { :path => '.' }
    15. s.source_files = 'Classes/**/*'
    16. s.public_header_files = 'Classes/**/*.h'
    17. s.dependency 'Flutter'
    18. s.dependency 'mob_sharesdk'
    19. s.dependency 'mob_sharesdk/ShareSDKExtension'
    20. s.dependency 'mob_sharesdk/ShareSDKUI'
    21. s.dependency 'mob_sharesdk/ShareSDKPlatforms/QQ'
    22. s.dependency 'mob_sharesdk/ShareSDKPlatforms/SinaWeibo'
    23. s.dependency 'mob_sharesdk/ShareSDKPlatforms/WeChat'
    24. s.dependency 'mob_sharesdk/ShareSDKPlatforms/Facebook'
    25. s.dependency 'mob_sharesdk/ShareSDKPlatforms/Twitter'
    26. s.static_framework = true
    27. s.ios.deployment_target = '8.0'
    28. end

    改好了之后,cd到Xcode目录下,重新pod update即可!

    初始化SDK

    配置初始化我们SDK的AppKey

    在项目工程的Info.plist中如图增加MOBAppKey 和 MOBAppSecret 两个字段

     配置平台的URL SCheme和白名单

    请参考原生文档里的第四点配置XCode项目里的 URL Scheme配置白名单配置 

    第三方平台初始化

    添加初始化代码

    1. @override
    2. void initState() {
    3. // TODO: implement initState
    4. super.initState();
    5. ShareSDKRegister register = ShareSDKRegister();
    6. register.setupWechat(
    7. "wx617c77c82218ea2c", "c7253e5289986cf4c4c74d1ccc185fb1", "https://70imc.share2dlink.com/");
    8. register.setupSinaWeibo(
    9. "568898243", "38a4f8204cc784f81f9f0daaf31e02e3", "http://www.sharesdk.cn", "https://70imc.share2dlink.com/");
    10. register.setupQQ("100371282", "aed9b0303e3ed1e27bae87c33761161d");
    11. register.setupFacebook(
    12. "1412473428822331", "a42f4f3f867dc947b9ed6020c2e93558", "shareSDK");
    13. register.setupTwitter("viOnkeLpHBKs6KXV7MPpeGyzE",
    14. "NJEglQUy2rqZ9Io9FcAU9p17omFqbORknUpRrCDOK46aAbIiey", "http://mob.com");
    15. register.setupLinkedIn("46kic3zr7s4n", "RWw6WRl9YJOcdWsj", "http://baidu.com");
    16. SharesdkPlugin.regist(register);
    17. }

    Android端集成配置 

    重新编辑build.gradle

    Android : 你需要重新编辑build.gradle, mobsdk.gradle文件来选择你需要使用的平台,具体支持的平台可以参阅 官网技术文档

     配置AndroidManifest

    AndroidManifest中需要加入配置

    tools:replace="android:name"

    将其加到application中,避免mobsdk与flutter的application冲突;

    第三方平台添加 

    mobsdk.gradle

    如下所示,devInfo内部,需要的平台可以自己添加,不需要的可以删除其中的配置即可;具体支持的平台可以参阅 官网技术文档

    1. MobSDK {
    2. appKey "moba6b6c6d6"
    3. appSecret "b89d2427a3bc7ad1aea1e1e8c1d36bf3"
    4. ShareSDK {
    5. devInfo {
    6. QQ {
    7. id 7
    8. sortId 7
    9. appId "100371282"
    10. appKey "aed9b0303e3ed1e27bae87c33761161d"
    11. shareByAppClient true
    12. bypassApproval false
    13. enable true
    14. }
    15. SinaWeibo {
    16. id 1
    17. sortId 1
    18. appKey "568898243"
    19. appSecret "38a4f8204cc784f81f9f0daaf31e02e3"
    20. callbackUri "http://www.sharesdk.cn"
    21. shareByAppClient true
    22. enable true
    23. }
    24. Wechat {
    25. id 4
    26. sortId 4
    27. appId "wx4868b35061f87885"
    28. appSecret "64020361b8ec4c99936c0e3999a9f249"
    29. userName "gh_afb25ac019c9"
    30. path "pages/index/index.html?id=1"
    31. withShareTicket true
    32. miniprogramType 0
    33. bypassApproval false
    34. enable true
    35. }
    36. Facebook {
    37. id 8
    38. sortId 8
    39. appKey "1412473428822331"
    40. appSecret "a42f4f3f867dc947b9ed6020c2e93558"
    41. callbackUri "https://mob.com"
    42. shareByAppClient true
    43. enable true
    44. }
    45. Twitter {
    46. id 9
    47. sortId 9
    48. appKey "viOnkeLpHBKs6KXV7MPpeGyzE"
    49. appSecret "NJEglQUy2rqZ9Io9FcAU9p17omFqbORknUpRrCDOK46aAbIiey"
    50. callbackUri "http://mob.com"
    51. shareByAppClient true
    52. enable true
    53. }
    54. }
    55. }
    56. }

    API接口调用 

    回传用户隐私授权结果 (submitPrivacyGrantResult)

    1. /**
    2. * 回传用户隐私授权结果
    3. * @param status 用户是否同意隐私协议
    4. * @param result 默认传null
    5. */
    6. Mobcommonlib.submitPolicyGrantResult(bool status, Function(bool)? result)

     

    1. 例:
    2. Mobcommonlib.submitPolicyGrantResult(true, null);

    ShareSDK功能接口使用

     

    授权(auth)

    1. void authToWechat(BuildContext context) {
    2. SharesdkPlugin.auth(
    3. ShareSDKPlatforms.wechatSession, null, (SSDKResponseState state,
    4. Map user, SSDKError error) {
    5. showAlert(state, user != null ? user : error.rawData, context);
    6. });
    7. }

    获取用户信息(getUserInfo) 

    1. void getUserInfoToWechat(BuildContext context) {
    2. SharesdkPlugin.getUserInfo(
    3. ShareSDKPlatforms.wechatSession, (SSDKResponseState state,
    4. Map user, SSDKError error) {
    5. showAlert(state, user != null ? user : error.rawData, context);
    6. });
    7. }

    ShareSDKPlatforms.wechatSession这里以微信平台授权作为示例。

    调用九宫格分享(showMenu) 

    setGeneral内的方法顺序及说明:

    1. SSDKMap params = SSDKMap()
    2. ..setGeneral(
    3. "title",
    4. "text",
    5. ["http://wx3.sinaimg.cn/large/006nLajtly1fpi9ikmj1kj30dw0dwwfq.jpg"],
    6. "http://wx3.sinaimg.cn/large/006nLajtly1fpi9ikmj1kj30dw0dwwfq.jpg",
    7. "",
    8. "http://www.mob.com/",
    9. "http://wx4.sinaimg.cn/large/006WfoFPly1fw9612f17sj30dw0dwgnd.jpg",
    10. "http://i.y.qq.com/v8/playsong.html?hostuin=0&songid=&songmid=002x5Jje3eUkXT&_wv=1&source=qq&appshare=iphone&media_mid=002x5Jje3eUkXT",
    11. "http://f1.webshare.mob.com/dvideo/demovideos.mp4",
    12. "",
    13. SSDKContentTypes.webpage);
    14. SharesdkPlugin.showMenu(null, null, params, (SSDKResponseState state,
    15. ShareSDKPlatform platform,
    16. dynamic userData,
    17. dynamic contentEntity,
    18. SSDKError error) {
    19. showAlert(state, error.rawData, context);
    20. });

    单独分享第三方平台(share)

    如下所示,替换share方法内ShareSDKPlatforms.wechatSession第三方平台名称,即可单独分享不同的平台;具体第三方平台名称可以参考如下; 

    1. //单独公共分享
    2. SSDKMap params = SSDKMap()
    3. ..setGeneral(
    4. "h5.yoto.fun",
    5. "text",
    6. [
    7. "http://pic28.photophoto.cn/20130818/0020033143720852_b.jpg"
    8. ],
    9. "",
    10. "",
    11. "http://mob.com",
    12. "",
    13. "",
    14. "",
    15. "",
    16. SSDKContentTypes.image);
    17. SharesdkPlugin.share(ShareSDKPlatforms.wechatSession, params,
    18. (SSDKResponseState state, dynamic userdata, dynamic contentEntity,
    19. SSDKError error) {
    20. showAlert(state, error.rawData, context);
    21. });

    单独分享QQ

    不需要的参数传null即可

    setQQ

    1. SSDKMap params = SSDKMap()
    2. ..setQQ(
    3. "text",
    4. "title",
    5. "http://m.93lj.com/sharelink?mobid=ziqMNf",
    6. "",
    7. "",
    8. "",
    9. "",
    10. "",
    11. "http://wx4.sinaimg.cn/large/006tkBCzly1fy8hfqdoy6j30dw0dw759.jpg",
    12. "",
    13. "",
    14. "http://m.93lj.com/sharelink?mobid=ziqMNf",
    15. "",
    16. "",
    17. SSDKContentTypes.webpage,
    18. ShareSDKPlatforms.qq);
    19. SharesdkPlugin.share(ShareSDKPlatforms.qq, params, (SSDKResponseState state,
    20. dynamic userdata, dynamic contentEntity, SSDKError error) {
    21. showAlert(state, error.rawData, context);
    22. });

    单独分享微博

    setSina

     

    1. SSDKMap params = SSDKMap()
    2. ..setSina(
    3. "text",
    4. "title",
    5. [
    6. "http://download.sdk.mob.com/web/images/2019/07/30/14/1564468183056/750_750_65.12.png"
    7. ],
    8. "",
    9. "http://www.mob.com/",
    10. 0.0,
    11. 0.0,
    12. "",
    13. false,
    14. "http://wx4.sinaimg.cn/large/006WfoFPly1fq0jo9svnaj30dw0dwdhv.jpg",
    15. "",
    16. SSDKContentTypes.auto);
    17. SharesdkPlugin.share(ShareSDKPlatforms.sina, params,
    18. (SSDKResponseState state, dynamic userdata, dynamic contentEntity,
    19. SSDKError error) {
    20. showAlert(state, error.rawData, context);
    21. });

    微博分享卡片模式

    setSinaLinkCard

    linkcard类型如下参数,都不能为空

    1. SSDKMap params = SSDKMap()
    2. ..setSinaLinkCard(
    3. "linkcard_text",
    4. "linkcard_title",
    5. "http://www.mob.com/",
    6. "全新品牌,优质服务",
    7. "http://wx4.sinaimg.cn/large/006WfoFPly1fq0jo9svnaj30dw0dwdhv.jpg",
    8. "120",
    9. "120");
    10. SharesdkPlugin.share(ShareSDKPlatforms.sina, params,
    11. (SSDKResponseState state, dynamic userdata, dynamic contentEntity,
    12. SSDKError error) {
    13. showAlert(state, error.rawData, context);
    14. });

    单独分享推特

      

    单独分享facebook 

    分享小程序参数

    setWeChatMiniProgram

    分享到微信

    setWechat

    分享到绿洲

    setOasis

    1. SSDKMap params = SSDKMap()
    2. ..setOasis(
    3. "title",
    4. "text",
    5. null,
    6. "http://wx4.sinaimg.cn/large/006tkBCzly1fy8hfqdoy6j30dw0dw759.jpg",
    7. "",
    8. "",
    9. SSDKContentTypes.image);
    10. SharesdkPlugin.share(ShareSDKPlatforms.oasis, params,
    11. (SSDKResponseState state, dynamic userdata, dynamic contentEntity,
    12. SSDKError error) {
    13. showAlert(state, error.rawData, context);
    14. });

    新增对原生FacebookSDK 的支持(SSDKFacebookShareType)

    新增跳转到原生分享和在app内分享

    1. class SSDKFacebookShareTypes extends Object {
    2. static SSDKFacebookShareType get native => SSDKFacebookShareType(value: 1);
    3. static SSDKFacebookShareType get sheet => SSDKFacebookShareType(value: 2);
    4. }

    Flutter iOS端注意事项

    由于插件更新,SDK的Pod依赖被替换,Flutter 本身写入Pod文件不会先执行删除原有依赖,导致可能会出现原有本地库依然存在,请检查Pod文件夹下文件,直接手动删除mob_shareSDK 以及 MOBFoundation文件即可,如有疑问,请直接通过官网和我们联系。

     

     

     

     

     

     

     

     

     

     

     

     

     

     

     

  • 相关阅读:
    docker基础学习
    【C语言刷LeetCode】451. 根据字符出现频率排序(M)
    【物理】复合场中配速法
    mindspore-RuntimeError: mindspore/ccsrc/backend/session/ascend_session.cc:
    RestAssured用jSON Schema 断言,超级简单
    配置web&数据库开发环境
    小程序毕设作品之微信二手交易小程序毕业设计成品(3)后台功能
    微信小程序完整项目实战(前端+后端)
    JavaWeb基础学习(5)
    godot引擎学习3
  • 原文地址:https://blog.csdn.net/apkkkk/article/details/128020409