引言

     现在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)

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

  WXEntryActivity.java代码如下:

 /*
* 官网地站:http://www.mob.com
* 技术支持QQ: 4006852216
* 官方微信:ShareSDK (如果发布新版本的话,我们将会第一时间通过微信将版本更新内容推送给您。如果使用过程中有任何问题,也可以通过微信与我们取得联系,我们将会在24小时内给予回复)
*
* Copyright (c) 2013年 mob.com. All rights reserved.
*/ package com.example.haoyunhl.controller.wxapi; import android.content.Intent;
import android.widget.Toast;
import cn.sharesdk.wechat.utils.WXAppExtendObject;
import cn.sharesdk.wechat.utils.WXMediaMessage;
import cn.sharesdk.wechat.utils.WechatHandlerActivity; /** 微信客户端回调activity示例 */
public class WXEntryActivity extends WechatHandlerActivity { /**
* 处理微信发出的向第三方应用请求app message
* <p>
* 在微信客户端中的聊天页面有“添加工具”,可以将本应用的图标添加到其中
* 此后点击图标,下面的代码会被执行。Demo仅仅只是打开自己而已,但你可
* 做点其他的事情,包括根本不打开任何页面
*/
public void onGetMessageFromWXReq(WXMediaMessage msg) {
if (msg != null) {
Intent iLaunchMyself = getPackageManager().getLaunchIntentForPackage(getPackageName());
startActivity(iLaunchMyself);
}
} /**
* 处理微信向第三方应用发起的消息
* <p>
* 此处用来接收从微信发送过来的消息,比方说本demo在wechatpage里面分享
* 应用时可以不分享应用文件,而分享一段应用的自定义信息。接受方的微信
* 客户端会通过这个方法,将这个信息发送回接收方手机上的本demo中,当作
* 回调。
* <p>
* 本Demo只是将信息展示出来,但你可做点其他的事情,而不仅仅只是Toast
*/
public void onShowMessageFromWXReq(WXMediaMessage msg) {
if (msg != null && msg.mediaObject != null
&& (msg.mediaObject instanceof WXAppExtendObject)) {
WXAppExtendObject obj = (WXAppExtendObject) msg.mediaObject;
Toast.makeText(this, obj.extInfo, Toast.LENGTH_SHORT).show();
}
} }

下面你就可以调用一键分享功能进行简单的分享了,记住在调用之前一点要先调用ShareSDK.initSDK(this)这个方法。

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

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

先看效果图:

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

界面样式的布局相信大家应该都很熟悉了,我这里就不贴样式布局的代码了。我在开发中将分享功能集成到了一个组件中(ShareDialog)。详细代码如下:

 package com.mobile.develop.framework.dialog;

 import android.app.Dialog;
