Android中使用ShareSDK集成分享功能

引言java

     如今APP開發集成分享功能已是很是廣泛的需求了。其餘集成分享技術我沒有使用過,今天我就來介紹下使用ShareSDK來進行分享功能開發的一些基本步驟和注意點,幫助朋友們避免一些坑。好了,下面切入正題正式開始介紹。android

一、ShareSDK開發包及配置api

     這個不用多說,去他們官網看找SDK開發包和集成文檔便可。Android版本地址:http://www.mob.com/downloadDetail/ShareSDK/android。注意:記得要註冊ShareSDK帳號獲取AppKey哦。這些集成文檔裏面應該都有,仔細看便可。微信

二、去各大應用平臺註冊獲取AppKey和AppSecret微信開發

     這個步驟要看大家團隊想分享到哪些平臺了,通常都是微博和微信。因此通常都去新浪微博和微信開發平臺註冊。app

     新浪開發平臺:http://open.weibo.com/ide

     騰訊開放平臺:https://open.weixin.qq.com/工具

三、一鍵分享功能的集成佈局

     使用ShareSDK進行分享,若是你不須要進行定製開發的話,就可使用ShareSDK裏面自帶的一鍵分享模塊。使用以前別忘記把ShareSDK中的jar包和ShareSDK.xml放到指定位置哦(配置文檔裏面都有,慢慢看便可)。ui

     在application節點下注冊下面的Activity如圖所示:

    

   注意:將紅框部分的數字改爲在騰訊開放平臺申請到的AppId便可。

     若是項目集成了微信,還須要添加如下WXEntryActivity,否則的話,mob後臺沒法作微信的分享統計:(在工程的包下新建wxapi目錄再放置WXEntryActivity)

1 <!-- 微信分享配置 -->
2         <activity
3             android:name=".wxapi.WXEntryActivity"
4             android:configChanges="keyboardHidden|orientation|screenSize"
5             android:exported="true"
6             android:screenOrientation="portrait"
7             android:theme="@android:style/Theme.Translucent.NoTitleBar" />

  WXEntryActivity.java代碼以下:

 1 /*
 2  * 官網地站:http://www.mob.com
 3  * 技術支持QQ: 4006852216
 4  * 官方微信:ShareSDK   (若是發佈新版本的話,咱們將會第一時間經過微信將版本更新內容推送給您。若是使用過程當中有任何問題,也能夠經過微信與咱們取得聯繫,咱們將會在24小時內給予回覆)
 5  *
 6  * Copyright (c) 2013年 mob.com. All rights reserved.
 7  */
 8 
 9 package com.example.haoyunhl.controller.wxapi;
10 
11 import android.content.Intent;
12 import android.widget.Toast;
13 import cn.sharesdk.wechat.utils.WXAppExtendObject;
14 import cn.sharesdk.wechat.utils.WXMediaMessage;
15 import cn.sharesdk.wechat.utils.WechatHandlerActivity;
16 
17 /** 微信客戶端回調activity示例 */
18 public class WXEntryActivity extends WechatHandlerActivity {
19 
20     /**
21      * 處理微信發出的向第三方應用請求app message
22      * <p>
23      * 在微信客戶端中的聊天頁面有「添加工具」,能夠將本應用的圖標添加到其中
24      * 此後點擊圖標,下面的代碼會被執行。Demo僅僅只是打開本身而已,但你可
25      * 作點其餘的事情,包括根本不打開任何頁面
26      */
27     public void onGetMessageFromWXReq(WXMediaMessage msg) {
28         if (msg != null) {
29             Intent iLaunchMyself = getPackageManager().getLaunchIntentForPackage(getPackageName());
30             startActivity(iLaunchMyself);
31         }
32     }
33 
34     /**
35      * 處理微信向第三方應用發起的消息
36      * <p>
37      * 此處用來接收從微信發送過來的消息,比方說本demo在wechatpage裏面分享
38      * 應用時能夠不分享應用文件,而分享一段應用的自定義信息。接受方的微信
39      * 客戶端會經過這個方法,將這個信息發送回接收方手機上的本demo中,看成
40      * 回調。
41      * <p>
42      * 本Demo只是將信息展現出來,但你可作點其餘的事情,而不只僅只是Toast
43      */
44     public void onShowMessageFromWXReq(WXMediaMessage msg) {
45         if (msg != null && msg.mediaObject != null
46                 && (msg.mediaObject instanceof WXAppExtendObject)) {
47             WXAppExtendObject obj = (WXAppExtendObject) msg.mediaObject;
48             Toast.makeText(this, obj.extInfo, Toast.LENGTH_SHORT).show();
49         }
50     }
51 
52 }

     下面你就能夠調用一鍵分享功能進行簡單的分享了,記住在調用以前一點要先調用ShareSDK.initSDK(this)這個方法。

      說明:一鍵分享雖然簡單,可是若是想要對一鍵分享界面進行修改時比較麻煩的,據說如今版本修改界面好像方便不少了?(不清楚,兄弟你能夠去集成文檔瞧瞧)。下面我就來介紹自定義的分享界面。

