inShare
论坛示例
为帮助用户更好更快的使用插件,论坛维护了一个示例,示例中包含示例代码供您参考。
概述
inShare是一个调用系统分享功能的插件,通过该插件能够分享一些最常见的文本,多图到支持系统分享的第三方应用(例如:微信、QQ、新浪微博等)。
使用该插件的 优点:
- 不需要集成SDK
- 不会与其他分享插件冲突
- ios直接在程序内部搞定,体验非常好(不用担心跳转到微信等应用,用户不返回app)
- 各种平台分享,代码高度一致,通用性非常强
- 对ios而言,由于是app内部分享,分享成功失败,统计非常准确。
使用该插件的 缺点:
- 对“图文链接”不支持。如果单纯分享图片或者文字这种方式是最好的。
- 没有网络的情况不能分享成功。
- ios不能指定分享到某个特定平台。例如:你不能限制用户是分享到“微信朋友圈”,还是“微信好友”。
- Android平台分享成功与否是没有回调的
使用插件注意事项!!!
- 不同的应用对系统分享的实现可能都是不同的,比如:对纯文本的分享,ios的微信不支持而QQ、微博等则支持。
- 同一应用对系统分享的实现也可能改变,比如:新浪微博ios当下只能分享一张图片,而不久前还可以分享多图。
- 针对上述情况,本插件只是封装了系统的分享接口供开发使用,至于您要分享的应用是否支持你的分享 则需要用户自己去甄别和测试!(针对一些常见应用的特殊情况在接口文档中有说明)
- 由于没有ipad设备测试,所以本插件暂不能确定是否对ipad支持,如有需要请测试无误后再用!
shareImgsTo
分享多张图片到其他应用(要求用户有安装该应用并且已登录账户,才可分享成功)
shareImgsTo({params}, callback(ret, err))
params
imgPaths:
- 类型:字符串
- 描述:要分享的图片的路径由“,”(逗号)分隔组成的字符串;要求本地路径,相对路径如:fs://、cache://,绝对路径如:var/mobile/Containers/Data/Application/...
- 注意:
- ios中imgPaths为相对路径(如widget://)时须设置 needDecodePath 参数为true
- Android 平台不支持 widget:// 路径
sendPattern:
- 类型:字符串
- 描述:(可选项)分享打开其他应用的模式
- 默认值:“MULTIPLE”
- 取值范围:(注意ios11及以上系统仅 "ALL" 有效)
- ONLY (打开指定应用的指定页面)仅Android有效
- MULTIPLE(打开指定应用所有支持多图分享的页面选择列表页,如果支持该分享的页面只有一个则直接打开该分享页面)
- ALL (打开本手机上支持系统分享的所以应用)
app:
- 类型:字符串
- 描述:(可选项)插件提供了几个常用的分享应用。若本参数不为空则插件忽略 packageName 和 activityName 参数。
- 取值范围:
- qqFriend (Android指定分享到“QQ好友”,ios指定打开“QQ”选择分享)
- qqZone (Android指定分享到“QQ空间”,ios指定打开“QQ”选择分享)
- wxCircle (Android指定分享到“微信朋友圈”,ios指定打开“微信”选择分享)
- wxFriend (Android指定分享到微信好友,ios指定打开“微信”选择分享)
- xinLang (分享到“微博”)
- 注意:
- qqZone :Android中 qqZone 代表的是一个单独的应用--QQ空间,而非QQ中的空间。
- xinLang :很多应用都有多个版本(比如:微博、新浪微博4G版、新浪微博HD...),这里的xinLang对应--微博(安卓包名为com.sina.weibo,ios bundleid为com.apple.share.SinaWeibo.post)。
packageName:
- 类型:字符串
- 描述:(app 参数为空时 必需)分享应用的 包名(android)/bundleId(ios)。
activityName:
- 类型:字符串
- 描述:(可选项)指定分享到应用的具体页面,比如 分享到"QQ好友"。当 sendPattern 参数为“ONLY”,而 app 参数为空时 必需传该参数。仅Android有效
description:
- 类型:字符串
- 描述:(可选项)对分享的描述,只在个别情况下有效,比如:分享图片到“微信朋友圈”时。
- 注意事项:1、需要已登录第三方应用时有效;2、在ios 11及以上不要使用该字段,否则微信分享会获取不到数据!
dialogTitle:
- 类型:字符串
- 描述:(可选项)设置分享选择列表的标题,当sendPattern 不为“ONLY”时有用,若不设置该参数 则用户在“始终”和“仅此一次”的方式中选择始终分享应用后,再次分享时将直接分享到上次已经选择的应用。仅Android有效,且部分机型不支持(如 华为Honor 6A)
forResult:
- 类型:布尔型
- 默认值:false
- 描述:(可选项)是否采用startActivityForResult的方式打开其他应用(采用该方式打开分享完成后会在回调的ret 中返回resultCode值)。仅Android有效
imgSetType:
- 类型:int
- 默认值:0
- 描述:(可选项)用于设置图片的添加方式。仅ios有效
- 注意:以下两种方式各有优劣,推荐您百度了解以下其区别。
- 取值范围:(注意ios11及以上系统仅 非0 有效)
- 0 (ios添加图片采用[UIImage imageNamed:name]的方式)
- 非0 ( ios添加图片采用[UIImage imageWithContentsOfFile:path]的方式)
needDecodePath:
- 类型:布尔型
- 默认值:false
- 描述:(可选项)是否将图片路径转换为绝对路径,当所传 imgPaths 参数为类似“fs://cache/xx.png”的相对路径时,须设置为true。仅ios有效
callback(ret, err)
ret:
- 类型:JSON对象
- 描述:android的系统分享并没有成功与否的回调(若需要回调处理,可尝试使用 resultCode 字段,但需注意不同应用可能存在差异),ios有回调。
- 内部字段:
{
status: true|false //布尔型,分享操作是否成功。true:操作成功,false:操作错误(ios 可用该字段判断分享结果是否成功;Android 在出现错误时返回false,仅在 forResult 参数为true且分享完成(不一定分享成功)后返回 true)
resultCode:-1|0... //int,分享页面结束后返回的resultCode(仅在android平台且 forResult 参数为false时有),一般分享成功为-1,失败为0(实际以各应用的返回值为准)。
errorMessage:"" //字符串,错误信息(失败时返回)
}
示例代码
var inShare = api.require('inShare');
inShare.shareImgsTo({
imgPaths:'cache://image/test1.png,cache://image/test2.png',
sendPattern:'ONLY',
description:'这是分享的测试图片描述',
//packageName:'com.tencent.mobileqq',
//activityName:'com.tencent.mobileqq.activity.JumpActivity',
app:'qqFriend',
},function(ret,err){
if(ret.status){
alert(JSON.stringify(ret));
}else{
alert(ret.errorMessage);
}
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
shareTextTo
主要用于分享文本内容到其他应用(要求用户有安装该应用并且已登录账户,才可分享成功)
在ios中可通过设置 urlScheme 参数来单纯性的打开其他应用。
shareTextTo({params}, callback(ret, err))
params
content:
- 类型:字符串
- 描述:要分享的文本内容。
- 另外说明:
- iOS微信不支持纯文字的分享,但也可通过将文本内容复制到剪切板,再打开微信去粘贴来实现类似的效果;
- Android 微信朋友圈 不支持纯文字分享。
urlScheme:
- 类型:字符串
- 默认值:"weixin://"
- 描述:(可选项)当 sendPattern 参数为“ONLY” 时,ios 通过urlScheme去打开应用(只是打开应用 不做分享操作,可以事先将分享内容复制到系统剪切板让用户自己粘贴)。仅ios有效
sendPattern:
- 类型:字符串
- 描述:(可选项)分享打开其他应用的模式
- 默认值:“MULTIPLE”
- 取值范围:
- ONLY (在Android中为打开指定应用的指定页面;在ios中此参数用于和urlScheme参数配合使用 只是打开应用 不做分享操作)
- MULTIPLE(打开指定应用所有支持文本分享的页面选择列表页,如果支持该分享的页面只有一个则直接打开分享页面;另外说明ios中的QQ无法使用本参数进行纯文本分享,可以使用下面的ALL值进行分享)
- ALL (打开本手机上支持系统分享的所有应用)
app:
- 类型:字符串
- 描述:(可选项)插件提供了几个常用的分享应用。若本参数不为空则插件忽略 packageName activityName 和 urlScheme参数。
- 取值范围:
- qqFriend (Android指定分享到“QQ好友”,ios指定打开“QQ”选择分享)
- qqZone (Android指定分享到“QQ空间”,ios指定打开“QQ”选择分享)
- wxFriend (Android中当 sendPattern 参数为“ONLY”时指定分享到“微信好友”,而当 sendPattern 参数为“MULTIPLE”时指定打开“微信”选择分享;ios指定打开“微信”选择分享)
- xinLang (分享到“微博”)
- 注意:
- qqZone :Android中 qqZone 代表的是一个单独的应用--QQ空间,而非QQ中的空间。
- xinLang :很多应用都有多个版本(比如:微博、新浪微博4G版、新浪微博HD...),这里的xinLang对应--微博(安卓包名为com.sina.weibo,ios bundleid为com.apple.share.SinaWeibo.post)。
packageName:
- 类型:字符串
- 描述:(app 参数为空时 必需)分享应用的 包名(android)/bundleId(ios)。
activityName:
- 类型:字符串
- 描述:(可选项)指定分享到应用的具体页面,比如 分享到"QQ好友"。当 sendPattern 参数为“ONLY”,而 app 参数为空时 必需传该参数。仅Android有效
dialogTitle:
- 类型:字符串
- 描述:(可选项)设置分享选择列表的标题,当sendPattern 不为“ONLY”时有用,若不设置该参数 则用户在“始终”和“仅此一次”的方式中选择始终分享应用后,再次分享时将直接分享到上次已经选择的应用。仅Android有效,且部分机型不支持(如 华为Honor 6A)
forResult:
- 类型:布尔型
- 默认值:false
- 描述:(可选项)是否采用startActivityForResult的方式打开其他应用(采用该方式打开分享完成后会在回调的ret 中返回resultCode值)。仅Android有效
callback(ret, err)
ret:
- 类型:JSON对象
- 描述:android的系统分享并没有成功与否的回调(若需要回调处理,可尝试使用 resultCode 字段,但需注意不同应用可能存在差异),ios有回调。
- 内部字段:
{
status: true|false //布尔型,分享操作是否成功。true:操作成功,false:操作错误(ios 可用该字段判断分享结果是否成功;Android 在出现错误时返回false,仅在 forResult 参数为true且分享完成(不一定分享成功)后返回 true)
resultCode:-1|0... //int,分享页面结束后返回的resultCode(仅在android平台且 forResult 参数为false时有),一般分享成功为-1,失败为0(实际以各应用的返回值为准)。
errorMessage:"" //字符串,错误信息(失败时返回)
}
示例代码
var inShare = api.require('inShare');
inShare.shareTextTo({
content:'测试分享内容',
sendPattern:'ONLY',
//packageName:'com.tencent.mobileqq',
//activityName:'com.tencent.mobileqq.activity.JumpActivity',
app:'qqFriend',
},function(ret,err){
if(ret.status){
alert(JSON.stringify(ret));
}else{
alert(ret.errorMessage);
}
});
可用性
iOS系统,Android系统
可提供的1.0.0及更高版本
getSupportedApp
用于Android手机中获取当前已安装的支持多图/文本分享的应用信息(包名/支持分享类型的页面类路径)
此接口主要是方便用户获取上面两个接口中用到的packageName和activityName参数
getSupportedApp({params}, callback(ret, err))
params
type:
- 类型:字符串
- 默认值:"image"
- 描述:支持类型
- 取值范围:
callback(ret, err)
ret:
{
status: true //布尔型,操作是否成功。
supportedList:[] //应用信息数组,以"应用名:packageName/activityName"的格式组织
}
示例代码
var inShare = api.require('inShare');
inShare.getSupportedApp(
{
// type:'text',
},function(ret,err){
alert(JSON.stringify(ret));
});
可用性
Android系统
可提供的1.0.0及更高版本