Android 三方分享与ShareSDK分享填坑

简介

如今的app中,几乎都包含了分享这个功能,十分的常用

常见实现方式:
1. 系统自带分享
2. 使用社会化分享组件(如shareSDK等)
3. 集成三方SDK(QQ,微信,微博等)

android的自带分享功能功能太过单一,不能满足复杂的业务需求,这里主要介绍一下ShareSdk 和 集成三方SDK的方式

ShareSdk使用及注意事项

App Key App Secret

首先需要注册ShareSDK账号,并在后台创建应用,获取获取App KeyApp Secret ,应用名后期可更改,App KeyApp Secret 则不会改变

SDK下载及导入

选择我们需要分享到的平台 ,或者直接下载官方Demo.
ShareSDK下载

在刚才下载的SDK中,找到快速集成程序,QuickIntegrater.jar,按照相应操作,即可生成相关集成所需文件,点击确定后,会生成一个Sample目录.将目录中的文件拷贝到项目中,

ShareSDK快速集成

相关配置

这里的分享渠道参数配置有三种方式,分别是 在后台, 代码中,ShareSDK.xml中
其中最简单,最常用的就是在ShareSDK.xml中配置
ShareSDK.xml放置在资产目录assets下
新建assets目录

这种方式的弊端就是在应用发出去后不可动态更改
修改ShareSDK.xml

然后添加清单文件中的权限配置activity回调配置

分享及回调

//Activity#onCreate()
      //使用ShareSDK.xml方式配置
      ShareSDK.initSDK(this);
      // 使用代码或者应用后台配置
      ShareSDK.initSDK(this,”androidv1101″);
      //androidv1101:是你的应用在ShareSDK注册应用信息时返回的AppKey
//share
private void showShare(Context context,PlatformActionListener listener){
 OnekeyShare oks = new OnekeyShare();
 //...
 //设置内容回调,用于自定义不同平台的字段内容
oks.setShareContentCustomizeCallback(new ShareContentCustomizeCallback());
//设置回调监听
oks.setCallback(listener);
//设置自定义图标
oks.setCustomerLogo(press, nomal, label,listener);
oks.show(context);
}
//Activity#onDestroy()
ShareSDK.stopSDK(this); 

官方SDK 分享

这里我们自己使用QQ ,微信和微博的SDK来进行分享,并进行一定的封装,

QQ分享

什么首先获取appid等等,这些都是一般的流程.QQ分享主要用到类QQShare

//初始化
 mTencent = Tencent.createInstance(qqAppId, activity);
     this.mQQShare = new QQShare(activity, mTencent.getQQToken());
//分享
 /**
   * 设置分享内容
   * 参数说明
   * QzoneShare.SHARE_TO_QQ_KEY_TYPE    选填  Int SHARE_TO_QZONE_TYPE_IMAGE_TEXT(图文)
   * QzoneShare.SHARE_TO_QQ_TITLE   必填  Int 分享的标题,最多200个字符。
   * QzoneShare.SHARE_TO_QQ_SUMMARY 选填  String  分享的摘要,最多600字符。
   * QzoneShare.SHARE_TO_QQ_TARGET_URL  必填  String  需要跳转的链接,URL字符串。
   * QzoneShare.SHARE_TO_QQ_IMAGE_URL   选填  String  分享的图片, 以ArrayList<String>的类型传入,以便支持多张图片(注:图片最多支持9张图片,多余的图片会被丢弃)。
   */
   //其中bundle中传入的就是上面的那些参数,baseUiListener是为回调
 mQQShare.shareToQQ(mActivity, bundle, baseUiListener);

微信分享

微信分享依靠 的是IWXAPI来完成的,其中提供了几个类来辅助构建分享内容

  • WXTextObject: 文本内容
  • WXImageObject: 图片内容
  • WXWebpageObject: 网页内容
  • WXMusicObject: music内容
   //init
   mIWXAPI = WXAPIFactory.createWXAPI(activity, weChatAppId, true);
   mIWXAPI.registerApp(weChatAppId);
    // 构建分享内容
    WXMediaMessage msg = new WXMediaMessage(music);
    msg.title = shareContent.getTitle();
    msg.description = shareContent.getContent();

    SendMessageToWX.Req req = new SendMessageToWX.Req();
    req.transaction = String.valueOf(System.currentTimeMillis());
    req.message = msg;
    //开始分享
    mIWXAPI.sendReq(req);

注意:微信分享需要签名,并且新建wxapi/WXEntryActivity.java

微博分享

参照sinaweibosdk/weibo_android_sdk,同样微博也提供了文本,图片,webpage和music的分享.

 private void shareText(ShareContent shareContent) {

    //初始化微博的分享消息
    WeiboMultiMessage weiboMultiMessage = new WeiboMultiMessage();
    weiboMultiMessage.textObject = getTextObj(shareContent.getContent());
    //初始化从第三方到微博的消息请求
    SendMultiMessageToWeiboRequest request = new SendMultiMessageToWeiboRequest();
    request.transaction = String.valueOf(System.currentTimeMillis());
    request.multiMessage = weiboMultiMessage;
    share(mActivity, request);
  }
// 使用网页分享时会触发回调
    mSinaAPI.sendRequest((Activity) context, request, authInfo, token, weiboAuthListener);

注意使用客户端分享的时候,需要回调activity实现IWeiboHandler.Response,并在清单文件下配置

 <intent-filter>
        <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY"/>
        <category android:name="android.intent.category.DEFAULT"/>
      </intent-filter>