import android.content.Context;
import android.content.DialogInterface.*;
import android.view.Display;
import android.view.Gravity;
import android.view.LayoutInflater;
import android.view.View;
import android.view.Window;
import android.view.WindowManager;
import android.widget.LinearLayout;
import android.widget.TextView;
import com.example.haoyunhl.controller.R; public class ShareDialog {
private Dialog mDialog;
//取消分享
private TextView txtCancle;
private OnClickListener mOnCancleListener;
//微信分享
private LinearLayout mWeChatShare;
private OnClickListener mOnWeChatShareListener;
//微信朋友圈分享
private LinearLayout mWeChatFriendShare;
private OnClickListener mOnWeChatFriendShareListener;
//QQ分享
private LinearLayout mQQShare;
private OnClickListener mOnQQShareListener;
private Context mContext;
private Display display; public ShareDialog(Context context){
mContext=context;
//获取屏幕对象
WindowManager windowManager = (WindowManager) context.getSystemService(Context.WINDOW_SERVICE);
display = windowManager.getDefaultDisplay();
} //设置微信分享
public ShareDialog setOnWeChatShare(OnClickListener weChatShareListener){
mOnWeChatShareListener=weChatShareListener;
return this;
} //设置分享朋友圈
public ShareDialog setOnWeChatFriendShare(OnClickListener weChatFriendShareListener){
mOnWeChatFriendShareListener=weChatFriendShareListener;
return this;
} //QQ分享
public ShareDialog setOnQQShare(OnClickListener qqShareListener){
mOnQQShareListener=qqShareListener;
return this;
} public ShareDialog setOnCancleListener(OnClickListener cancleListener){
mOnCancleListener=cancleListener;
return this;
} public void show(){
mDialog.show();
} public void dismiss(){
mDialog.dismiss();
} /**
* 创建BaseDialog实例
* @return
*/
public ShareDialog builder(){
LayoutInflater inflater = (LayoutInflater) mContext.getSystemService(Context.LAYOUT_INFLATER_SERVICE);
View view = inflater.inflate(R.layout.share_dialg_style, null);
//设置弹出框横向铺满整个屏幕
view.setMinimumWidth(display.getWidth());
mDialog = new Dialog(mContext, R.style.ActionSheetDialogStyle);
//设置dialog弹出后会点击屏幕,dialog不消失;点击物理返回键dialog消失
mDialog.setCanceledOnTouchOutside(true);
Window dialogWindow = mDialog.getWindow();
dialogWindow.setGravity(Gravity.CENTER | Gravity.BOTTOM);
WindowManager.LayoutParams lp = dialogWindow.getAttributes();
lp.x = 0;
lp.y = 0;
dialogWindow.setAttributes(lp);
//设置点击隐藏
txtCancle=(TextView)view.findViewById(R.id.txtCancle);
txtCancle.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mOnCancleListener != null) {
mOnCancleListener.onClick(mDialog, Dialog.BUTTON_NEGATIVE);
}
dismiss();
}
});
//微信分享
mWeChatShare=(LinearLayout)view.findViewById(R.id.mWeChatShare);
mWeChatShare.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if (mOnWeChatShareListener != null) {
mOnWeChatShareListener.onClick(mDialog, Dialog.BUTTON_POSITIVE);
}
dismiss();
}
});
//朋友圈分享
mWeChatFriendShare=(LinearLayout)view.findViewById(R.id.mWeChatFriendShare);
mWeChatFriendShare.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mOnWeChatFriendShareListener!=null) {
mOnWeChatFriendShareListener.onClick(mDialog, Dialog.BUTTON_POSITIVE);
}
dismiss();
}
});
//QQ分享
mQQShare=(LinearLayout)view.findViewById(R.id.mQQShare);
mQQShare.setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View v) {
if(mOnQQShareListener!=null){
mOnQQShareListener.onClick(mDialog,Dialog.BUTTON_POSITIVE);
}
}
});
mDialog.setContentView(view);
return this;
}
}

  我们自定义分享时只需要重写SharePlatform.java即可。在这个文件中通过不同的分支,来执行不同的分享逻辑。代码如下:

 package com.example.haoyunhl.utils;

 import android.app.Activity;