四、自定義分享界面的開發

      先看效果圖:

     

      下面就來詳細介紹這個分享界面的開發

       界面樣式的佈局相信你們應該都很熟悉了,我這裏就不貼樣式佈局的代碼了。我在開發中將分享功能集成到了一個組件中(ShareDialog)。詳細代碼以下:

  1 package com.mobile.develop.framework.dialog;
  2 
  3 import android.app.Dialog;
  4 import android.content.Context;
  5 import android.content.DialogInterface.*;
  6 import android.view.Display;
  7 import android.view.Gravity;
  8 import android.view.LayoutInflater;
  9 import android.view.View;
 10 import android.view.Window;
 11 import android.view.WindowManager;
 12 import android.widget.LinearLayout;
 13 import android.widget.TextView;
 14 import com.example.haoyunhl.controller.R;
 15 
 16 public class ShareDialog {
 17     private Dialog mDialog;
 18     //取消分享
 19     private TextView txtCancle;
 20     private OnClickListener mOnCancleListener;
 21     //微信分享
 22     private LinearLayout mWeChatShare;
 23     private OnClickListener mOnWeChatShareListener;
 24     //微信朋友圈分享
 25     private LinearLayout mWeChatFriendShare;
 26     private OnClickListener mOnWeChatFriendShareListener;
 27     //QQ分享
 28     private LinearLayout mQQShare;
 29     private OnClickListener mOnQQShareListener;
 30     private Context mContext;
 31     private Display display;
 32 
 33     public ShareDialog(Context context){
 34         mContext=context;
 35         //獲取屏幕對象
 36         WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
 37         display = windowManager.getDefaultDisplay();
 38     }
 39 
 40     //設置微信分享
 41     public ShareDialog setOnWeChatShare(OnClickListener weChatShareListener){
 42         mOnWeChatShareListener=weChatShareListener;
 43         return this;
 44     }
 45 
 46     //設置分享朋友圈
 47     public ShareDialog setOnWeChatFriendShare(OnClickListener weChatFriendShareListener){
 48         mOnWeChatFriendShareListener=weChatFriendShareListener;
 49         return this;
 50     }
 51 
 52     //QQ分享
 53     public ShareDialog setOnQQShare(OnClickListener qqShareListener){
 54         mOnQQShareListener=qqShareListener;
 55         return this;
 56     }
 57 
 58     public ShareDialog setOnCancleListener(OnClickListener cancleListener){
 59         mOnCancleListener=cancleListener;
 60         return this;
 61     }
 62 
 63     public void show(){
 64         mDialog.show();
 65     }
 66 
 67     public void dismiss(){
 68         mDialog.dismiss();
 69     }
 70 
 71     /**
 72      * 建立BaseDialog實例
 73      * @return
 74      */
 75     public ShareDialog builder(){
 76         LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
 77         View view = inflater.inflate(R.layout.share_dialg_style, null);
 78         //設置彈出框橫向鋪滿整個屏幕
 79         view.setMinimumWidth(display.getWidth());
 80         mDialog = new Dialog(mContext, R.style.ActionSheetDialogStyle);
 81         //設置dialog彈出後會點擊屏幕,dialog不消失;點擊物理返回鍵dialog消失
 82         mDialog.setCanceledOnTouchOutside(true);
 83         Window dialogWindow = mDialog.getWindow();
 84         dialogWindow.setGravity(Gravity.CENTER | Gravity.BOTTOM);
 85         WindowManager.LayoutParams lp = dialogWindow.getAttributes();
 86         lp.x = 0;
 87         lp.y = 0;
 88         dialogWindow.setAttributes(lp);
 89         //設置點擊隱藏
 90         txtCancle=(TextView)view.findViewById(R.id.txtCancle);
 91         txtCancle.setOnClickListener(new View.OnClickListener() {
 92             @Override
 93             public void onClick(View v) {
 94                 if (mOnCancleListener != null) {
 95                     mOnCancleListener.onClick(mDialog, Dialog.BUTTON_NEGATIVE);
 96                 }
 97                 dismiss();
 98             }
 99         });
100         //微信分享
101         mWeChatShare=(LinearLayout)view.findViewById(R.id.mWeChatShare);
102         mWeChatShare.setOnClickListener(new View.OnClickListener() {
103             @Override
104             public void onClick(View v) {
105                 if (mOnWeChatShareListener != null) {
106                     mOnWeChatShareListener.onClick(mDialog, Dialog.BUTTON_POSITIVE);
107                 }
108                 dismiss();
109             }
110         });
111         //朋友圈分享
112         mWeChatFriendShare=(LinearLayout)view.findViewById(R.id.mWeChatFriendShare);
113         mWeChatFriendShare.setOnClickListener(new View.OnClickListener() {
114             @Override
115             public void onClick(View v) {
116                 if(mOnWeChatFriendShareListener!=null) {
117                     mOnWeChatFriendShareListener.onClick(mDialog, Dialog.BUTTON_POSITIVE);
118                 }
119                 dismiss();
120             }
121         });
122         //QQ分享
123         mQQShare=(LinearLayout)view.findViewById(R.id.mQQShare);
124         mQQShare.setOnClickListener(new View.OnClickListener() {
125             @Override
126             public void onClick(View v) {
127                 if(mOnQQShareListener!=null){
128                     mOnQQShareListener.onClick(mDialog,Dialog.BUTTON_POSITIVE);
129                 }
130             }
131         });
132         mDialog.setContentView(view);
133         return this;
134     }
135 }

  咱們自定義分享時只須要重寫SharePlatform.java便可。在這個文件中經過不一樣的分支,來執行不一樣的分享邏輯。代碼以下:

  1 package com.example.haoyunhl.utils;
  2 
  3 import android.app.Activity;
  4 import android.content.Context;
  5 import android.os.Handler;
  6 import android.os.Message;
  7 import android.widget.Toast;
  8 import java.util.HashMap;
  9 import cn.sharesdk.framework.Platform;
 10 import cn.sharesdk.framework.PlatformActionListener;
 11 import cn.sharesdk.framework.ShareSDK;
 12 import cn.sharesdk.tencent.qq.QQ;
 13 import cn.sharesdk.wechat.friends.Wechat;
 14 import cn.sharesdk.wechat.moments.WechatMoments;
 15 
 16 public class SharePlatform extends Activity implements PlatformActionListener {
 17 
 18     private Context context;
 19 
 20     public SharePlatform(Context context){
 21         this.context=context;
 22         ShareSDK.initSDK(this.context);
 23     }
 24 
 25     /**
 26      * 分享回調
 27      */
 28     @Override
 29     public void onCancel(Platform arg0, int arg1) {
 30         //回調的地方是子線程,進行UI操做要用handle處理
 31         handler.sendEmptyMessage(4);
 32     }
 33 
 34     @Override
 35     public void onComplete(Platform arg0, int arg1, HashMap<String, Object> arg2) {
 36         //回調的地方是子線程,進行UI操做要用handle處理
 37         if (arg0.getName().equals(Wechat.NAME)) {
 38             handler.sendEmptyMessage(1);
 39         } else if (arg0.getName().equals(WechatMoments.NAME)) {
 40             handler.sendEmptyMessage(2);
 41         } else if (arg0.getName().equals(QQ.NAME)) {
 42             handler.sendEmptyMessage(3);
 43         }
 44     }
 45 
 46     @Override
 47     public void onError(Platform arg0, int arg1, Throwable arg2) {
 48         //回調的地方是子線程,進行UI操做要用handle處理
 49         arg2.printStackTrace();
 50         Message msg = new Message();
 51         msg.what = 5;
 52         msg.obj = arg2.getMessage();
 53         handler.sendMessage(msg);
 54     }
 55 
 56     Handler handler = new Handler() {
 57         @Override
 58         public void handleMessage(Message msg) {
 59             switch (msg.what) {
 60                 case 1:
 61                     Toast.makeText(context, "微信分享成功", Toast.LENGTH_LONG).show();
 62                     break;
 63                 case 2:
 64                     Toast.makeText(context, "朋友圈分享成功", Toast.LENGTH_LONG).show();
 65                     break;
 66                 case 3:
 67                     Toast.makeText(context, "QQ分享成功", Toast.LENGTH_LONG).show();
 68                     break;
 69                 case 4:
 70                     Toast.makeText(context, "取消分享", Toast.LENGTH_LONG).show();
 71                     break;
 72                 case 5:
 73                     Toast.makeText(context, "分享失敗", Toast.LENGTH_LONG).show();
 74                     break;
 75                 default:
 76                     break;
 77             }
 78         }
 79     };
 80 
 81 
 82     /**
 83      * 進行分享
 84      *
 85      * @param shareType
 86      * @param shareTitle
 87      * @param shareText
 88      * @param shareImageUrl
 89      * @param shareUrl
 90      */
 91     public void share(String shareType, String shareTitle, String shareText, String shareImageUrl, String shareUrl) {
 92         Platform.ShareParams sharePlatform = new Platform.ShareParams();
 93         Platform platform;
 94         /**
 95          * 若是是微信朋友圈分享
 96          */
 97         if(shareType.equalsIgnoreCase(ShareConfig.WeChatMomentsShare)){
 98             sharePlatform.setShareType(Platform.SHARE_WEBPAGE);
 99 
100             setSharePlatform(sharePlatform,shareTitle, shareText, shareImageUrl);
101 
102             if(shareUrl!=null && !shareUrl.equalsIgnoreCase("")) {
103                 sharePlatform.setUrl(shareUrl);
104             }
105 
106             platform = ShareSDK.getPlatform(WechatMoments.NAME);
107             platform.setPlatformActionListener(this);
108             platform.share(sharePlatform);
109         }
110         /**
111          * 若是是微信分享
112          */
113         else if(shareType.equalsIgnoreCase(ShareConfig.WeChatShare)){
114             sharePlatform.setShareType(Platform.SHARE_WEBPAGE);
115 
116             setSharePlatform(sharePlatform, shareTitle, shareText, shareImageUrl);
117 
118             if(shareUrl!=null && !shareUrl.equalsIgnoreCase("")) {
119                 sharePlatform.setUrl(shareUrl);
120             }
121             platform = ShareSDK.getPlatform(Wechat.NAME);
122             platform.setPlatformActionListener(this);
123             platform.share(sharePlatform);
124         }
125         /**
126          * 若是是QQ分享
127          */
128         else {
129             setSharePlatform(sharePlatform, shareTitle, shareText, shareImageUrl);
130 
131             if(shareUrl!=null && !shareUrl.equalsIgnoreCase("")) {
132                 sharePlatform.setTitleUrl(shareUrl);
133             }
134 
135             platform = ShareSDK.getPlatform(QQ.NAME);
136             platform.setPlatformActionListener(this);
137             platform.share(sharePlatform);
138         }
139     }
140 
141 
142     private void setSharePlatform(Platform.ShareParams sharePlatform,String shareTitle, String shareText, String shareImageUrl){
143         sharePlatform.setTitle(shareTitle);
144         if(shareText!=null && !shareText.equalsIgnoreCase("")) {
145             sharePlatform.setText(shareText);
146         }
147         if(shareImageUrl!=null && !shareImageUrl.equalsIgnoreCase("")) {
148             sharePlatform.setImageUrl(shareImageUrl);
149             sharePlatform.setImagePath(shareImageUrl);
150         }
151     }
152 }

  咱們在導航欄中只須要如此調用便可實現分享功能:

 

相關文章
相關標籤/搜索