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(消息点击后打开的页面)

0 0
原创粉丝点击