import android.content.Context;
import android.os.Handler;
import android.os.Message;
import android.widget.Toast;
import java.util.HashMap;
import cn.sharesdk.framework.Platform;
import cn.sharesdk.framework.PlatformActionListener;
import cn.sharesdk.framework.ShareSDK;
import cn.sharesdk.tencent.qq.QQ;
import cn.sharesdk.wechat.friends.Wechat;
import cn.sharesdk.wechat.moments.WechatMoments; public class SharePlatform extends Activity implements PlatformActionListener { private Context context; public SharePlatform(Context context){
this.context=context;
ShareSDK.initSDK(this.context);
} /**
* 分享回调
*/
@Override
public void onCancel(Platform arg0, int arg1) {
//回调的地方是子线程,进行UI操作要用handle处理
handler.sendEmptyMessage(4);
} @Override
public void onComplete(Platform arg0, int arg1, HashMap<String, Object> arg2) {
//回调的地方是子线程,进行UI操作要用handle处理
if (arg0.getName().equals(Wechat.NAME)) {
handler.sendEmptyMessage(1);
} else if (arg0.getName().equals(WechatMoments.NAME)) {
handler.sendEmptyMessage(2);
} else if (arg0.getName().equals(QQ.NAME)) {
handler.sendEmptyMessage(3);
}
} @Override
public void onError(Platform arg0, int arg1, Throwable arg2) {
//回调的地方是子线程,进行UI操作要用handle处理
arg2.printStackTrace();
Message msg = new Message();
msg.what = 5;
msg.obj = arg2.getMessage();
handler.sendMessage(msg);
} Handler handler = new Handler() {
@Override
public void handleMessage(Message msg) {
switch (msg.what) {
case 1:
Toast.makeText(context, "微信分享成功", Toast.LENGTH_LONG).show();
break;
case 2:
Toast.makeText(context, "朋友圈分享成功", Toast.LENGTH_LONG).show();
break;
case 3:
Toast.makeText(context, "QQ分享成功", Toast.LENGTH_LONG).show();
break;
case 4:
Toast.makeText(context, "取消分享", Toast.LENGTH_LONG).show();
break;
case 5:
Toast.makeText(context, "分享失败", Toast.LENGTH_LONG).show();
break;
default:
break;
}
}
}; /**
* 进行分享
*
* @param shareType
* @param shareTitle
* @param shareText
* @param shareImageUrl
* @param shareUrl
*/
public void share(String shareType, String shareTitle, String shareText, String shareImageUrl, String shareUrl) {
Platform.ShareParams sharePlatform = new Platform.ShareParams();
Platform platform;
/**
* 如果是微信朋友圈分享
*/
if(shareType.equalsIgnoreCase(ShareConfig.WeChatMomentsShare)){
sharePlatform.setShareType(Platform.SHARE_WEBPAGE); setSharePlatform(sharePlatform,shareTitle, shareText, shareImageUrl); if(shareUrl!=null && !shareUrl.equalsIgnoreCase("")) {
sharePlatform.setUrl(shareUrl);
} platform = ShareSDK.getPlatform(WechatMoments.NAME);
platform.setPlatformActionListener(this);
platform.share(sharePlatform);
}
/**
* 如果是微信分享
*/
else if(shareType.equalsIgnoreCase(ShareConfig.WeChatShare)){
sharePlatform.setShareType(Platform.SHARE_WEBPAGE); setSharePlatform(sharePlatform, shareTitle, shareText, shareImageUrl); if(shareUrl!=null && !shareUrl.equalsIgnoreCase("")) {
sharePlatform.setUrl(shareUrl);
}
platform = ShareSDK.getPlatform(Wechat.NAME);
platform.setPlatformActionListener(this);
platform.share(sharePlatform);
}
/**
* 如果是QQ分享
*/
else {
setSharePlatform(sharePlatform, shareTitle, shareText, shareImageUrl); if(shareUrl!=null && !shareUrl.equalsIgnoreCase("")) {
sharePlatform.setTitleUrl(shareUrl);
} platform = ShareSDK.getPlatform(QQ.NAME);
platform.setPlatformActionListener(this);
platform.share(sharePlatform);
}
} private void setSharePlatform(Platform.ShareParams sharePlatform,String shareTitle, String shareText, String shareImageUrl){
sharePlatform.setTitle(shareTitle);
if(shareText!=null && !shareText.equalsIgnoreCase("")) {
sharePlatform.setText(shareText);
}
if(shareImageUrl!=null && !shareImageUrl.equalsIgnoreCase("")) {
sharePlatform.setImageUrl(shareImageUrl);
sharePlatform.setImagePath(shareImageUrl);
}
}
}

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

