QQPlus

installed logout shareText shareNews shareVideo

概述

腾讯QQ(简称“QQ”)是腾讯公司开发的一款基于Internet的即时通信(IM)软件。腾讯QQ支持在线聊天、视频通话、点对点断点续传文件、共享文件、网络硬盘、自定义面板、QQ邮箱等多种功能,并可与多种通讯终端相连。2015年,QQ继续为用户创造良好的通讯体验!其标志是一只戴着红色围巾的小企鹅。

QQPlus 模块是 qq 模块的升级版,开放平台的移动端 SDK,开发者集成此模块可以实现登陆、获取用户信息、分享内容到 QQ 客户端等功能。登陆授权时,模块内部会先判断当前设备是否已安装 QQ 客户端,若没安装则弹出网页版登陆页面,若已安装则跳转到 QQ 客户端提示用户登陆授权。

开发者使用本模块之前需要先到腾讯开放平台申请开发者账号,并在账号内填写相应信息创建自己的 APP,从而获取 APP ID。详情参考

模块使用攻略

使用此模块之前需先配置config文件的Feature,方法如下:

  • 名称:qq
  • 参数:urlScheme、apiKey
  • 配置示例:
  • 字段描述:

    urlScheme:(必须配置)用于实现应用间跳转及数据交换,本应用可以启动QQ客户端,也可以从QQ客户端跳回本应用。urlScheme 的 value 值是从腾讯开放平台获取的 APP ID 与 tencent 拼接而成。APP ID 申请方法参考腾讯开放平台应用接入简介

    apiKey:(必须配置)从腾讯开放平台获取的 APP ID,申请方法参考。

iOS Universal Link 使用攻略

关于 Universal Link

Universal Links(通用链接),是苹果在iOS9之后,提供的一种“通过传统HTTP链接来跳转APP”的能力。该特性相较于传统的Custom URL Scheme方式,具备唯一、安全、私有和简单的优势。

如何使用

  • 创建 entitlements 文件,APICloud 平台上的开发者,可通过此文件告诉编译服务器开通 Associated Domain 功能。配置方法参考论坛帖子。配置示例如下:

    1. <!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
    2. <plist version="1.0">
    3. <dict>
    4. <key>com.apple.developer.associated-domains</key>
    5. <array>
    6. <string>applinks:bjtest.apicloud.com</string>
    7. </array>
    8. </dict>
    9. </plist>

    其中 com.apple.developer.associated-domains 对应的值applinks:bjtest.apicloud.com 是配置的你的应用的

  • 开通 Associated Domains。 登录苹果开发者账号,在左侧列表里找到 Identifiers,选中后再找到你的 Bundle ID (包名),选中该包名,配置开启其 Associated Domains 功能。如下下图所示:

    illustration

  • 服务器端支持苹果 Universal Links。支持方法参考 。

  • 创建自己的Universal Links服务, 可参见苹果官方文档Support Universal Links

  • 互联官网注册自己的Universal Links链接并必须校验通过,可参见

模块接口

installed

判断当前设备是否安装了 QQ 客户端

注:在高版本的iPhone手机上,需要配置

  1. <preference name="querySchemes" value="mqq,mqqapi"/>

installed(callback(ret))

callback(ret)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. status: //布尔类型;是否安装了 QQ 客户端
  3. }

示例代码

  1. var qq = api.require('QQPlus');
  2. qq.installed(function(ret, err) {
  3. if (ret.status) {
  4. api.alert({ msg: "安装" });
  5. } else {
  6. api.alert({ msg: "没有安装" });
  7. }
  8. });

可用性

iOS系统,Android系统

可提供的1.0.2及更高版本

login

登陆qq

login({parmas},callback(ret, err))

params

apiKey:

  • 类型:字符串
  • 描述:(可选项)从腾讯开放平台申请的APP ID,为空则从当前widget的config文件读取

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. status: true, //布尔类型;操作成功状态值
  3. accessToken:'', //字符串类型;返回token
  4. openId:'' //字符串类型;返回openID
  5. unionid:'' //字符串类型;QQ用户的统一标示,对当前开发者账号唯一
  6. //必须先通过邮件向腾讯官方申请,获取权限,否则unionID无法获取,申请邮箱:connect@qq.com
  7. //详情参考:http://www.jianshu.com/p/5775fcead59b
  8. }

err:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. msg:'' //字符串类型;错误描述
  3. }

示例代码

  1. var qq = api.require('QQPlus');
  2. qq.login(function(ret, err) {
  3. api.alert({
  4. title: 'id和token',
  5. msg: ret.openId + ret.accessToken
  6. });
  7. });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

