ShareSDK集成

第一步:下载SDK:


第二步:申请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
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值