Android中使用ShareSDK集成分享功能的更多相关文章

  1. Android中使用ShareSDK实现分享

    1,在http://www.mob.com官网上去创建一个后台应用(如果没有账号的同学要去先注册一下),主要后去的是你新创建的应用的appKey值 2,这里我们分享新浪微博为例,在新浪微博的sdk中创 ...

  2. React Native 轻松集成分享功能(Android 篇)

    关于推送的集成请参考这篇文章,关于统计的集成请参考这篇文章,本篇文章将引导你集成分享功能. 在集成插件之前,需要在各大开放平台上成功注册应用,并通过审核(支持 3 个可选的主流平台).支持的平台如下: ...

  3. 利用 Android 系统原生 API 实现分享功能

    利用 Android 系统原生 API 实现分享功能 这篇文章提供一个封装好的 Share2 库供大家参考. GitHub 项目地址:Share2 大家知道,要调用 Android 系统内建的分享功能 ...

  4. React Native 轻松集成分享功能(iOS 篇)

    产品一直催我在 RN 项目中添加分享功能,一直没找到合适的库,今天让我看到了一个插件分享给大家. 在集成插件之前,需要在各大开放平台上成功注册应用,并通过审核(支持 3 个可选的主流平台).支持的平台 ...

  5. android中实现简单的聊天功能

    这个例子只是简单的实现了单机版的聊天功能,自己跟自己聊,啦啦~~ 主要还是展示RecyclerView控件的使用吧~ 参考我之前写的文章: android中RecyclerView控件的使用 andr ...

  6. Android 使用系统自带分享功能

    way1: Intent intent = new Intent(Intent.ACTION_SEND); intent.setType("text/plain");// setT ...

  7. Android中禁止SlidingPaneLayout的侧滑功能

    Android中使用android.support.v4.widget.SlidingPaneLayout实现侧滑功能的时候,可能出现滑动屏幕时与SlidingPaneLayout的侧滑发生冲突,查看 ...

  8. 039 Android ShareSDK实现分享功能

    1.参考文献: https://blog.csdn.net/augfun/article/details/86551294 http://wiki.mob.com/sdk-share-android- ...

  9. ionic使用cordova插件中的Screenshot截图分享功能

    需要实现操作,考试完成后需要将成绩生成一张图片,分享出去, import { Screenshot } from '@ionic-native/screenshot'; constructor(pri ...

随机推荐

  1. MySQL 5.7.10 自动备份、自动清理旧备份集

    http://blog.csdn.net/mchdba/article/details/51527081 MySQL版本是5.7.10-log社区版本,需要进行备份,但是备份时间长了后,磁盘不够用,所 ...

  2. 学习 shell脚本之前的基础知识

    转载自:http://www.92csz.com/study/linux/12.htm  学习 shell脚本之前的基础知识 日常的linux系统管理工作中必不可少的就是shell脚本,如果不会写sh ...

  3. 用ORM的思想操作XML文档,一个对象就搞定不要太简单。滚蛋吧!XmlDocument、XmlNode、Xml***……

    大家有没有这样的感受,一涉及XML文档操作就得百度一遍.是不是非!常!烦!.各种类型,各种方法,更别提为了找到一个节点多费劲.本来想写个XML操作的工具方法,写了两行一想既然XML文档是有规律的,如果 ...

  4. 记一次与a标签相遇的小事

    最近做的一个项目,按钮使用的是a标签做的,样子还不错.不过正是这个a标签把我坑死了,有一个场景是点击a标签去调后台服务,为了防止用户频繁点击按钮提交,在去请求后台服务的时候肯定要先把按钮的事件给禁止掉 ...

  5. 第三方Android 模拟器流畅速度快,适合开发人员

    “工欲善其事,必先利其器.” 使用Android模拟器开发和调试应用肯定比使用真机方便.但相比XCODE的IOS模拟器,Android SDK自带的AVD实在不争气,不过一些第三方的模拟器却表现不俗! ...

  6. [收藏] javascript keycode大全

    做了一段的小练习,没往上发了~ 继续补下js的基础知识 ------------------------------------------------------------------------ ...

  7. 怎么实现ZBrush 4R7中界面视窗的快速转换

    本篇教程介绍ZBrush® 4R7界面的基本操作之转换界面视窗, 教程属于入门教程可以帮助新手快速入门.因为ZBrush工 作界面不同于其他我们所熟知的3D软件,初次接触ZBrush的时候难免会有所困 ...

  8. [LeetCode] Water and Jug Problem 水罐问题

    You are given two jugs with capacities x and y litres. There is an infinite amount of water supply a ...

  9. 怎样简单灵活地将DataTable中的数据赋值给model

    最近在做的一个项目中,有13个方法都需要用到同一种处理方式:通过SQL语句从数据库获取一条指定的数据,并将该数据中的每个值都赋值给一个model,再将这个model中的数据通过微信发送出去.每个方法都 ...

  10. 文件上传之——用SWF插件实现文件异步上传和头像截取

    之前写过几篇文件上传,那些都不错.今天小编带领大家体会一种新的上传方法,及使用Flash插件实现文件上传. 使用Flash的好处就是可以解决浏览器兼容性问题.之前我写的一个快捷复制功能也是利用的Fla ...