查看: 3507|回复: 4

[通用问题] 集成QQ/QQ空间分享

[复制链接]

Rank: 5Rank: 5

主题:
帖子:
积分:
0

[通用问题] 集成QQ/QQ空间分享

[复制链接]
3507 4 | 发表于 2017-9-13 18:40:57 |阅读模式 | |
本帖最后由 小莹 于 2017-12-7 19:34 编辑

   shareSDK 集成文档--QQ/QQ空间

一、准备工作

    1、mob平台官网注册账号登录并从官网后台创建应用生成appkey和appSecret

    2、到腾讯开放平台(http://open.qq.com/)创建移动应用生成appkey和appSecret

以下为申请步骤:

    第一步:创建应用


进入首页的“应用接入”appidappkey立即生成,可关联QQ互联,一般web端开发

appkey和appSecret使用QQ互联生成,移动端统一用腾讯开放平台。


QQappid.png
第二步:完善应用基本信息

选择平台>移动应用安卓>创建应用。按照要求填写应用信息,上传安装包和应用

图标和其他必填选项,提交审核即可。以下是腾讯开放平台创建应用并审核的过程,

分享功能不需要审核通过也可以分享,登录功能需要审核。

q基本信息.png
Q选择平台.png

Q应用介绍.png

传用签名文件打包后的安装包
120150kittb0quuzqvis1x.png
应用接入后会在应用宝市场分发请您根据项目进度需要慎重选择发布时间
发布选项.png

上传图标,按照尺寸和规定上传。16*16像素的png图片;512*512像素的jpg或png图片;480*800像素的jpg或png图片两张以上应用程序内容图片。应用小图标即分享成功后左下角显示程序来源的小图标一般是应用logo,
应用图标.png


填写应用适配信息及其他必填项,最后保存并提交审核

二、集成


1、mob官网下载shareSDK,选择需要集成的第三方平台--QQ(其他一样选择需要的平台)右下角下载SDK,mob提供了官方demo源码在右上角可点击下载;

下载SDk.png

2、下载的SDK解压
解压SDk.png

ShareSDK在“ShareSDKfor Android”目录下,“ShareSDK for Android ApiDoc”包含集成API。
集成.png

ShareSDK for Android目录中的“Libs”包含“MainLibs”和“OnekeyShare”分别是ShareSDK的核心库和“快捷分享”的源码库,说明文档也在“ShareSDK for Android”目录下,供开发者开发时查阅。
执行QuickIntegrater.jar

如下图输入输入项目名称、包名,并勾选所要集成的社交平台,左下角选择“集成快捷分享”使用onekeyshare快捷分享的开发者不要忘记选择。点击“确定”,程序会自动搜集集成SDK所需要的jar和资源。完成以后通过复制目标目录中的文件到您项目中覆盖;

120150zywuokhby9zhf3yo.png

三、配置Android Manifest.xml
application下的intentQQ回调类配置腾讯开放平台的appid
meta-data标签配置mob平台的appkey和appSecret
以下是Android Manifest.xml代码
<!-- 添加必要的权限 -->
<uses-permissionandroid:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permissionandroid:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.GET_TASKS"/>
<uses-permissionandroid:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE"/>
<uses-permissionandroid:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permissionandroid:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permissionandroid:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permissionandroid:name="android.permission.READ_PHONE_STATE" />
<uses-permissionandroid:name="android.permission.SYSTEM_ALERT_WINDOW" />

<!-- 以MobApplication作为项目Application -->
<application
       android:name="com.mob.MobApplication">

       <!-- 其它的activity -->

       <!-- ShareSDK的activity -->
<activity
    android:name="com.mob.tools.MobUIShell"
    android:theme="@android:style/Theme.Translucent.NoTitleBar"
    android:configChanges="keyboardHidden|orientation|screenSize"
    android:windowSoftInputMode="stateHidden|adjustResize" >

(3.1.0版本之后(包含3.1.0)才需要注册此Activity)如果集成QQ分享,或者使用QQ客户端来进行QQ空间的分享,须要在此处添加一个回调activity,对ACTION_VIEW事件的过滤器,其中的scheme是“tencent”前缀再开发者应用的加上appId。如果此Activity和过滤器不设置,则分享结束以后不能得到正确的回调。
tencent后面的appid 必须与sharesdk.xml里面配置的QQ的appid保持一致 否则没有回调  
<!--QQ分享回调-->     
<activity
android:name="cn.sharesdk.tencent.qq.ReceiveActivity"
android:launchMode="singleTask"
android:noHistory="true">
<intent-filter>  
<action android:name="android.intent.action.VIEW" />  
<category android:name="android.intent.category.DEFAULT" />   
<category android:name="android.intent.category.BROWSABLE" />   
<data android:scheme="tencent100371282" />
</intent-filter>
</activity>
    <!-- 调用新浪原生SDK,需要注册的回调activity -->
    <intent-filter>
        <actionandroid:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY"/>
        <categoryandroid:name="android.intent.category.DEFAULT" />
    </intent-filter>

    <!--集成line客户端登录授权,需要添如下格式的过滤器-->
    <intent-filter>
<data android:scheme="line.1477692153"/>
<actionandroid:name="android.intent.action.VIEW"/>
<categoryandroid:name="android.intent.category.BROWSABLE" />
<categoryandroid:name="android.intent.category.DEFAULT" />
    </intent-filter>

</activity>
<!-- 填写您从Mob开发者后台中得到的Appkey和AppSecret-->
<meta-dataandroid:name="Mob-AppKey" android:value="您的AppKey"/>
<meta-dataandroid:name="Mob-AppSecret" android:value="您的AppSecret"/>
</application>



四、配置shareSDk.xml

配置QQ/QQ空间的appid和appkey默认是demo中开发者自己申请的这里配置改成您由开放平台申请的即可;(appid和appkey是QQ/QQ空间通用的)
ShareByAppClient标识是否使用微博客户端分享,默认是false ;
BypassApproval是是否绕过审核分享默认是"true";

<QQ
Id="7"
SortId="7"
AppId="100371282"
AppKey="aed9b0303e3ed1e27bae87c33761161d"
ShareByAppClient="true"
BypassApproval="false"
Enable="true" />

<QZone
Id="3"
SortId="3"
AppId="100371282"
AppKey="aed9b0303e3ed1e27bae87c33761161d"
BypassApproval="true"
Enable="true" />
BypassApproval是绕过审核的标记,设置为trueAppId将被忽略,不经过审核的应用也可以执行分享,但是仅限于分享文字和图片,不能分享链接,
BypassApproval="false"不绕过审核分享可以分享网页形式的带连接、标题、文本显示分享应用来源、应用图标
不绕过审核分享完成有弹框选择返回应用程序和留在QQ,绕过审核分享提示返回第三方工具
image-不绕过审核.png image-绕过审核.png

不绕过审核.png

五、添加代码

方法一:onekeyshare一键分享(各个分享平台)
private void showShare() {
     OnekeyShare oks = new OnekeyShare();
     //关闭sso授权
     oks.disableSSOWhenAuthorize();

    // 分享时Notification的图标和文字  2.5.9以后的版本不     调用此方法
    //oks.setNotification(R.drawable.ic_launcher,getString(R.string.app_name));
     // title标题,印象笔记、邮箱、信息、微信、人人网和QQ空间使用
     oks.setTitle(getString(R.string.share));
     // titleUrl是标题的网络链接,仅在人人网和QQ空间使用
    oks.setTitleUrl("http://sharesdk.cn");
     // text是分享文本,所有平台都需要这个字段
     oks.setText("我是分享文本");
     // imagePath是图片的本地路径,Linked-In以外的平台都支持此参数
    oks.setImagePath("/sdcard/test.jpg");//确保SDcard下面存在此张图片
     // url仅在微信(包括好友和朋友圈)中使用
    oks.setUrl("http://sharesdk.cn");
     // comment是我对这条分享的评论,仅在人人网和QQ空间使用
     oks.setComment("我是测试评论文本");
     // site是分享此内容的网站名称,仅在QQ空间使用
     oks.setSite(getString(R.string.app_name));
     // siteUrl是分享此内容的网站地址,仅在QQ空间使用
    oks.setSiteUrl("http://sharesdk.cn");

    // 启动分享GUI
    oks.show(this);
}

onekeyshare分享指定到QQ/QQ空间
public static voidshowShare() {
OnekeyShare oks = new OnekeyShare();
oks.setImageUrl(“http://firicon.fir.im/baa18a6d779c597888d685f1159070df5b4f2912”);
oks.setTitleUrl(“http://www.baidu.com”);
oks.setText(“text”);
oks.setTitle(“标题”);
oks.setPlatform(QQ.NAME);
//oks.setPlatform(QZone.NAME);
oks.show(context);
}
方法二:单独分享指定到QQ/QQ空间分享平台
ShareParams sp = newShareParams();
sp.setTitle("测试分享的标题");
sp.setTitleUrl("http://sharesdk.cn");// 标题的超链接
sp.setText("测试分享的文本");
sp.setImageUrl("http://www.someserver.com/测试图片网络地址.jpg");
sp.setSite("发布分享的网站名称");
sp.setSiteUrl("发布分享网站的地址");

Platform qq =ShareSDK.getPlatform (QQ.NAME);
//Platformqzone = ShareSDK.getPlatform (QZone.NAME);

// 设置分享事件回调(注:回调放在不能保证在主线程调用,不可以在里面直接处理UI操作)
qzone.setPlatformActionListener(new PlatformActionListener() {
public void onError(Platform arg0, int arg1,Throwable arg2) {
  //失败的回调,arg:平台对象,arg1:表示当前的动作,arg2:异常信息
}
public void onComplete(Platform arg0, intarg1, HashMap<String, Object> arg2) {
  //分享成功的回调
}
public void onCancel(Platform arg0, int arg1){
  //取消分享的回调
}
});
// 执行图文分享
qq.share(sp);
//qzone.share(sp);



六、分享内容及传参说明

QQ分享内容的设置以及传参

   
分享图片
  
  
  
ImageUrl
  

  
imagePath
  

   
分享链接
  
  
  
title
  
  
titleUrl
  
  
text
  
  
imagePath
  

  
imageUrl
  

   
分享音频
  
  
  
title
  
  
titleUrl
  
  
text
  
  
imagePath
  
  
musicUrl
  
  
imageUrl
  
QQ分享图文和音乐,在PC版本的QQ上可能只看到一条连接,因为PC版本的QQ只会对其白名单的连接作截图,如果不在此名单中,则只是显示连接而已. 如果只分享图片在PC端看不到图片的,只会显示null,在手机端会显示图片和null字段。



QQ空间

   
分享视频
  
  
  
FilePth(“/sdcard/视频.mp4”)
  
  
ShareType(platform.SHARE_VIDEO)
  

   
分享文本
  
  
  
title
  
  
titleUrl
  
  
text
  
  
site
  
  
siteUrl
  

   
发表说说
  
  
  
text
  
  
imagePath
  
  
site
  
  
siteUrl
  

  
imageUrl
  

   
分享图文
  
  
  
title
  
  
titleUrl
  
  
text
  
  
imagePath
  
  
site
  
  
siteUrl
  
  
QQ空间分享时一定要携带title、titleUrl、site、siteUrl,QQ空间本身不支持分享本地图片,因此如果想分享本地图片,图片会先上传到ShareSDK的文件服务器,得到连接以后才分享此链接。由于本地图片更耗流量,因此imageUrl优先级高于imagePath。 site是分享此内容的网站名称,仅在QQ空间使用;siteUrl是分享此内容的网站地址,仅在QQ空间使用;

QQ平台常见错误码:


QQ分享110401应用找不到,测试环境没有审核要在用户信息加测试的qq号;

QQ分享报错110404,请求参数缺少appid;

QQ登录100044非官方正版应用,keystore签名文件变了;

QQ登录100044 keystore签名文件的MD5信息有误;

QQ登录报错110406,appid审核不通过或者腾讯服务器问题。


















































Rank: 1

主题:
帖子:
积分:
0
发表于 2017-9-26 12:50:35 |
你好 请问qq和qq空间分享成功后为什么会走取消的回调

Rank: 5Rank: 5

主题:
帖子:
积分:
0
 楼主| 发表于 2017-9-26 17:38:04 |
polite1233 发表于 2017-9-26 12:50
你好 请问qq和qq空间分享成功后为什么会走取消的回调

<!--QQ分享回调-->     
<activity
android:name="cn.sharesdk.tencent.qq.ReceiveActivity"
android:launchMode="singleTask"
android:noHistory="true">
<intent-filter>  
<action android:name="android.intent.action.VIEW" />  
<category android:name="android.intent.category.DEFAULT" />   
<category android:name="android.intent.category.BROWSABLE" />   
<data android:scheme="tencent100371282" />
</intent-filter>
</activity>

<data android:scheme="tencent100371282" />这个要配置清单文件中的回调类appid

Rank: 1

主题:
帖子:
积分:
0
发表于 2017-11-4 10:30:54 |
你好,遇到你一个问题,qq分享时,刚打开qq,就到了成功的回调,微信也是一样,请问是什么原因呢

Rank: 5Rank: 5

主题:
帖子:
积分:
0
发表于 2017-11-14 10:31:31 |
李聪奇 发表于 2017-11-4 10:30
你好,遇到你一个问题,qq分享时,刚打开qq,就到了成功的回调,微信也是一样,请问是什么原因呢 ...

请问是Android还是ios的呢?
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

技术支持
免费咨询 | 24小时在线
快速回复 返回顶部 返回列表