封装

最后,为了方便使用,这里对三方分享进行了一定的封装ShareLoginPay,只要配置好appid等配置信息即可.

//以微信分享为例
LoginBlock.getInstance().initWechatLogin(wechatAppId, wechatAppSecret);
 IShare wxshare = new WechatShare(this);
    ShareContent shareContent = new ShareContent();
    shareContent.setContent("分享的内容");
    shareContent.setTitle("分享的标题");
    //分享文本
    shareContent.setContentType(ContentType.TEXT);
    //分享到好友,而不是朋友圈
    shareContent.setShareType(ShareType.WECHAT);

    wxshare.share(shareContent, new IShareCallBack() {
      @Override public void onComplete(Object o) {
        Toast.makeText(MainActivity.this, "onComplete-->" + o.toString(), Toast.LENGTH_SHORT)
            .show();
      }

      @Override public void onError(Exception e) {
        Toast.makeText(MainActivity.this, "onError-->" + e.toString(), Toast.LENGTH_SHORT).show();
      }

      @Override public void onCancel() {
        Toast.makeText(MainActivity.this, "onCancel", Toast.LENGTH_SHORT).show();
      }
    });
  • 2
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
1 2 3 4 5 $sharesdk.shareContent($sharesdk.platformID.SinaWeibo, params, function (platform, state, shareInfo, error) { alert("state = " + state + "\nshareInfo = " + shareInfo + "\nerror = " + error); }); 一键分享 1 2 3 4 5 $sharesdk.oneKeyShareContent([$sharesdk.platformID.SinaWeibo, $sharesdk.platformID.TencentWeibo], params, function (platform, state, shareInfo, error) { alert("state = " + state + "\nshareInfo = " + shareInfo + "\nerror = " + error); }); 关于具体的分享参数名称,请参考“不同平台分享内容的详细说明”章节的说明。 用户授权 调用ShareSDK中的authorize方法可进行用户授权。代码如下: 1 2 3 4 5 $sharesdk.authorize($sharesdk.platformID.SinaWeibo, function (platform, state, error){ alert("state = " + state + "\nerror = " + error); }); 获取用户资料 调用ShareSDK中的getUserInfo来获取授权用户的信息。代码如下: 1 2 3 4 5 $sharesdk.getUserInfo($sharesdk.platformID.SinaWeibo, function (platform, state, user, error) { alert("state = " + state + "\nuser = " + user + "\nerror = " + error); }); iOS部分集成步骤(不发布iOS版本可略过此部分) 导入JS桥接的iOS版本组件 打开下载的JS包里的iOS/ShareSDKForJS/ShareSDKForJS.xcodeproj项目工程,选择ShareSDKForJS静态库运行Xcode,如图: 700px-js_doc_001.png 运行成功之后,请大家打开文件找到Build文件夹,然后进入文件中找到build/Products/Debug-iphonesimulato /libShareSDKForJS.a文件以及找到build/Products/Debug-iphonesimulator/usr/local /include/ShareSDKJSBridge.h这个文件,再将libShareSDKForJS.a和ShareSDKJSBridge.h这 2个文件导入到你的项目里,如图 700px-js_doc_002.png 注意:(如果在分享中弹不出分享的菜单,如果大家的ShareSDK.js文件是本地的,要把这个加到Build Phases里面的Copy Bundle Resources选项) 下载iOS版本ShareSDK,并导入到工程中。 登录ShareSDK的官方网站下载并解压最新版本的SDK。如果您还尚未下载,请 点击这里下载 或者访问 http://sharesdk.cn/Download 。解压后如图所示: 700px-js_doc_003 将ShareSDK导入工程中,并添加相应的依赖库。此步骤可以参考:《iOS快速集成指南》中的第一、第二步。执行完成后,如下图所示: 700px-js_doc_004.png 为UIWebView添加消息捕获 先导入ShareSDKJSBridge.h头文件。 1 #import "ShareSDKJSBridge.h" 然后给UIWebView设置一个委托对象,如: 1 webView.delegate = self; 注意:webView是UIWebView的对象实例。 最后实现shouldStartLoadWithRequest委托方法,并在方法中加入JSBridge的captureRequest方法,代码如下: 1 2 3 4 - (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType { return ![[ShareSDKJSBridge sharedBridge] captureRequest:request webView:webView]; } 添加完毕后就可以对工程进行运行测试。 Android部分集成步骤(不发布Android版本可略过此部分) 导入的步骤如下: 1、参考”安卓快速集成文档“章节的说明,导入ShareSDK for Android的jar库和图片、文字资源。 2、复制github上的jsdemo项目中”cn.sharesdk.js”包中的源代码复制到你的项目中。QQ截图20150304142013 3、在您WebView加载页面地址之前。调用ShareSDKUtils.prepare(webview, webviewClient); 请注意,ShareSDKUtils.prepare方法要在WebView.setWebViewClient(WebViewClinet);之后调用,而且此后不能再调用setWebViewClient方法,否则ShareSDK的初始化操作可能失败。 下面的代码来自github上的demo: Objective-C 1 2 3 4 5 6 7 8 9 10 11 12 public class MainActivity extends Activity { protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); WebView wvBody = new WebView(this); WebViewClient wvClient = new WebViewClient(); wvBody.setWebViewClient(wvClient); wvBody.setWebChromeClient(new WebChromeClient() { public boolean onJsAlert(WebView view, String url, String message, JsResult result) { return super.onJsAlert(view, url, message, result); } });

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值