logout

登出qq

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. status: true //布尔类型;操作成功状态值
  3. }

err:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. msg:'' //字符串类型;错误描述
  3. }

示例代码

iOS系统,Android系统

可提供的1.0.0及更高版本

getUserInfo

获取用户信息

getUserInfo(callback(ret, err))

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. status: true, //布尔类型;操作成功状态值
  3. info: //JSON对象;包含用户信息描述,内部字段如下:
  4. // city :用户所在城市
  5. // figureurl :空间小头像(30)地址
  6. // figureurl_1 :空间中头像(50)地址
  7. // figureurl_2 :空间大头像(100)地址
  8. // figureurl_qq_1 :用户小头像(40)地址
  9. // figureurl_qq_2 :用户大头像(100)地址
  10. // gender :用户性别
  11. // is_yellow_vip :是否为黄钻用户
  12. // level :用户账号级别
  13. // nickname :用户昵称
  14. // province :用户所在省份
  15. // yellow_vip_level :用户账户黄钻等级
  16. }

err:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. msg:'' //字符串类型;错误描述
  3. }

示例代码

  1. var qq = api.require('QQPlus');
  2. qq.getUserInfo(function(ret, err) {
  3. if (ret.status) {
  4. api.alert({ msg: JSON.stringify(ret) });
  5. } else {
  6. api.alert({ msg: err.msg });
  7. });

可用性

iOS系统,Android系统

可提供的1.0.1及更高版本

shareText

分享纯文本到手机 QQ(空间、群聊、讨论组、好友),在 android 平台上此接口无回调,在 iOS 平台分享成功无回调

shareText({params}, callback(ret, err))

params

text:

  • 类型:字符串
  • 描述:要分享的文本

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. status: true //布尔类型;操作成功状态值
  3. }

err:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. msg: '', //字符串类型;错误描述
  3. code: 0 //数字类型;错误码,错误码说明:
  4. 0EQQAPISENDSUCESS
  5. 1EQQAPIQQNOTINSTALLED
  6. 2EQQAPIQQNOTSUPPORTAPI
  7. 3EQQAPIMESSAGETYPEINVALID
  8. 4EQQAPIMESSAGECONTENTNULL
  9. 5EQQAPIMESSAGECONTENTINVALID
  10. 6EQQAPIAPPNOTREGISTED
  11. 7EQQAPIAPPSHAREASYNC
  12. -1EQQAPISENDFAILD
  13. -4:用户取消分享
  14. 10000qzone分享不支持text类型分享
  15. 10001qzone分享不支持image类型分享
  16. 10002:当前QQ版本太低,需要更新至新版本才可以支持
  17. }

示例代码

  1. var qq = api.require('QQPlus');
  2. qq.shareText({
  3. text: 'testtext'
  4. },function(ret,err){
  5. if (ret.status){
  6. } else {
  7. api.alert({msg: JSON.stringify(err)});
  8. }
  9. });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

shareImage

分享单张本地图片到 QQ 空间或 QQ 好友、讨论组、群聊

shareImage({params}, callback(ret, err))

params

type:

  • 类型:字符串
  • 描述:(可选项)分享内容到好友或空间
  • 默认值:QZone
  • 取值范围:
    • QZone:分享到 QQ 空间
    • QFriend:分享给好友、讨论组、群聊

imgPath:

  • 类型:字符串
  • 描述:要分享的图片路径,要求本地路径(widget://、fs://)

title:

  • 类型:字符串
  • 描述:(可选项)要分享的图片标题,本参数仅支持 iOS 平台

description:

  • 类型:字符串
  • 描述:(可选项)要分享的图片描述,本参数仅支持 iOS 平台

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. status: true //布尔类型;操作成功状态值
  3. }

err:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. msg:'' //字符串类型;错误描述
  3. code: 0 //数字类型;错误码,错误码说明:
  4. 0EQQAPISENDSUCESS
  5. 1EQQAPIQQNOTINSTALLED
  6. 2EQQAPIQQNOTSUPPORTAPI
  7. 3EQQAPIMESSAGETYPEINVALID
  8. 4EQQAPIMESSAGECONTENTNULL
  9. 5EQQAPIMESSAGECONTENTINVALID
  10. 6EQQAPIAPPNOTREGISTED
  11. 7EQQAPIAPPSHAREASYNC
  12. -1EQQAPISENDFAILD
  13. -4:用户取消分享
  14. 10000qzone分享不支持text类型分享
  15. 10001qzone分享不支持image类型分享
  16. 10002:当前QQ版本太低,需要更新至新版本才可以支持
  17. }

