Android教程網
  1. 首頁
  2. Android 技術
  3. Android 手機
  4. Android 系統教程
  5. Android 游戲
 Android教程網 >> Android技術 >> 關於Android編程 >> ShareSDK集成

ShareSDK集成

編輯:關於Android編程

第一步:下載SDK:

1下載地址:http://www.mob.com/
\ 根據需求選擇需要的平台:

第二步:申請ShareSDK的AppKey

把鼠標移到頭像上,點擊進入後台:
\ 點擊ShareSDK:
把鼠標移到應用<喎?/kf/ware/vc/" target="_blank" class="keylink">vc3Ryb25nPsnPo6y147v3PHN0cm9uZz7M7bzT06bTwzwvc3Ryb25nPjo8YnIgLz4NCjxpbWcgYWx0PQ=="" src="/uploadfile/Collfiles/20160907/20160907094401232.png" title="\" /> 根據自己的需求填寫:
這樣就得到了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.添加權限:
下面清單文件的配置是全部的,沒有的平台就是不需要配置。

 
 
 
 
 
 
 
 
 
 
 
2.添加activity信息
**注意:**tencent後面的appid要保持和自己配置的QQ的appid一致。


     

         
         
         
         
     

    
    
        
        
    
 
3.如果集成了微信,易信,支付寶還需要添加下面回調的activity處理.
注意:這些avtivity的name。

 


 

 

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)



    

2.item的布局文件(dialog_share_item.xml)



    

    

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> 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>();
        // 獲取數據
        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> getData(int[] share) {
        data_list.clear();
        int num;
        for (int i = 0; i < share.length; i++) {
            Map map = new HashMap();
            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 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(消息點擊後打開的頁面)

  1. 上一頁:
  2. 下一頁:
熱門文章
閱讀排行版
Copyright © Android教程網 All Rights Reserved