社会化登陆分享-Android SDK的二次封装和使用

本系列文章将第三方的登陆分享功能进行二次封装,统一接口调用,简化了接不一样平台登陆分享的步骤。java

0 系列文章

系列一 Android SDK的二次封装和使用
系列二 源码解析
系列三 微信SDK接入
系列四 QQ SDK接入
系列五 新浪微博 SDK接入android

1 前言

如今有市场上又好几家都作了社会化分享组件,好比ShareSDK,Umeng等。惟一的缺点就是,必须得注册相应服务平台的帐号。没法单纯使用客户端SDK。git

本系列文章即开源实现了社会化的登陆分享,统一对外接口。会分别从如何使用、源码解析、各平台接入进行解读。github

2 Github地址

先上开源代码和封装好的SDK。api

github.com/tsy12321/So…bash

欢迎在issue里提功能需求和建议!微信

3 目录介绍

如图:app

目录结构
目录结构

采用了jar包的方式封装sdk,须要使用时能够引入social_sdk.jar再搭配须要的平台sdk使用.
这种方式能够减小sdk的体积,须要什么平台就引入哪一个平台.更为合理.ide

目录结构:post

  • app/ Demo代码
  • social_sdk/ sdk的开发源码module 开发完成后用gradle中makejar打成jar包
  • social_sdk_vxxx.jar sdk的jar包 直接使用.搭配所需的平台sdk包.
  • weixin_sdk/ 微信sdk
  • qq_sdk/ qq sdk
  • sina_weibo_sdk/ 新浪微博 sdk

4 Demo介绍

替换Demo中的MainActivity中的qq appid、wx appid、weibo appkey为本身的

public class MainActivity extends AppCompatActivity implements IWeiboHandler.Response{

    ...

    private static final String WX_APPID = "your wx appid";    //申请的wx appid
    private static final String QQ_APPID = "your qq appid";    //申请的qq appid
    private static final String SINA_WB_APPKEY = "your sina wb appkey";       //申请的新浪微博 appkey

    ...
}复制代码

替换AndroidManifest中的qq appid为本身的

<!--qq-->
<activity
    android:name="com.tencent.tauth.AuthActivity"
    android:noHistory="true"
    android:launchMode="singleTask" >
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="tencent1111111" /> <!--1111111改成你的qq appid-->
    </intent-filter>
</activity>复制代码

替换builde.gradle文件中的签名为本身的app签名。

修改完上面3个地方后便可跑通Demo。以下

Demo
Demo

5 功能介绍

该SDK主要集成了受权登陆和分享的功能

5.1 受权登陆

  1. 微信受权登陆
  2. QQ受权登陆
  3. 新浪微博受权登陆

5.2 分享

5.2.1 分享媒介

  1. 文字
  2. 图片
  3. 音乐
  4. 视频
  5. 网页

5.2.2 分享平台

  1. 微信会话分享
  2. 微信朋友圈分享
  3. QQ分享
  4. QQ空间分享
  5. 新浪微博分享

6 开发说明

6.1 准备

将social_sdk.jar和须要的平台sdk放入项目中引用.

AndroidManifest加上如下基本的权限(以后各个平台会注册一些不一样的信息后面会说明)

<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS" />复制代码

6.2 配置平台信息

在项目入口(或者在调用前)须要配置平台的信息,配置一次便可.

PlatformConfig.setWeixin(WX_APPID);
PlatformConfig.setQQ(QQ_APPID);
PlatformConfig.setSinaWB(SINA_WB_APPKEY);复制代码

6.3 接口使用说明

调用方式使用api调用登陆或者分享接口,在参数中区别平台,实现回调接收成功 取消或者失败的结果.

示例以下:(某些平台会有一些特殊处理后面会在平台中说明)

初始化api:

SocialApi mSocialApi = SocialApi.get(getApplicationContext());复制代码

登陆受权:

mSocialApi.doOauthVerify(this, PlatformType.WEIXIN, new AuthListener() {
    @Override
    public void onComplete(PlatformType platform_type, Map<String, String> map) {
        Log.i("tsy", "oncomplete:" + map);
    }

    @Override
    public void onError(PlatformType platform_type, String err_msg) {
        Log.i("tsy", "onError:" + err_msg);
    }

    @Override
    public void onCancel(PlatformType platform_type) {
        Log.i("tsy", "onCancel");
    }
});复制代码

分享:

//分享媒介 后面有详细介绍
ShareWebMedia shareMedia = new ShareWebMedia();
shareMedia.setTitle("分享网页测试");
shareMedia.setDescription("分享网页测试");
shareMedia.setWebPageUrl("http://www.baidu.com");
shareMedia.setThumb(BitmapUtils.readBitMap(getApplicationContext(), R.mipmap.ic_launcher));

mSocialApi.doShare(this, PlatformType.WEIXIN, shareMedia, new ShareListener() {
    @Override
    public void onComplete(PlatformType platform_type) {
        Log.i("tsy", "share onComplete");
    }

    @Override
    public void onError(PlatformType platform_type, String err_msg) {
        Log.i("tsy", "share onError:" + err_msg);
    }

    @Override
    public void onCancel(PlatformType platform_type) {
        Log.i("tsy", "share onCancel");
    }
});复制代码

6.4 分享媒介

如今集成了文字分享,图片分享,音乐分享,视频分享,网页分享5种分享媒介.不一样的平台可能只有其中某几种.

6.4.1 文字分享

ShareTextMedia shareMedia = new ShareTextMedia();
shareMedia.setText("分享文字测试");复制代码

6.4.2 图片分享

ShareImageMedia shareMedia = new ShareImageMedia();
shareMedia.setImage(BitmapUtils.readBitMap(getApplicationContext(), R.mipmap.ic_launcher));复制代码

6.4.3 音乐分享

ShareMusicMedia shareMedia = new ShareMusicMedia();
shareMedia.setTitle("分享音乐测试");
shareMedia.setDescription("分享音乐测试");
shareMedia.setMusicUrl("http://idg-tangsiyuan.tunnel.nibaguai.com/splash/music.mp3");
shareMedia.setThumb(BitmapUtils.readBitMap(getApplicationContext(), R.mipmap.ic_launcher));复制代码

6.4.4 视频分享

ShareVideoMedia shareMedia = new ShareVideoMedia();
shareMedia.setTitle("分享视频测试");
shareMedia.setDescription("分享视频测试");
shareMedia.setVideoUrl("http://idg-tangsiyuan.tunnel.nibaguai.com/splash/music.mp3");
shareMedia.setThumb(BitmapUtils.readBitMap(getApplicationContext(), R.mipmap.ic_launcher));复制代码

6.4.5 网页分享

ShareWebMedia shareMedia = new ShareWebMedia();
shareMedia.setTitle("分享网页测试");
shareMedia.setDescription("分享网页测试");
shareMedia.setWebPageUrl("http://www.baidu.com");
shareMedia.setThumb(BitmapUtils.readBitMap(getApplicationContext(), R.mipmap.ic_launcher));复制代码

7 第三方平台接入

7.1 微信

7.1.1 集成sdk

将目录中的weixin_sdk_v3.1.1.jar放入项目.

7.1.2 配置

AndroidManifest中添加:

<activity
    android:name="com.tsy.sdk.social.weixin.WXCallbackActivity"
    android:configChanges="orientation|keyboardHidden|navigation|screenSize"
    android:exported="true"
    android:launchMode="singleTop"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity-alias
    android:name=".wxapi.WXEntryActivity"
    android:exported="true"
    android:targetActivity="com.tsy.sdk.social.weixin.WXCallbackActivity" />复制代码

7.1.3 常量定义

设置配置信息:

PlatformConfig.setWeixin(WX_APPID);复制代码

PlatformType:

微信:PlatformType.WEIXIN(可用于登陆和微信回话分享)

朋友圈:PlatformType.WEIXIN_CIRCLE(用于微信朋友圈分享)

7.1.4 注意

使用微信登陆分享须要签名打包,而且签名和包名要和微信平台填入的信息一致。

7.2 QQ

7.2.1 集成sdk

将目录中的qq_mta-sdk-1.6.2.jar和qq_sdk_v3.1.0.jar放入项目.

7.2.2 配置

AndroidManifest中添加:

<!--qq-->
<activity
    android:name="com.tencent.tauth.AuthActivity"
    android:noHistory="true"
    android:launchMode="singleTask" >
    <intent-filter>
        <action android:name="android.intent.action.VIEW" />
        <category android:name="android.intent.category.DEFAULT" />
        <category android:name="android.intent.category.BROWSABLE" />
        <data android:scheme="tencent你的appid" />
    </intent-filter>
</activity>
<activity
    android:name="com.tencent.connect.common.AssistActivity"
    android:screenOrientation="portrait"
    android:theme="@android:style/Theme.Translucent.NoTitleBar" />复制代码

7.2.3 常量定义

设置配置信息:

PlatformConfig.setQQ(QQ_APPID);复制代码

PlatformType:

微信:PlatformType.QQ(可用于登陆和QQ分享)

朋友圈:PlatformType.QZONE(用于qq控件分享)

7.2.4 注意

使用QQ登陆须要签名打包,而且签名和包名要和QQ开放平台填入的信息一致。

7.3 新浪微博

7.3.1 集成sdk

将目录中的weiboSDKCore_3.1.4.jar放入项目.

将全部so文件统一放到项目的目录app/jniLibs中(和libs同级), 而后在gradle中加上

android {

    ...

    //引入微博的全部so库
    sourceSets {
        main {
            jniLibs.srcDirs = ['jniLibs']
        }
    }
}复制代码

7.3.2 配置

AndroidManifest中添加:

<activity
    android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser"
    android:configChanges="keyboardHidden|orientation"
    android:exported="false"
    android:windowSoftInputMode="adjustResize"></activity>复制代码

而且在发起分享的activity页面的AndroidManifest页面中加上

<activity android:name="com.tsy.girl.MainActivity">     <!--发起分享的页面-->
    <intent-filter>
        <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
        <category android:name="android.intent.category.DEFAULT" />
    </intent-filter>
</activity>复制代码

而后在发起分享的Activity中添加如下代码.(假如是MainActivity)

实现IWeiboHandler.Response接口, 而后在实现的方法中写:

@Override
public void onResponse(BaseResponse baseResponse) {
    ((SinaWBHandler)mSocialApi.getSSOHandler(PlatformType.SINA_WB)).onResponse(baseResponse);
}复制代码

实现onNewIntent和onActivityResult方法:

@Override
protected void onNewIntent(Intent intent) {
    ((SinaWBHandler)mSocialApi.getSSOHandler(PlatformType.SINA_WB)).onNewIntent(intent, this);
}

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    mSocialApi.onActivityResult(requestCode, resultCode, data);
}复制代码

在onCreate中添加如下:

if (savedInstanceState != null) {
    ((SinaWBHandler)mSocialApi.getSSOHandler(PlatformType.SINA_WB)).onNewIntent(getIntent(), this);
}复制代码

而后正常发起受权或者分享代码便可.

7.3.3 常量定义

设置配置信息:

PlatformConfig.setSinaWB(SINA_WB_APPKEY);复制代码

7.3.4 注意

使用新浪登陆分享须要签名打包,而且签名和包名要和新浪平台填入的信息一致。

结尾

整个项目是一个可扩展的SDK,欢迎fork实现本身须要增长平台的代码,这个库自己也会不断添加平台和功能点。本篇就酱紫了,下篇会有整个SDK的基本源码解析。

相关文章
相关标签/搜索