示例代码

  1. var qq = api.require('QQPlus');
  2. qq.shareImage({
  3. type : 'QZone',
  4. imgPath: 'widget://res/img.png'
  5. },function(ret,err){
  6. if (ret.status){
  7. alert("分享成功!");
  8. } else {
  9. api.alert({msg: JSON.stringify(err)});
  10. }
  11. });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

shareNews

分享新闻到 QQ 空间或 QQ 好友、讨论组、群聊

shareNews({params}, callback(ret, err))

params

url:

  • 类型:字符串
  • 描述:要分享的新闻链接地址

title:

  • 类型:字符串
  • 描述:要分享的新闻标题

description:

  • 类型:字符串
  • 描述:要分享的新闻描述(分享到空间无效)

imgUrl:

  • 类型:字符串
  • 描述:要分享的新闻缩略图的url(网络/本地资源图片)Android平台只支持网络图片
  • 类型:字符串
  • 描述:分享内容到好友或空间
  • 默认值:QZone
  • 取值范围:
    • QZone:分享到 QQ 空间
    • QFriend:分享到好友、讨论组、群聊(在 iOS 平台此分享成功后无回调)

ret:

  • 类型:JSON 对象
  • 内部字段:

err:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. msg:'' //字符串类型;错误描述
  3. code: 0 //数字类型;错误码,错误码说明:
  4. 0EQQAPISENDSUCESS
  5. 1EQQAPIQQNOTINSTALLED
  6. 2EQQAPIQQNOTSUPPORTAPI
  7. 3EQQAPIMESSAGETYPEINVALID
  8. 4EQQAPIMESSAGECONTENTNULL
  9. 5EQQAPIMESSAGECONTENTINVALID
  10. 6EQQAPIAPPNOTREGISTED
  11. 7EQQAPIAPPSHAREASYNC
  12. -1EQQAPISENDFAILD
  13. -4:用户取消分享
  14. 10000qzone分享不支持text类型分享
  15. 10001qzone分享不支持image类型分享
  16. 10002:当前QQ版本太低,需要更新至新版本才可以支持
  17. }

示例代码

  1. var qq = api.require('QQPlus');
  2. qq.shareNews({
  3. url: 'http://www.uzmap.com',
  4. title: '新闻分享',
  5. description: '新闻描述',
  6. imgUrl: 'http://upload.wabei.cn/2011/0807/20110807025817844.jpg'
  7. },function(ret,err){
  8. if (ret.status){
  9. alert("分享成功!");
  10. } else {
  11. api.alert({msg: JSON.stringify(err)});
  12. }
  13. });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

shareMusic

分享音乐到QQ 空间或 QQ 好友、讨论组、群聊

shareMusic({params}, callback(ret, err))

params

audioUrl:

  • 类型:字符串
  • 描述:要分享的音乐链接地址

targetUrl:

  • 类型:字符串
  • 描述:点击跳转的网页地址,iOS 平台暂不支持本参数

title:

  • 类型:字符串
  • 描述:(可选项)要分享的标题

description:

  • 类型:字符串
  • 描述:(可选项)要分享的描述

imgUrl:

  • 类型:字符串
  • 描述:要分享的音乐缩略图url(网络/本地资源图片)

type:

  • 类型:字符串
  • 描述:分享内容到好友或空间
  • 默认值:QZone
  • 取值范围:
    • QZone:分享到 QQ 空间

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. status: true //布尔类型;操作成功状态值
  3. }

err:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. msg:'' //字符串类型;错误描述
  3. code: 0 //数字类型;错误码,错误码说明:
  4. 0EQQAPISENDSUCESS
  5. 1EQQAPIQQNOTINSTALLED
  6. 2EQQAPIQQNOTSUPPORTAPI
  7. 3EQQAPIMESSAGETYPEINVALID
  8. 4EQQAPIMESSAGECONTENTNULL
  9. 5EQQAPIMESSAGECONTENTINVALID
  10. 6EQQAPIAPPNOTREGISTED
  11. 7EQQAPIAPPSHAREASYNC
  12. -1EQQAPISENDFAILD
  13. -4:用户取消分享
  14. 10000qzone分享不支持text类型分享
  15. 10001qzone分享不支持image类型分享
  16. 10002:当前QQ版本太低,需要更新至新版本才可以支持
  17. }

