前言
这是一个基于ShareSDK功能的扩展的Flutter插件。使用此插件能够帮助您在使用Flutter开发应用时,快速地实现社会化功能,例如第三方授权登录,获取用户信息以及社交平台的分享等功能。
Demo例子:github.com/MobClub/Sha…
开始集成
引入插件
在pubspec.yaml文件中加入下面依赖
dependencies:
mobcommonlib:
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 或者参考 官网文档
#
# To learn more about a Podspec see http://guides.cocoapods.org/syntax/podspec.html
#
Pod::Spec.new do |s|
s.name = 'sharesdk_plugin'
s.version = '1.1.0'
s.summary = 'Flutter plugin for ShareSDK.'
s.description = <<-DESC
ShareSDK is the most comprehensive Social SDK in the world,which share easily with 40+ platforms.
DESC
s.homepage = 'http://www.mob.com/mobService/sharesdk'
s.license = { :file => '../LICENSE' }
s.author = { 'Mob' => 'mobproduct@mob.com' }
s.source = { :path => '.' }
s.source_files = 'Classes/**/*'
s.public_header_files = 'Classes/**/*.h'
s.dependency 'Flutter'
s.dependency 'mob_sharesdk'
s.dependency 'mob_sharesdk/ShareSDKExtension'
s.dependency 'mob_sharesdk/ShareSDKUI'
s.dependency 'mob_sharesdk/ShareSDKPlatforms/QQ'
s.dependency 'mob_sharesdk/ShareSDKPlatforms/SinaWeibo'
s.dependency 'mob_sharesdk/ShareSDKPlatforms/WeChat'
s.dependency 'mob_sharesdk/ShareSDKPlatforms/Facebook'
s.dependency 'mob_sharesdk/ShareSDKPlatforms/Twitter'
s.static_framework = true
s.ios.deployment_target = '8.0'
end
改好了之后,cd到Xcode目录下,重新pod update即可!
初始化SDK
配置初始化我们SDK的AppKey
在项目工程的Info.plist中如图增加MOBAppKey 和 MOBAppSecret 两个字段
配置平台的URL SCheme和白名单
配置对应平台的URL Scheme和白名单
请参考原生文档里的第四点配置XCode项目里的 URL Scheme配置 和 白名单配置
第三方平台初始化
添加初始化代码
@override
void initState() {
// TODO: implement initState
super.initState();
ShareSDKRegister register = ShareSDKRegister();
register.setupWechat(
"wx617c77c82218ea2c", "c7253e5289986cf4c4c74d1ccc185fb1", "https://70imc.share2dlink.com/");
register.setupSinaWeibo(
"568898243", "38a4f8204cc784f81f9f0daaf31e02e3", "http://www.sharesdk.cn", "https://70imc.share2dlink.com/");
register.setupQQ("100371282", "aed9b0303e3ed1e27bae87c33761161d");
register.setupFacebook(
"1412473428822331", "a42f4f3f867dc947b9ed6020c2e93558", "shareSDK");
register.setupTwitter("viOnkeLpHBKs6KXV7MPpeGyzE",
"NJEglQUy2rqZ9Io9FcAU9p17omFqbORknUpRrCDOK46aAbIiey", "http://mob.com");
register.setupLinkedIn("46kic3zr7s4n", "RWw6WRl9YJOcdWsj", "http://baidu.com");
SharesdkPlugin.regist(register);
}
Android端集成配置
重新编辑build.gradle
Android : 你需要重新编辑build.gradle文件来选择你需要使用的平台,具体支持的平台可以参阅 官网技术文档
配置AndroidManifest
AndroidManifest中需要加入配置
tools:replace="android:name"
将其加到application中,避免mobsdk与flutter的application冲突;
第三方平台添加
如下所示,devInfo内部,需要的平台可以自己添加,不需要的可以删除其中的配置即可;具体支持的平台可以参阅 官网技术文档
MobSDK {
appKey "moba6b6c6d6"
appSecret "b89d2427a3bc7ad1aea1e1e8c1d36bf3"
ShareSDK {
devInfo {
QQ {
id 7
sortId 7
appId "100371282"
appKey "aed9b0303e3ed1e27bae87c33761161d"
shareByAppClient true
bypassApproval false
enable true
}
SinaWeibo {
id 1
sortId 1
appKey "568898243"
appSecret "38a4f8204cc784f81f9f0daaf31e02e3"
callbackUri "http://www.sharesdk.cn"
shareByAppClient true
enable true
}
Wechat {
id 4
sortId 4
appId "wx4868b35061f87885"
appSecret "64020361b8ec4c99936c0e3999a9f249"
userName "gh_afb25ac019c9"
path "pages/index/index.html?id=1"
withShareTicket true
miniprogramType 0
bypassApproval false
enable true
}
Facebook {
id 8
sortId 8
appKey "1412473428822331"
appSecret "a42f4f3f867dc947b9ed6020c2e93558"
callbackUri "https://mob.com"
shareByAppClient true
enable true
}
Twitter {
id 9
sortId 9
appKey "viOnkeLpHBKs6KXV7MPpeGyzE"
appSecret "NJEglQUy2rqZ9Io9FcAU9p17omFqbORknUpRrCDOK46aAbIiey"
callbackUri "http://mob.com"
shareByAppClient true
enable true
}
}
}
}
API接口调用
回传用户隐私授权结果 (submitPrivacyGrantResult)
/**
* 回传用户隐私授权结果
* @param status 用户是否同意隐私协议
* @param result 默认传null
*/
Mobcommonlib.submitPolicyGrantResult(bool status, Function(bool)? result)
| 参数 | 类型 | 作用 | 必填 |
|---|---|---|---|
| status | bool | 是否同意隐私 | 是 |
| result | Function(bool) | 回调 | 是 |
例:
Mobcommonlib.submitPolicyGrantResult(true, null);
ShareSDK功能接口使用
| auth | 授权(只授权不获取用户信息) |
|---|---|
| getUserInfo | 授权(授权的同时获取用户信息) |
| ShowMenu | 弹出九宫格菜单分享 |
| openMiniProgram | 打开微信小程序 |
| shareMiniProgram | 分享微信小程序 |
| shareSinaLinkCard | 分享新浪微博linkcard效果 |
| shareSinaCustom | 新浪单独分享 |
| shareTwitterCustom | 推特单独分享 |
| shareFacebookCustom | Facebook单独分享 |
| shareQQCustom | QQ单独分享 |
| setGeneral | 单独分享(可以设置单独某个平台) |
授权(auth)
void authToWechat(BuildContext context) {
SharesdkPlugin.auth(
ShareSDKPlatforms.wechatSession, null, (SSDKResponseState state,
Map user, SSDKError error) {
showAlert(state, user != null ? user : error.rawData, context);
});
}
获取用户信息(getUserInfo)
void getUserInfoToWechat(BuildContext context) {
SharesdkPlugin.getUserInfo(
ShareSDKPlatforms.wechatSession, (SSDKResponseState state,
Map user, SSDKError error) {
showAlert(state, user != null ? user : error.rawData, context);
});
}
ShareSDKPlatforms.wechatSession这里以微信平台授权作为示例。
调用九宫格分享(showMenu)
setGeneral内的方法顺序及说明:
| title | 标题(String) |
|---|---|
| text | 文本(String) |
| images | 图片数组iOS使用(dynamic) |
| imageUrlAndroid | url图片地址(String) |
| imagePathAndroid | 本地图片路径(String) |
| url | url地址(String) |
| titleUrlAndroid | 标题url地址(String) |
| musicUrlAndroid | 音乐url地址(String) |
| videoUrlAndroid | 视频url地址(String) |
| filePath | 文件地址(String) |
| SSDKContentType contentType | 分享类型 |
SSDKMap params = SSDKMap()
..setGeneral(
"title",
"text",
["http://wx3.sinaimg.cn/large/006nLajtly1fpi9ikmj1kj30dw0dwwfq.jpg"],
"http://wx3.sinaimg.cn/large/006nLajtly1fpi9ikmj1kj30dw0dwwfq.jpg",
"",
"http://www.mob.com/",
"http://wx4.sinaimg.cn/large/006WfoFPly1fw9612f17sj30dw0dwgnd.jpg",
"http://i.y.qq.com/v8/playsong.html?hostuin=0&songid=&songmid=002x5Jje3eUkXT&_wv=1&source=qq&appshare=iphone&media_mid=002x5Jje3eUkXT",
"http://f1.webshare.mob.com/dvideo/demovideos.mp4",
"",
SSDKContentTypes.webpage);
SharesdkPlugin.showMenu(null, null, params, (SSDKResponseState state,
ShareSDKPlatform platform,
dynamic userData,
dynamic contentEntity,
SSDKError error) {
showAlert(state, error.rawData, context);
});
单独分享第三方平台(share)
如下所示,替换share方法内ShareSDKPlatforms.wechatSession第三方平台名称,即可单独分享不同的平台;具体第三方平台名称可以参考如下;
//单独公共分享
SSDKMap params = SSDKMap()
..setGeneral(
"h5.yoto.fun",
"text",
[
"http://pic28.photophoto.cn/20130818/0020033143720852_b.jpg"
],
"",
"",
"http://mob.com",
"",
"",
"",
"",
SSDKContentTypes.image);
SharesdkPlugin.share(ShareSDKPlatforms.wechatSession, params,
(SSDKResponseState state, dynamic userdata, dynamic contentEntity,
SSDKError error) {
showAlert(state, error.rawData, context);
});
单独分享QQ
不需要的参数传null即可
setQQ
| title | 标题(String) |
|---|---|
| text | 文本(String) |
| url | url地址(String) |
| audio | 音频(String) |
| video | 视频(String) |
| musicUrlAndroid | 音乐url地址(String) |
| videoUrlAndroid | 视频url地址(String) |
| thumbImage | 缩略图(String) |
| images | 图片数组iOS使用 |
| imageUrlAndroid | url图片地址(String) |
| imagePathAndroid | 本地图片路径(String) |
| titleUrlAndroid | 标题url地址(String) |
| siteAndroid | android使用(String) |
| siteUrlAndroid | android使用(String) |
| SSDKContentType contentType | 分享类型0:auto(自动)1:text(文本)2:image(图像)3:webpage(网页)4:app(APP)5:audio(音频)6:video(视频)7:file(文件)10:miniProgram(小程序) |
| ShareSDKPlatform subPlatform | 分享平台 |
SSDKMap params = SSDKMap()
..setQQ(
"text",
"title",
"http://m.93lj.com/sharelink?mobid=ziqMNf",
"",
"",
"",
"",
"",
"http://wx4.sinaimg.cn/large/006tkBCzly1fy8hfqdoy6j30dw0dw759.jpg",
"",
"",
"http://m.93lj.com/sharelink?mobid=ziqMNf",
"",
"",
SSDKContentTypes.webpage,
ShareSDKPlatforms.qq);
SharesdkPlugin.share(ShareSDKPlatforms.qq, params, (SSDKResponseState state,
dynamic userdata, dynamic contentEntity, SSDKError error) {
showAlert(state, error.rawData, context);
});
单独分享微博
setSina
| text | 文本(String) |
|---|---|
| title | 标题(String) |
| images | 图片数组iOS使用 |
| video | iOS专用(String) |
| url | 链接(String) |
| latitude | 纬度 (double) |
| longitude | 维度(double) |
| objectId | 父类型 ID (String) |
| isStory | iOS专用 ID (String) |
| image_url | 图片链接地址 (String) |
| image_path | 图片路径地址 (String) |
| SSDKContentType type | 分享类型0:auto(自动)1:text(文本)2:image(图像)3:webpage(网页)4:app(APP)5:audio(音频)6:video(视频)7:file(文件)10:miniProgram(小程序) |
SSDKMap params = SSDKMap()
..setSina(
"text",
"title",
[
"http://download.sdk.mob.com/web/images/2019/07/30/14/1564468183056/750_750_65.12.png"
],
"",
"http://www.mob.com/",
0.0,
0.0,
"",
false,
"http://wx4.sinaimg.cn/large/006WfoFPly1fq0jo9svnaj30dw0dwdhv.jpg",
"",
SSDKContentTypes.auto);
SharesdkPlugin.share(ShareSDKPlatforms.sina, params,
(SSDKResponseState state, dynamic userdata, dynamic contentEntity,
SSDKError error) {
showAlert(state, error.rawData, context);
});
微博分享卡片模式
setSinaLinkCard
linkcard类型如下参数,都不能为空
| text | 文本(String) |
|---|---|
| title | 标题(String) |
| url | 链接(String) |
| sina_summary | 分享综括(String) |
| image_url | 图片链接地址(String) |
| imageX | 图片宽(String) |
| imageY | 图片高(String) |
SSDKMap params = SSDKMap()
..setSinaLinkCard(
"linkcard_text",
"linkcard_title",
"http://www.mob.com/",
"全新品牌,优质服务",
"http://wx4.sinaimg.cn/large/006WfoFPly1fq0jo9svnaj30dw0dwdhv.jpg",
"120",
"120");
SharesdkPlugin.share(ShareSDKPlatforms.sina, params,
(SSDKResponseState state, dynamic userdata, dynamic contentEntity,
SSDKError error) {
showAlert(state, error.rawData, context);
});
单独分享推特
| text | 文本(String) |
|---|---|
| Images | 图片数组 |
| video | 视频(String) |
| latitude | 分享综括(double) |
| longitude | 图片链接地址(double) |
| SSDKContentType type | 分享类型 |
单独分享facebook
| text | 文本(String) |
|---|---|
| Images | 图片数组 |
| url | 链接地址(String) |
| urlTitle | 标题链接地址(String) |
| urlName | 名称链接地址(String) |
| attachementUrl | 附加链接地址(String) |
| hasTag | 标签(String) |
| quote | 引用(String) |
| SSDKContentType type | 分享类型 |
分享小程序参数
setWeChatMiniProgram
| title | 标题(String) |
|---|---|
| desc | 描述(String) |
| webUrl | web地址(String) |
| path | 小程序页面路径(String) |
| thumbImage | 缩略图(String) |
| hdThumbImage | 高清缩略图(String) |
| imageUrlAndroid | 图片Url地址(String) |
| userName | 小程序原始ID(String) |
| withShareTicket | 分享标签(bool) |
| miniProgramType | 小程序类型(int) |
| ShareSDKPlatform subPlatform | 分享平台 |
分享到微信
setWechat
| text | 文本(String) |
|---|---|
| title | 标题(String) |
| url | 链接(String) |
| thumbImage | 缩略图(String) |
| images | 图片数组ios使用 |
| musicFileURL | 音乐文件url地址(String) |
| extInfo | 附加信息(String) |
| imageUrl | 图片链接(String) |
| fileData | 文件流(String) |
| emoticonData | 表情流(String) |
| fileExtension | 文件扩展(String) |
| sourceFileData | 源文件流(String) |
| SSDKContentType contentType | 分享类型 |
| ShareSDKPlatform subPlatform | 分享平台 |
分享到绿洲
setOasis
| text | 文本(String) |
|---|---|
| title | 标题(String) |
| assetLoacallds | 相册地址(List) |
| image | 图片链接或图片数组(List或String) |
| video | 视频地址(String) |
| fileExtension | 视频格式(String) |
| type | 分享类型(只支持image或video)SSDKContentType |
| ShareSDKPlatform subPlatform | 分享平台 |
SSDKMap params = SSDKMap()
..setOasis(
"title",
"text",
null,
"http://wx4.sinaimg.cn/large/006tkBCzly1fy8hfqdoy6j30dw0dw759.jpg",
"",
"",
SSDKContentTypes.image);
SharesdkPlugin.share(ShareSDKPlatforms.oasis, params,
(SSDKResponseState state, dynamic userdata, dynamic contentEntity,
SSDKError error) {
showAlert(state, error.rawData, context);
});
新增对原生FacebookSDK 的支持(SSDKFacebookShareType)
新增跳转到原生分享和在app内分享
| native | 跳转到原生分享 |
|---|---|
| sheet | app内分享 |
class SSDKFacebookShareTypes extends Object {
static SSDKFacebookShareType get native => SSDKFacebookShareType(value: 1);
static SSDKFacebookShareType get sheet => SSDKFacebookShareType(value: 2);
}