ShareSDK集成
来源:互联网 发布:如何申请农村淘宝 编辑:程序博客网 时间:2024/05/22 09:00
第一步:下载SDK:
- 1下载地址:http://www.mob.com/#/downloadDetail/ShareSDK/android
- 根据需求选择需要的平台:
第二步:申请ShareSDK的AppKey
- 把鼠标移到头像上,点击进入后台:
- 点击ShareSDK:
- 把鼠标移到应用上,点击添加应用:
- 根据自己的需求填写:
- 这样就得到了ShareSDK的AppKey:
第三步:快速集成
进入ShareSDK解压目录,打开“Share SDK for Android”目录,可以找到“QuickIntegrater.jar”,这个就是快速集成ShareSDK的工具。
Windows下:
首先确定您已经安装了JDK,并且正确配置了JAVA_HOME和PATH系统变量,此时您可以双击QuickIntegrater启动程序。
然后复制此文件夹中所有文件到自己的项目中覆盖。
Linux/Mac OS下:
同样需要先确保已经正确配置了JDK,之后启动终端,cd进入“Share SDK for Android”目录,输入: java -jar QuickIntegrater.jar 可启动QuickIntegrater
第四步:配置AndroidManifest.xml
- 1.添加权限:
下面清单文件的配置是全部的,没有的平台就是不需要配置。
<uses-permission android:name="android.permission.GET_TASKS" /> <uses-permission android:name="android.permission.INTERNET" /> <uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> <uses-permission android:name="android.permission.CHANGE_WIFI_STATE" /> <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" /> <uses-permission android:name="android.permission.READ_PHONE_STATE" /> <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/> <uses-permission android:name="android.permission.GET_ACCOUNTS"/> <!-- 蓝牙分享所需的权限 --> <uses-permission android:name="android.permission.BLUETOOTH" /> <uses-permission android:name="android.permission.BLUETOOTH_ADMIN" />
- 2.添加activity信息
**注意:**tencent后面的appid要保持和自己配置的QQ的appid一致。
<activity android:name="com.mob.tools.MobUIShell" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="keyboardHidden|orientation|screenSize" android:screenOrientation="portrait" android:windowSoftInputMode="stateHidden|adjustResize" > <intent-filter> <data android:scheme="tencent100371282" /> <action android:name="android.intent.action.VIEW" /> <category android:name="android.intent.category.BROWSABLE" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> <!-- 调用新浪原生SDK,需要注册的回调activity --> <intent-filter> <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" /> <category android:name="android.intent.category.DEFAULT" /> </intent-filter> </activity>
- 3.如果集成了微信,易信,支付宝还需要添加下面回调的activity处理.
注意:这些avtivity的name。
<!-- 微信分享回调 --><activity android:name=".wxapi.WXEntryActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" /> <!--易信分享回调 --> <activity android:name=".yxapi.YXEntryActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true" android:screenOrientation="portrait" /> <!-- 支付宝分享回调 --><activity android:name=".apshare.ShareEntryActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar" android:configChanges="keyboardHidden|orientation|screenSize" android:exported="true"/>
4.替换mob后台申请的Appkey与各个平台申请的key。
5.添加一键分享代码
private void showShare() { ShareSDK.initSDK(this); 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("我是分享文本"); //分享网络图片,新浪微博分享网络图片需要通过审核后申请高级写入接口,否则请注释掉测试新浪微博 oks.setImageUrl("http://f1.sharesdk.cn/imgs/2014/02/26/owWpLZo_638x960.jpg"); // 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); }
自定义UI,实现不同平台分享内容差异化
功能说明:点击分享,弹出自定义对话框;根据传入的参数,选择要调起的平台,不同平台分享不同内容。
- 1.dialog的布局(dialog_share.xml)
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:background="#ffffff" > <GridView android:id="@+id/dialog_share_gridview" android:layout_width="match_parent" android:layout_height="wrap_content" android:layout_margin="10dp" android:numColumns="auto_fit" android:horizontalSpacing="1dp" android:verticalSpacing="1dp" android:background="#00000000"></GridView></RelativeLayout>
- 2.item的布局文件(dialog_share_item.xml)
<?xml version="1.0" encoding="utf-8"?><LinearLayout xmlns:android="http://schemas.android.com/apk/res/android" android:layout_width="match_parent" android:layout_height="match_parent" android:gravity="center" android:orientation="vertical" android:padding="10dp" > <ImageView android:id="@+id/image" android:layout_width="wrap_content" android:layout_height="wrap_content" android:src="@drawable/ic_launcher" /> <TextView android:id="@+id/text" android:layout_width="wrap_content" android:layout_height="wrap_content" android:layout_marginTop="5dp" android:text="文字" android:textColor="#000000" /></LinearLayout>
- 3.shareUtils代码(ShareUtils.java)
import java.util.ArrayList;import java.util.HashMap;import java.util.List;import java.util.Map;import com.chinalife.gstc.R;import com.chinalife.gstc.common.data.Const;import com.mob.tools.utils.UIHandler;import android.app.Dialog;import android.content.Context;import android.os.Handler.Callback;import android.os.Message;import android.text.TextUtils;import android.view.View;import android.widget.AdapterView;import android.widget.GridView;import android.widget.SimpleAdapter;import android.widget.Toast;import cn.sharesdk.framework.Platform;import cn.sharesdk.framework.PlatformActionListener;import cn.sharesdk.framework.ShareSDK;import cn.sharesdk.onekeyshare.OnekeyShare;import cn.sharesdk.sina.weibo.SinaWeibo;import cn.sharesdk.system.text.ShortMessage;import cn.sharesdk.tencent.qq.QQ;import cn.sharesdk.tencent.qq.QQ.ShareParams;import cn.sharesdk.tencent.qzone.QZone;import cn.sharesdk.wechat.friends.Wechat;import cn.sharesdk.wechat.moments.WechatMoments;public class ShareUtils { // 图片封装为一个数组 private static int[] icon = { R.drawable.ssdk_oks_classic_qq, R.drawable.ssdk_oks_classic_qzone, R.drawable.ssdk_oks_classic_wechat, R.drawable.ssdk_oks_classic_wechatmoments, R.drawable.ssdk_oks_classic_sinaweibo, R.drawable.ssdk_oks_classic_shortmessage }; private static String[] iconName = { "QQ", "QQ空间", "微信", "微信朋友圈", "新浪微博", "短消息" }; private static int[] platform = { 1, 2, 3, 4, 5, 6 }; private static List<Map<String, Object>> data_list = null; private static SimpleAdapter sim_adapter; private static final int MSG_ACTION_CCALLBACK = 2; private static Context mContext; /** * 自定义分享功能 * * @param context * @param share要调起的平台 * (1-QQ, 2-QQ空间, 3-微信, 4-微信朋友圈, 5-新浪微博, 6-短消息) * @param title标题 * @param text分享的文本 * @param imageUrl分享的图片网址url * @param url可点的连接地址url */ public static void showShare(Context context, int[] share, final String title, final String text, final String imageUrl, final String url) { mContext = context; ShareSDK.initSDK(context); final Dialog dialog = new Dialog(context, R.style.Theme_Transparent); dialog.setContentView(R.layout.dialog_share); dialog.show(); GridView gridView = (GridView) dialog .findViewById(R.id.dialog_share_gridview); // 新建List data_list = new ArrayList<Map<String, Object>>(); // 获取数据 getData(share); // 新建适配器 String[] from = { "image", "text" }; int[] to = { R.id.image, R.id.text }; sim_adapter = new SimpleAdapter(context, data_list, R.layout.dialog_share_item, from, to); // 配置适配器 gridView.setAdapter(sim_adapter); gridView.setOnItemClickListener(new AdapterView.OnItemClickListener() { @Override public void onItemClick(AdapterView<?> parent, View view, int position, long id) { ShareParams shareParams = new ShareParams(); // 标题 if(!TextUtils.isEmpty(title)){ shareParams.setTitle(title); } // 文本 if(!TextUtils.isEmpty(text)){ shareParams.setText(text); } // 分享网络图片 if(!TextUtils.isEmpty(imageUrl)){ shareParams.setImageUrl(imageUrl); } // 可点的连接地址ur if(!TextUtils.isEmpty(url)){ shareParams.setUrl(url); } // 执行图文分享 shareParams.setShareType(Platform.SHARE_WEBPAGE); if ("QQ".equals(data_list.get(position).get("text"))) { Platform platQQ = ShareSDK.getPlatform(QQ.NAME); platQQ.setPlatformActionListener(listener); platQQ.share(shareParams); } else if ("QQ空间".equals(data_list.get(position).get("text"))) { Platform platQZone = ShareSDK.getPlatform(QZone.NAME); platQZone.setPlatformActionListener(listener); platQZone.share(shareParams); } else if ("微信".equals(data_list.get(position).get("text"))) { Platform platWechat = ShareSDK.getPlatform(Wechat.NAME); platWechat.setPlatformActionListener(listener); platWechat.share(shareParams); } else if ("微信朋友圈".equals(data_list.get(position).get("text"))) { Platform platWechatMoments = ShareSDK .getPlatform(WechatMoments.NAME); platWechatMoments.setPlatformActionListener(listener); platWechatMoments.share(shareParams); } else if ("新浪微博".equals(data_list.get(position).get("text"))) { Platform platSinaWeibo = ShareSDK .getPlatform(SinaWeibo.NAME); platSinaWeibo.setPlatformActionListener(listener); platSinaWeibo.share(shareParams); } else if ("短消息".equals(data_list.get(position).get("text"))) { shareParams.setShareType(Platform.SHARE_TEXT); Platform platShortMessage = ShareSDK .getPlatform(ShortMessage.NAME); platShortMessage.share(shareParams); } dialog.dismiss(); } }); } /** * * @param platform要分享的平台 */ private static List<Map<String, Object>> getData(int[] share) { data_list.clear(); int num; for (int i = 0; i < share.length; i++) { Map<String, Object> map = new HashMap<String, Object>(); if (share[i] == 0) { break; } num = share[i] - 1; map.put("image", icon[num]); map.put("text", iconName[num]); map.put("platform", platform[num]); data_list.add(map); } return data_list; } static PlatformActionListener listener = new PlatformActionListener() { @Override public void onError(Platform platform, int action, Throwable t) { // 失敗 // 打印错误信息,print the error msg t.printStackTrace(); // 错误监听,handle the error msg Message msg = new Message(); msg.what = MSG_ACTION_CCALLBACK; msg.arg1 = 2; msg.arg2 = action; msg.obj = t; UIHandler.sendMessage(msg,mCallback); } @Override public void onComplete(Platform platform, int action, HashMap<String, Object> arg2) { // 成功 Message msg = new Message(); msg.what = MSG_ACTION_CCALLBACK; msg.arg1 = 1; msg.arg2 = action;//这个是代表操作的类型,9代表是分享8代表操作是获取用户资料 msg.obj = platform;//这个参数就是进行操作的平台对象啦 UIHandler.sendMessage(msg,mCallback); } @Override public void onCancel(Platform platform, int action) { // 取消 Message msg = new Message(); msg.what = MSG_ACTION_CCALLBACK; msg.arg1 = 3; msg.arg2 = action; msg.obj = platform; UIHandler.sendMessage(msg,mCallback); } }; static Callback mCallback = new Callback() { @Override public boolean handleMessage(Message msg) { switch (msg.arg1) { // 成功 case 1: Toast.makeText(mContext, "分享成功", 10000).show(); break; // 失败 case 2: Toast.makeText(mContext, "分享失败", 10000).show(); break; // 取消 case 3: //Toast.makeText(mContext, "分享取消", 10000).show(); break; } return false; } };}
注意:
- 1.传入的参数根据需求自行增减,shareParams不同平台的差异化参数设置写在if判断里,就实现不同平台分享内容差异化。
- 2.微信平台必须设置shareParams.setShareType(*);
不同平台分享参数说明
注意:
- 1.没有标明可选的就是必填参数,不能为null或者空字符串。
- 2.imageUrl、imagePath、imageData为三选一。
新浪微博
新浪微博支持分享文字、本地图片、网络图片和经纬度信息。
新浪微博使用客户端分享不会正确回调
参数说明:
text:小于2000字
image:图片最大5M,仅支持JPEG、GIF、PNG格式
latitude:有效范围:-90.0到+90.0,+表示北纬
longitude:有效范围:-180.0到+180.0,+表示东经
注:微博分享链接是将链接写到setText内:eg:setText(“分享文本 http://mob.com”);
分享文本:
- text
分享图文:
- text imagePath
- text imageUrl
注:如果imagePath和imageUrl同时存在,imageUrl将被忽略。
腾讯微博
腾讯微博支持分享文字、本地图片、网络图片和经纬度信息。
参数说明:
text:最多140个字字符
image:图片最大4M
分享文本:
- text latitude(可选) longitude(可选)
分享图文:
- text imagePath latitude(可选) longitude(可选)
- text imageUrl latitude(可选) longitude(可选)
- text ImageArray latitude(可选) longitude(可选)
2.5.0以后的版本新增分享多张图片的功能ImageArray。 由于腾讯微博分享网络图片并不属于高级接口,因此imageUrl优先级高于imagePath,这就是说,如果imagePath和imageUrl同时存在,imagePath将被忽略。
QQ空间
QQ空间支持分享文字和图文。
参数说明:
title:最多200个字符
text:最多600个字符
分享文本:
- title titleUrl text site siteUrl
发表说说:
- text imagePath site siteUrl
- text imageUrl site siteUrl
分享图文:
- title titleUrl text imagePath site siteUrl
- title titleUrl text imageUrl site siteUrl
QQ空间分享时一定要携带title、titleUrl、site、siteUrl,QQ空间本身不支持分享本地图片,因此如果想分享本地图片,图片会先上传到ShareSDK的文件服务器,得到连接以后才分享此链接。由于本地图片更耗流量,因此imageUrl优先级高于imagePath。 site是分享此内容的网站名称,仅在QQ空间使用;siteUrl是分享此内容的网站地址,仅在QQ空间使用;
微信(好友、朋友圈、收藏)
绕过审核只对微信好友、微信朋友圈有效。
微信分享如果是绕过审核(配置信息BypassApproval属性设置为true为绕过审核),微信朋友圈可以分享单张图片或者图片与文字一起分享,微信好友可以进行文字或者单张图片或者文件进行分享,分享回调不会正确回调。
不绕过审核,微信三个平台中,好友的功能最完整,朋友圈不能分享表情、文件和应用,收藏不能分享表情和应用。表格下以好友为例子:
参数说明:
title:512Bytes以内
text:1KB以内
imageData:10M以内
imagePath:10M以内(传递的imagePath路径不能超过10KB)
imageUrl:10KB以内
musicUrl:10KB以内
url:10KB以内
分享文本:
- shareType(Platform.SHARE_TEXT) title text
分享图片:
- shareType(Platform.SHARE_IMAGE) title text(设置了不会显示,可选参数) imagePath
- shareType(Platform.SHARE_IMAGE) title text(设置了不会显示,可选参数) imageUrl
- shareType(Platform.SHARE_IMAGE) title text(设置了不会显示,可选参数) imageData
分享音乐:
- shareType(Platform.SHARE_MUSIC) title text(朋友圈不显示此字段) imagePath musicUrl url(消息点击后打开的页面)
- shareType(Platform.SHARE_MUSIC) title text(朋友圈不显示此字段) imageUrl musicUrl url(消息点击后打开的页面)
- shareType(Platform.SHARE_MUSIC) title text(朋友圈不显示此字段) imageData musicUrl url(消息点击后打开的页面)
分享视频:
- shareType(Platform.SHARE_VIDEO) title text(朋友圈不显示此字段) imagePath url(视频网页地址)
- shareType(Platform.SHARE_VIDEO) title text(朋友圈不显示此字段) imageUrl url(视频网页地址
- shareType(Platform.SHARE_VIDEO) title text(朋友圈不显示此字段) imageData url(视频网页地址
分享网页:
- shareType(Platform.SHARE_WEBPAGE) title text(朋友圈不显示此字段) imagePath url
-shareType(Platform.SHARE_WEBPAGE) title text(朋友圈不显示此字段) imageUrl url
-shareType(Platform.SHARE_WEBPAGE) title text(朋友圈不显示此字段) imageData url
分享应用:
- shareType(Platform.SHARE_APPS) title text(朋友圈不显示此字段) imagePath filePath(apk文件) extInfo(应用信息脚本)
- shareType(Platform.SHARE_APPS) title text(朋友圈不显示此字段) imageUrl filePath(apk文件) extInfo(应用信息脚本)
- shareType(Platform.SHARE_APPS) title text(朋友圈不显示此字段) imageData filePath(apk文件) extInfo(应用信息脚本)
分享文件:
- shareType(Platform.SHARE_FILE) title text(朋友圈不显示此字段) imagePath filePath
- shareType(Platform.SHARE_FILE) title text(朋友圈不显示此字段) imageUrl filePath
- shareType(Platform.SHARE_FILE) title text(朋友圈不显示此字段) imageData filePath
分享表情:
- shareType(Platform.SHARE_EMOJI) title text(朋友圈不显示此字段) imagePath
- shareType(Platform.SHARE_EMOJI) title text(朋友圈不显示此字段) imageUrl
- shareType(Platform.SHARE_EMOJI) title text(朋友圈不显示此字段) imageData
微信并无实际的分享网络图片和分享bitmap的功能,如果设置了网络图片,此图片会先下载会本地,之后再当作本地图片分享,因此延迟较大。bitmap则好一些,但是由于bitmap并不知道图片的格式,因此都会被当作png编码,再提交微信客户端。此外,SHARE_EMOJI支持gif文件,但是如果使用imageData,则默认只是提交一个png图片,因为bitmap是静态图片。
QQ分享
QQ分享支持图文和音乐分享。
参数说明:
title:最多30个字符
text:最多40个字符
分享图片:
- ImageUrl
- imagePath
分享链接:
- title titleUrl text imagePath
- title titleUrl text imageUrl
分享音频:
- title titleUrl text imagePath musicUrl
- title titleUrl text imageUrl musicUrl
QQ分享图文和音乐,在PC版本的QQ上可能只看到一条连接,因为PC版本的QQ只会对其白名单的连接作截图,如果不在此名单中,则只是显示连接而已. 如果只分享图片在PC端看不到图片的,只会显示null,在手机端会显示图片和null字段。
信息
信息分短信和彩信,如果设置了标题或者图片,会直接当作彩信发送。发送信息的时候使用手机的信息软件
分享文本:
- address title text
分享图文:
- address title text imagePath imageUrl
支付宝
分享文本:
- shareType(SHARE_TEXT) title text
分享图片:
- shareType(SHARE_IMAGE) title text imagePath
- shareType(SHARE_IMAGE) title text imageUrl
- shareType(SHARE_IMAGE) title text imageData
分享网页:
- shareType(SHARE_WEBPAGE) title text imagePath url(消息点击后打开的页面)
- shareType(SHARE_WEBPAGE) title text imageUrl url(消息点击后打开的页面)
- shareType(SHARE_WEBPAGE) title text imageData url(消息点击后打开的页面)
- shareSDK集成
- shareSdk 集成
- ShareSDK集成
- 集成ShareSDK
- ios shareSDK集成
- Unity3D如何集成ShareSDK
- ShareSDK快速集成
- ShareSDK集成登陆功能
- ShareSDK的快速集成
- shareSDK 快速集成
- Swift 集成shareSDK
- android中集成ShareSDK
- iOS 分享 sharesdk集成
- quick-cocos 集成ShareSDK
- Mob ShareSDK集成
- 集成ShareSDK遇到问题
- ShareSDK集成分享
- android 分享sharesdk集成
- 数据结构-字符串
- Menu菜单
- 【python】python之-----paramiko
- DC-电路的设计目标和约束
- ArcGIS 10.4.1 发布Scene Layer 步骤
- ShareSDK集成
- ORA-01555
- Windows 上安装Rabbit MQ
- 设计模式之建造者模式(Builder)
- shell编程——if语句 if -z -n -f -eq -ne -lt
- 莫比乌斯反演及其应用-小结
- LIST 放List 订单、购物车数据整理
- 数据结构-树
- Spring IOC