Android中使用ShareSDK集成分享功能

引言

     现在APP开发集成分享功能已经是非常普遍的需求了。其他集成分享技术我没有使用过,今天我就来介绍下使用ShareSDK来进行分享功能开发的一些基本步骤和注意点,帮助朋友们避免一些坑。好了,下面切入正题正式开始介绍。

1、ShareSDK开发包及配置

     这个不用多说,去他们官网看找SDK开发包和集成文档即可。Android版本地址:http://www.mob.com/downloadDetail/ShareSDK/android。注意:记得要注册ShareSDK账号获取AppKey哦。这些集成文档里面应该都有,仔细看即可。

2、去各大应用平台注册获取AppKey和AppSecret

     这个步骤要看你们团队想分享到哪些平台了,一般都是微博和微信。所以一般都去新浪微博和微信开发平台注册。

     新浪开发平台:http://open.weibo.com/

     腾讯开放平台:https://open.weixin.qq.com/

3、一键分享功能的集成

     使用ShareSDK进行分享,如果你不需要进行定制开发的话,就可以使用ShareSDK里面自带的一键分享模块。使用之前别忘记把ShareSDK中的jar包和ShareSDK.xml放到指定位置哦(配置文档里面都有,慢慢看即可)。

     在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)这个方法。

      说明:一键分享虽然简单,但是如果想要对一键分享界面进行修改时比较麻烦的,听说现在版本修改界面好像方便很多了?(不清楚,兄弟你可以去集成文档瞧瞧)。下面我就来介绍自定义的分享界面。

4、自定义分享界面的开发

      先看效果图:

     

      下面就来详细介绍这个分享界面的开发

       界面样式的布局相信大家应该都很熟悉了,我这里就不贴样式布局的代码了。我在开发中将分享功能集成到了一个组件中(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 }

  我们在导航栏中只需要如此调用即可实现分享功能:

 

posted @ 2016-12-12 16:00  dreamGong  阅读(6128)  评论(0编辑  收藏  举报