示例代码

  1. var qq = api.require('QQPlus');
  2. qq.shareMusic({
  3. audioUrl: 'http://7xq864.com1.z0.glb.clouddn.com/apicloud/591bde468d4e44b21cc225b7b6e1129a.mp3',
  4. targetUrl: 'http://douban.fm/?start=8508g3c27g-3&amp;cid=-3',
  5. title: '桔子香水',
  6. description: '任贤齐',
  7. imgUrl: 'http://upload.wabei.cn/2011/0807/20110807025817844.jpg'
  8. },function(ret,err){
  9. if (ret.status){
  10. alert("分享成功!");
  11. } else {
  12. api.alert({msg: JSON.stringify(err)});
  13. });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

shareVideo

分享本地视频到 QQ 空间

shareVideo({params}, callback(ret, err))

params

videoUrl:

  • 类型:字符串
  • 描述:要分享的本地视频地址,在 android 平台上要求本地路径(widget://、fs://)。在 iOS 平台上要求系统相册内视频地址,可用 UIMediaScanner 模块获取(无需调用transPath接口转换)

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. status: true //布尔类型;操作成功状态值
  3. }

err:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. msg: '', //字符串类型;错误描述
  3. code: 0 //数字类型;错误码,错误码说明:
  4. 0EQQAPISENDSUCESS
  5. 1EQQAPIQQNOTINSTALLED
  6. 2EQQAPIQQNOTSUPPORTAPI
  7. 3EQQAPIMESSAGETYPEINVALID
  8. 4EQQAPIMESSAGECONTENTNULL
  9. 5EQQAPIMESSAGECONTENTINVALID
  10. 6EQQAPIAPPNOTREGISTED
  11. 7EQQAPIAPPSHAREASYNC
  12. -1EQQAPISENDFAILD
  13. -4:用户取消分享
  14. 10000qzone分享不支持text类型分享
  15. 10001qzone分享不支持image类型分享
  16. 10002:当前QQ版本太低,需要更新至新版本才可以支持
  17. }

示例代码

  1. var qq = api.require('QQPlus');
  2. qq.shareVideo({
  3. videoUrl: 'fs://video.mp4'
  4. },function(ret,err){
  5. if (ret.status){
  6. alert("分享成功!");
  7. } else {
  8. api.alert({msg: JSON.stringify(err)});
  9. }
  10. });
  11. //iOS测试代码
  12. var UIMediaScanner = api.require('UIMediaScanner');
  13. UIMediaScanner.open({
  14. type: 'video',
  15. column: 4,
  16. classify: true,
  17. max: 4,
  18. sort: {
  19. key: 'time',
  20. order: 'desc'
  21. },
  22. texts: {
  23. stateText: '已选择*项',
  24. cancelText: '取消',
  25. finishText: '完成'
  26. },
  27. styles: {
  28. bg: '#fff',
  29. mark: {
  30. icon: '',
  31. position: 'bottom_left',
  32. size: 20
  33. },
  34. nav: {
  35. bg: '#eee',
  36. stateColor: '#000',
  37. stateSize: 18,
  38. cancelBg: 'rgba(0,0,0,0)',
  39. cancelColor: '#000',
  40. cancelSize: 18,
  41. finishBg: 'rgba(0,0,0,0)',
  42. finishColor: '#000',
  43. finishSize: 18
  44. }
  45. },
  46. exchange: true,
  47. rotation: true
  48. }, function(ret) {
  49. if (ret) {
  50. var video = ret.list[0];
  51. var qq = api.require('QQPlus');
  52. qq.shareVideo({
  53. videoUrl: video.path,
  54. title: "hello! test."
  55. },function(ret,err){
  56. if (ret.status){
  57. alert("分享成功!");
  58. } else {
  59. api.alert({msg: JSON.stringify(err)});
  60. }
  61. });
  62. }
  63. });

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本

shareMood

发表说说到 QQ 空间

shareMood({params}, callback(ret, err))

params

summary:

  • 类型:字符串
  • 描述:(可选项)分享的说说的内容,注:当 imgUrls 有值时,summary 参数无效

imgUrls:

  • 类型:数组
  • 描述:(可选项)要分享的本地图片地址数组,要求本地路径(widget://、fs://),当本参数为空时,表示发表纯文本说说

callback(ret, err)

ret:

  • 类型:JSON 对象
  • 内部字段:
  1. {
  2. status: true //布尔类型;操作成功状态值
  3. }

err:

  • 类型:JSON 对象
  • 内部字段:

示例代码

  1. var qq = api.require('QQPlus');
  2. qq.shareMood({
  3. summary: '测试分享说说',
  4. imgUrls: ['fs://img1.jpg','fs://img2.jpg']
  5. },function(ret,err){
  6. if (ret.status){
  7. alert("分享成功!");
  8. } else {
  9. api.alert({msg: JSON.stringify(err)});

可用性

iOS系统,Android系统

可提供的1.0.0及更高版本