前言
ShareSDKPlus封装了ShareSDK,是对APICloud平台的支持,为APICloud开发的App提供社交分享功能的一个组件,支持包括QQ、微信、新浪微博等多家主流社交平台,帮助开发者轻松实现社会化分享、第三方登录、关注、获得用户资料、获取好友列表等主流的功能。 当前ShareSDK版本,iOS:v4.2.5、Android:v3.5.2
集成准备
注册Mob应用
开发者使用本模块之前需要先到 Mob官网申请开发者账号,并在账号内填写相应信息创建自己的 APP,从而获取AppKey和AppSecret。 详情参考: 获取AppKey和AppSecret
创建APICloud应用
APICloud提供了两种创建应用的方式,方便开发者在云端或APICloud Studio中创建应用。
云端创建应用:
注册并登录APICloud系统:https://www.apicloud.com/console 点击左上⻆“创建应用”, 如图:选择“Native”,填写“名称”及“说明”,应用创建完成。
APICloud Studio中创建应用:
下载并安装开发工具:APICloud Studio 2 登录APICloud Studio,没有账号点击“注册账号”,已经注册,用之前注册的APICloud账号登录APICloud Studio
这两端可以相互同步信息:
同步本地应用到云端资源库,开发者在APICloud Studio创建的应用会和云端资源库建立连接。项目代码改动后,可以使用APICloud Studio的代码提交功能提交代码到云端资源库。
打开APICloud云端,加入我们的ShareSDK模块和comlib模块
模块配置
使用此模块之前建议先配置 config.xml 文件,配置完毕,需通过云端编译生效,配置方法如下:
iOS配置
配置config.xml文件
下面是配置各个平台URL Scheme例子,开发者自行删减。下面的值都是ShareSDK Demo测试使用,开发者可自行根据自己的AppKey修改配置
字段描述:
URL Scheme:用于实现应用间跳转及数据交换,跳转到第三方应用客户端进行分享或授权后,从第三方应用客户端平台跳回到当前应用。URL Scheme的value值根据第三方平台规则设置。可以配置多个URL Scheme。
各个平台配置规范:
微信:微信开放平台获取的AppId,URL Scheme为wx+AppId 如: wx617c77c82218ea2c
QQ:需要配置两个URL Scheme,一个是tencent + AppId; 一个是 QQ + AppId转换成的十六进制(如果AppId转换的16进制数不够8位则在前面补0,如转换的是:5FB8B52,则最终填入为QQ05FB8B52 注意:转换后的字母要大写),这里的字母一定要是大写
新浪微博:新浪微博开放平台获取到的appkey,URL Scheme为wb+Appkey 如:wb568898243
Facebook:URL Scheme为fb+AppId如:fb1412473428822331
配置 key.xml 文件
需要将第三方平台(微博、QQ、微信、Twitter、Facebook等)申请的AppKey、AppSecret、redirecturi等参数配置到 key.xml 文件中。
key.xml 配置详解:
key.xml 文件需要放在 widget://res 文件目录下,格式如下:
以上可能出现的全部各个平台的配置,根据开发者需要删减,另外部分特殊平台需要在info.plist文件中配置
字段描述:
shareSDKPlus_SinaWei_AppKey: 从新浪微博开放平台获取的AppKey.
shareSDKPlus_SinaWei_AppSecret: 从新浪微博开放平台获取的AppSecret.
shareSDKPlus_SinaWei_RedirectUri: 从新浪微博开放平台创建应用时自定义填写的回调地址url
其他平台也都是各自到开放平台注册应用获取
配置info.plist文件
该文件含MOB平台MOBAppKey和MOBAppSecret、特殊平台AppKey配置、白名单配置,将info.plist放在widget://res文件目录下,文件内容:
MOBAppKey
moba6b6c6d6
MOBAppSecret
b89d2427a3bc7ad1aea1e1e8c1d36bf3
AccountKitClientToken
c30c08723aa8c48fbd5e01d1c3103891
FacebookAppID
1412473428822331
KAKAO_APP_KEY
9c17eb03317e0e627ec95a400f5785fb
LineSDKConfig
ChannelID
1521201864
LSApplicationQueriesSchemes
kakaotalk-5.9.7
pinterestsdk.v1
vkauthorize
storylink
kakaolink
storykompassauth
kakaokompassauth
yixinfav
yixinoauth
yixinopenapi
yixin
pocket-oauth-v1
dingtalk-open
dingtalk
alipayshare
alipay
whatsapp
tim
timapi
timopensdkfriend
timwpa
timgamebindinggroup
timapiwallet
timOpensdkSSoLogin
wtlogintim
timopensdkgrouptribeshare
timopensdkapiV4
timgamebindinggroup
timopensdkdataline
wtlogintimV1
timapiV1
yixinoauth
yixin
sinaweibohd
sinaweibo
weibosdk2.5
weibosdk
weibo
sinaweibosso
weixin
youtube
mpsharesdk11
mpsharesdk10
mtmv
mqqopensdkapiV4
mqzone
mqqwpa
wtloginmqq2
mqzoneopensdkapiV2
mqzoneopensdkapi19
mqzoneopensdkapi
mqzoneopensdk
mqqopensdkapiV3
mqqopensdkapiV2
mqq
mqqOpensdkSSoLogin
mqqapi
lineauth
line
instagram
fbauth
fb-messenger-platform-20150714
fb-messenger
fbauth2
fbapi
fbapi20130214
twitterauth
tg
telegram
renrenapi
renrenios
renreniphone
douyinsharesdk
douyinopensdk
NSPhotoLibraryAddUsageDescription
写入相册视频
NSPhotoLibraryUsageDescription
从手机相册中选择
NSAppTransportSecurity
NSAllowsArbitraryLoads
MOBAppKey、MOBAppSecret:(必须配置)从MOB平台创建应用后,申请的AppKey和AppSecret.
KAKAO_APP_KEY: 从kaKao平台申请的 AppKey,若iOS平台需要使用kaKaoTalk、kaKaoStory平台进行分享,必须添加此字段
LineSDKConfig: line平台配置
LSApplicationQueriesSchemes: 白名单配置,用于判断是否安装第三方客户端及跳转到第三方客户端, 注意用到哪个就配置哪个,无用的可以不配置
注意:
配置白名单,也可以在配置config.xml文件中,配置方法参考配置可被检测的URL Scheme。配置内容参考 快速集成 配置ATS(App Transport Security),在info.plist文件中,APP可以使用http协议访问。配置方法参考iOS修改Info.plist之配置ATS.
配置UZApp.entitlements文件
将UZApp.entitlements放在widget://res文件目录下,并配置universal Link,文件内容如下:
com.apple.developer.applesignin
Default
com.apple.developer.associated-domains
applinks:ybpre.share2dlink.com
Android配置
注意:ShareSDK的ApiCloud插件1.3.1及之后的版本,做了分包处理,集成方式如下: (老版本集成文档)
平台配置
Android配置第三方平台的AppKey和Mob-AppKey/Mob-AppSecret等信息遵循APICloud的惯例是在config.xml中配置。 在name为”ShareSDKPlus”的标签内,配置标签来填充AppKey等属性的值。 下面是配置各个平台AppKey/AppSecret/RedirectUrl的例子,实际的使用中需要开发者填写自己在第三方网站申请的值(只需要改变值,不要改变AppKey/AppSecret/RedirectUrl的名称,否则将会读取不到)
Android端支持平台
注意:shareSDKPlus模块在ApiCloud的模块库中添加,shareSDKPlus需要使用的其他第三方平台在gitHub上下载
注意:
- 使用QQ空间时,QQ模块也必须引入,即ShareSDKPlusQZone和ShareSDKPlusQQ模块都需要引入。
- 使用QQ模块时,需要修改ShareSDKPlusQQ.zip内容。
步骤为:
- 解压ShareSDKPlusQQ.zip
- 修改解压出的ShareSDKPlusQQ/res文件夹下的AndroidManifest.xml文件中${QQ-AppKey}内容,把${QQ-AppKey}替换为自己应用的QQAPPkey
修改后的内容为:其中1234567则为自己QQ的appkey
- 修改完成,压缩ShareSDKPlusQQ文件夹,压缩方式选择标准。
模块接口
首先添加一个ShareSDK.js,放在widget://script文件目录下,内容如下:
/**
* 常量:分享类型,分享/授权平台,分享/授权结果状态
*/
function ShareSDK()
{
/**
* JSON字符串转换为对象
* @param string JSON字符串
* @returns {Object} 转换后对象
*/
JsonStringToObject = function (string)
{
try
{
return eval("(" + string + ")");
}
catch (err)
{
return null;
}
};
this.JsonStringToObject = function (string)
{
return JsonStringToObject(string);
}
/**
* 对象转JSON字符串
* @param obj 对象
* @returns {string} JSON字符串
*/
ObjectToJsonString = function (obj)
{
var S = [];
var J = null;
var type = Object.prototype.toString.apply(obj);
if (type === '[object Array]')
{
for (var i = 0; i < obj.length; i++)
{
S.push(ObjectToJsonString(obj[i]));
}
J = '[' + S.join(',') + ']';
}
else if (type === '[object Date]')
{
J = "new Date(" + obj.getTime() + ")";
}
else if (type === '[object RegExp]'
|| type === '[object Function]')
{
J = obj.toString();
}
else if (type === '[object Object]')
{
for (var key in obj)
{
var value = ObjectToJsonString(obj[key]);
if (value != null)
{
S.push('"' + key + '":' + value);
}
}
J = '{' + S.join(',') + '}';
}
else if (type === '[object String]')
{
J = '"' + obj.replace(/\\/g, '\\\\').replace(/"/g, '\\"').replace(/\n/g, '') + '"';
}
else if (type === '[object Number]')
{
J = obj;
}
else if (type === '[object Boolean]')
{
J = obj;
}
return J;
};
this.ObjectToJsonString = function (obj)
{
return ObjectToJsonString(obj);
}
/**
* 平台类型
* @type {object}
*/
this.PlatformID = {
Unknown : 0,
SinaWeibo : 1, //Sina Weibo
TencentWeibo : 2, //Tencent Weibo
DouBan : 5, //Dou Ban
QZone : 6, //QZone
Renren : 7, //Ren Ren
Kaixin : 8, //Kai Xin
Pengyou : 9, //Friends
Facebook : 10, //Facebook
Twitter : 11, //Twitter
Evernote : 12, //Evernote
Foursquare : 13, //Foursquare
GooglePlus : 14, //Google+
Instagram : 15, //Instagram
LinkedIn : 16, //LinkedIn
Tumblr : 17, //Tumblr
Mail : 18, //Mail
SMS : 19, //SMS
Print : 20, //Print
Copy : 21, //Copy
WeChat : 22, //WeChat Friends
WeChatMoments : 23, //WeChat Timeline
QQ : 24, //QQ
Instapaper : 25, //Instapaper
Pocket : 26, //Pocket
YouDaoNote : 27, //You Dao Note
Pinterest : 30, //Pinterest
Flickr : 34, //Flickr
Dropbox : 35, //Dropbox
VKontakte : 36, //VKontakte
WeChatFavorites : 37, //WeChat Favorited
YiXinSession : 38, //YiXin Session
YiXinTimeline : 39, //YiXin Timeline
YiXinFav : 40, //YiXin Favorited
MingDao : 41, //明道
Line : 42, //Line
WhatsApp : 43, //Whats App
KakaoTalk : 44, //KakaoTalk
KakaoStory : 45, //KakaoStory
FacebookMessenger : 46, //FacebookMessenger
Bluetooth : 48, //Bluetooth
Alipay : 50, //Alipay
AliPaySocialTimeline:51,//AliPaySocial Timeline
DingTalk:52, //DingTalk
YouTube:53, //youtube
MeiPai:54, //美拍
Cmcc : 55, //中国移动
Reddit : 56, //Reddit
ESurfing : 57, //天翼
Douyin : 58, //抖音
FacebookAccount : 58, //FacebookAccount
KakaoPlatform : 995, //Kakao Series
EvernotePlatform : 996, //Evernote Series
WechatPlatform : 997, //Wechat Series
QQPlatform : 998, //QQ Series
Any : 999 //Any Platform
};
/**
* 回复状态
* @type {object}
*/
this.ResponseState = {
Begin : 0, //开始
Success: 1, //成功
Fail : 2, //失败
Cancel : 3 //取消
};
/**
* 内容分享类型
* @type {object}
*/
this.ContentType = {
Auto : 0,
Text : 1,
Image : 2,
WebPage : 4,
Music : 5,
Video : 6,
App : 7,
File : 8,
Emoji : 9
};
};
var $sharesdk = new ShareSDK();
添加ShareSDK.js目的主要是提供平台号,回调状态等一些常量
引入模块
var shareApi = api.require('shareSDKPlus');
authorize(授权)
authorize({params}, callback(ret, err))
params
platform: 类型:数字 描述:授权平台号,是新浪微博授权还是微信授权或者其他平台授权,由此参数决定
callback(ret, err)
ret: 类型:JSON 对象 内部字段:
{
state: 1 //数字类型,1:成功 2:失败 3:取消
data:{} //json对象 授权后获取的用户信息
error:{ // state = 2时
error_code:, //错误码
error_msg: //错误信息
}
}
示例代码
var shareApi = api.require('ShareSDKPlus');
shareApi.authorize({
"platform": $sharesdk.PlatformID.SinaWeibo
},function(ret, err){
var state = ret.state;
switch(state)
{
case $sharesdk.ResponseState.Success://1
api.toast({
msg: "授权成功",
location: 'middle'
});
break;
case $sharesdk.ResponseState.Fail://2
api.toast({
msg: "授权失败",
location: 'middle'
});
break;
case $sharesdk.ResponseState.Cancel://3
api.toast({
msg: "取消授权",
location: 'middle'
});
break;
default:
}
});
可用性 iOS系统,Android系统 可提供的1.0.0及更高版本
cancelAuthorize(取消授权)
cancelAuthorize({params}, callback(ret, err))
params
platform: 类型:数字 描述:授权平台号
callback(ret, err)
ret: 类型:JSON 对象 内部字段:
{
state: 1 //数字类型,1:成功 2:失败 3:取消
error:{ // state = 2时
error_code:, //错误码
error_msg: //错误信息
}
}
示例代码
var shareApi = api.require('ShareSDKPlus');
shareApi.cancelAuthorize({
"platform": $sharesdk.PlatformID.SinaWeibo
},function(ret, err){
var state = ret.state;
switch(state)
{
case $sharesdk.ResponseState.Success://1
api.toast({
msg: "成功",
location: 'middle'
});
break;
case $sharesdk.ResponseState.Fail://2
api.toast({
msg: "失败",
location: 'middle'
});
break;
case $sharesdk.ResponseState.Cancel://3
api.toast({
msg: "授权",
location: 'middle'
});
break;
default:
}
});
可用性
iOS系统,Android系统 可提供的1.0.0及更高版本
getUserInfo(获取用户信息)
getUserInfo({params}, callback(ret, err))
params
platform: 类型:数字 描述:平台号,是获取新浪微博还是微信或者其他平台用户信息,由此参数决定
callback(ret, err)
ret: 类型:JSON 对象 内部字段:
{
state: 1 //数字类型,1:成功 2:失败 3:取消
data:{} //json对象 获取的用户信息
error:{ // state = 2时
error_code:, //错误码
error_msg: //错误信息
}
}
示例代码
var shareApi = api.require('ShareSDKPlus');
shareApi.getUserInfo({
"platform": $sharesdk.PlatformID.SinaWeibo
},function(ret, err){
var state = ret.state;
switch(state)
{
case $sharesdk.ResponseState.Success://1
api.toast({
msg: "成功",
location: 'middle'
});
break;
case $sharesdk.ResponseState.Fail://2
api.toast({
msg: "失败",
location: 'middle'
});
break;
case $sharesdk.ResponseState.Cancel://3
api.toast({
msg: "取消",
location: 'middle'
});
break;
default:
}
});
shareContent(直接分享)
shareContent({params}, callback(ret, err))
params
platform: 类型:数字 描述:平台号,分享到指定平台
shareParams
类型:json 描述:分享内容 text:文本 imageUrl:图片地址 title:标题
callback(ret, err)
ret: 类型:JSON 对象 内部字段:
{
state: 1 //数字类型,1:成功 2:失败 3:取消
data:{} //
error:{ // state = 2时
error_code:, //错误码
error_msg: //错误信息
}
}
示例代码
var shareApi = api.require('ShareSDKPlus');
var shareParams =
{
"text" : "测试的文字",
"imageUrl" : "https://download.sdk.mob.com/206/4f8/dfc9ea27dd8bc4abfec865c38d/800_450_156.2.jpg",
"title" : "测试的标题",
"titleUrl" : "http://www.mob.com",
"description" : "测试的描述",
"site" : "ShareSDK",
"siteUrl" : "http://www.mob.com",
};
shareApi.shareContent({
"platform": $sharesdk.PlatformID.SinaWeibo,
"shareParams": shareParams
"shareType" : $sharesdk.ContentType.Auto
},function(ret, err){
var state = ret.state;
switch(state)
{
case $sharesdk.ResponseState.Success://1
api.toast({
msg: "分享成功",
location: 'middle'
});
break;
case $sharesdk.ResponseState.Fail://2
api.toast({
msg: "分享失败",
location: 'middle'
});
break;
case $sharesdk.ResponseState.Cancel://3
api.toast({
msg: "取消分享",
location: 'middle'
});
break;
default:
}
});
可用性
iOS系统,Android系统 可提供的1.0.0及更高版本
oneKeyShareContent(一键分享/菜单分享)
oneKeyShareContent({params}, callback(ret, err))
params
platforms:
platform: 类型:数组 描述:可分享的平台列表,为null为全平台
shareParams:
类型:json 描述:分享内容 text:文本 imageUrl:图片地址 title:标题
callback(ret, err)
ret: 类型:JSON 对象 内部字段:
{
state: 1 //数字类型,1:成功 2:失败 3:取消
data:{} //
error:{ // state = 2时
error_code:, //错误码
error_msg: //错误信息
}
}
示例代码
var shareApi = api.require('ShareSDKPlus');
var shareParams =
{
"text" : "测试的文字",
"imageUrl" : "https://download.sdk.mob.com/206/4f8/dfc9ea27dd8bc4abfec865c38d/800_450_156.2.jpg",
"title" : "测试的标题",
"titleUrl" : "http://www.mob.com",
"description" : "测试的描述",
"site" : "ShareSDK",
"siteUrl" : "http://www.mob.com",
};
var platforms =
[
$sharesdk.PlatformID.SinaWeibo,
$sharesdk.PlatformID.WeChat
];
shareApi.oneKeyShareContent({
"platforms": platforms, //为null时,显示全部可分享的平台(排除当前环境不可分享平台)
"shareParams": shareParams
},function(ret, err){
var state = ret.state;
switch(state)
{
case $sharesdk.ResponseState.Success://1
api.toast({
msg: "分享成功",
location: 'middle'
});
break;
case $sharesdk.ResponseState.Fail://2
api.toast({
msg: "分享失败",
location: 'middle'
});
break;
case $sharesdk.ResponseState.Cancel://3
api.toast({
msg: "取消分享",
location: 'middle'
});
break;
default:
}
});
可用性 iOS系统,Android系统 可提供的1.0.0及更高版本
如何扩充平台
当前ShareSDKPlus只支持微信、QQ、新浪微博、钉钉、支付宝、facebook、twitter、Instagram、line、WhatsApp等十个平台,如果想要支持其他平台应如何操作
iOS方案
点击此处
Android方案
点击此处
APICloud例子demo
点击此处