zoukankan      html  css  js  c++  java
  • 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 }

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

     

  • 相关阅读:
    leetcode 309. Best Time to Buy and Sell Stock with Cooldown
    leetcode 714. Best Time to Buy and Sell Stock with Transaction Fee
    leetcode 32. Longest Valid Parentheses
    leetcode 224. Basic Calculator
    leetcode 540. Single Element in a Sorted Array
    leetcode 109. Convert Sorted List to Binary Search Tree
    leetcode 3. Longest Substring Without Repeating Characters
    leetcode 84. Largest Rectangle in Histogram
    leetcode 338. Counting Bits
    git教程之回到过去,版本对比
  • 原文地址:https://www.cnblogs.com/dreamGong/p/6164879.html
Copyright © 2011-2022 走看看