分享公共库使用说明文档(友盟6.4.5)
1 引入公共库
(1)在build.gradle添加仓库地址
(2)在build.gradle中引入’com.guan.codelibs:share:1.0.0’
(3)例子如下:
dependencies {
compile 'com.guan.codelibs:share:1.0.0'
}
2 配置Android Manifest XML
(1)添加权限
(2)添加友盟appkey
(3)配置sdk中需要的Activity
(4)例子如下:
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="org.fungo.share_example">
<!-- (1)添加权限 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.READ_PHONE_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.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_LOCATION_EXTRA_COMMANDS" />
<application
android:name=".App"
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:theme="@style/AppTheme">
<activity android:name=".MainActivity">
<intent-filter>
<action android:name="android.intent.action.MAIN" />
<category android:name="android.intent.category.LAUNCHER" />
</intent-filter>
</activity>
<!-- (2)友盟APPKEY -->
<meta-data
android:name="UMENG_APPKEY"
android:value="1234567890" />
<!-- (3)QQ授权 -->
<activity
android:name="com.tencent.tauth.AuthActivity"
android:launchMode="singleTask"
android:noHistory="true">
<intent-filter>
<action android:name="android.intent.action.VIEW" />
<category android:name="android.intent.category.DEFAULT" />
<category android:name="android.intent.category.BROWSABLE" />
<!-- scheme = "tencent" + QQ_id -->
<data android:scheme="tencent123456" />
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<!-- (4)微信授权回调 -->
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
</application>
</manifest>
3 配置友盟key及三方key
建立一个application文件,注意要在AndroidManifest文件中配置
在application文件中配置三方平台的appkey:
(例子只配置了微信、QQ/Qzone、新浪的三方appkey)
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
initUmengShare();
}
public void initUmengShare() {
ShareConfig.isDebug(BuildConfig.DEBUG);// true 或者 false
ShareConfig.setWeixin("APP_ID", "SECRET");
ShareConfig.setSinaWeibo("APP_ID", "SECRET","http://sns.whalecloud.com");
ShareConfig.setQQZone("APP_ID", "SECRET");
}
}
4 签名配置
签名文件如果不加,部分平台的授权会受到影响。
(1)将文件夹中的签名文件放入到工程中
(2)在build.gradle增加签名文件的密码:
signingConfigs {
config {
keyAlias 'xxxxxx'
keyPassword '123456'
storeFile file('xxxxxx.keystore')
storePassword '123456'
}
}
(3)然后在buildTypes中将这个signingConfigs配置进去
buildTypes {
debug {
signingConfig signingConfigs.config
}
release {
}
}
5 微信回调Activity配置
在包名(org.fungo.share_example)目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity
package org.fungo.share_example.wxapi;
import com.umeng.socialize.weixin.view.WXCallbackActivity;
public class WXEntryActivity extends WXCallbackActivity {
}
6 常用接口调用
(1)在使用QQ分享或者授权的Activity中需要添加:(必填)
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
ShareAPI.get().onActivityResult(this,requestCode, resultCode, data);
}
(2)内存泄露处理方法
在使用分享或者授权的Activity中,重写onDestory()方法(必填)
@Override
protected void onDestroy() {
super.onDestroy();
ShareAPI.get().release(this);
}
(3)判断客户端是否安装
ShareAPI.get().isInstall((Activity) context, SHARE_PLATFROM.WEIXIN)
(4)Debug模式开启方式,开启后打印错误信息
在初始化sdk的地方:Application中
ShareConfig.isDebug(BuildConfig.DEBUG);// true 或者 false
7 分享集成
a.定义分享控制器:
ShareController controller = new ShareController(this,SHARE_PLATFROM.QQ);
b.定义分享回调:
ShareHandlerCallback callback = new ShareHandlerCallback() {//回调监听器
/**
* 分享开始的回调
* @param var1 平台类型
*/
@Override
public void startCall(String var1) {
}
/**
* 分享成功的回调
* @param var1 平台类型
*/
@Override
public void successCall(String var1) {
Toast.makeText(MainActivity.this, "分享成功" + var1, Toast.LENGTH_SHORT).show();
}
/**
* 分享失败的回调
* @param var1 平台类型
* @param var2 错误原因
*/
@Override
public void errorCall(String var1, String var2) {
Toast.makeText(MainActivity.this, "分享失败" + var1 + var2, Toast.LENGTH_SHORT).show();
}
/**
* 分享取消的回调
* @param var1 平台类型
*/
@Override
public void cancelCall(String var1) {
Toast.makeText(MainActivity.this, "取消分享" + var1, Toast.LENGTH_SHORT).show();
}
};
c.设置分享内容和调用share()分享:
(1)基本分享例子
public void share() {
controller.withText("hello");//分享内容
controller.setCallback(callback);//分享回调
controller.share();// 分享
}
(2)分享文本
public void share() {
controller.withText("hello");//分享内容
}
(3)分享图片
public void share() {
//调用withMedia可以设置一个ShareImage,ShareImage的构建有如下几种形式
ShareImage image = new ShareImage(this, "imageurl");//网络图片
ShareImage image = new ShareImage(this, file);//本地文件
ShareImage image = new ShareImage(this, R.drawable.xxx);//资源文件
ShareImage image = new ShareImage(this, bitmap);//bitmap文件
ShareImage image = new ShareImage(this, byte[]);//字节流
//推荐使用网络图片和资源文件的方式,平台兼容性更高。对于部分平台,分享的图片需要设置缩略图,缩略图的设置规则为:
ShareImage thumb = new ShareImage(this, R.drawable.thumb);
image.setThumb(thumb);
//用户设置的图片大小最好不要超过250k,缩略图不要超过18k,如果超过1M会报出error,用户可以设置压缩的方式:
image.setCompressStyle(ShareImage.CompressStyle.SCALE);//大小压缩,默认为大小压缩,适合普通很大的图
image.setCompressStyle(ShareImage.CompressStyle.QUALITY);//质量压缩,适合长图的分享
ShareController controller = new ShareController(this,SHARE_PLATFROM.QQ);
controller.withText("hello");//分享内容
controller.withMedia(image);//图片
}
(4)分享链接
public void share() {
ShareWeb web = new ShareWeb(Defaultcontent.url);//跳转链接
web.setTitle("This is music title");//标题
web.setThumb(thumb);//缩略图
web.setDescription("my description");//描述
controller.withMedia(web);
}
(5)分享视频
public void share() {
ShareVideo video = new ShareVideo("videourl");
video.setTitle("This is music title");//标题
video.setThumb(thumb);//缩略图
video.setDescription("my description");//描述
controller.withMedia(video);
}
(6)分享音乐
public void share() {
ShareMusic music = new ShareMusic("musicurl");
music.setTitle("This is music title");//标题
music.setThumb(thumb);//缩略图
music.setDescription("my description");//描述
music.setmTargetUrl(Defaultcontent.url);//音乐的跳转链接
controller.withMedia(music);
}
特别说明:播放链接是指在微信qq分享音乐,是可以在当前聊天界面播放的,要求这个musicurl(播放链接)必须要以.mp3等音乐格式结尾,
跳转链接是指点击linkcard之后进行跳转的链接。
(7)分享GIF
目前只有微信好友分享支持Emoji表情,其他平台暂不支持
public void share() {
ShareEmoji emoji = new ShareEmoji(this, getSaveFile("/storage/emulated/0/loveshow/camera/crop/1503889044413.gif"));
ShareImage thumb = new ShareImage(this, R.drawable.thumb);
emoji.setThumb(thumb);
shareController.withMedia(emoji);
}
public static File getSaveFile(String path) {
File file = new File(path);
return file;
}
(8)分享微信小程序
目前只有微信好友支持小程序分享,朋友圈,收藏及其他平台暂不支持:
public void share() {
ShareMin min = new ShareMin(Defaultcontent.url);
min.setTitle("This is music title");//标题
min.setThumb(thumb);//缩略图
min.setDescription("my description");//描述
min.setPath("pages/page10007/xxxxxx");
min.setUserName("xx_xxx");
controller.withMedia(min);
}
8 获取用户资料授权
(1) 获取用户资料授权
AuthController controller = new AuthController(this, platform,
new AuthHandlerCallback() {
/**
* 授权开始的回调
* @param var1 平台类型
*/
@Override
public void startCall(SHARE_PLATFROM var1) {
}
/**
* 授权成功的回调
* @param var1 平台类型
* @param var2 行为序号,开发者用不上
* @param var3 错误原因
*/
@Override
public void successCall(SHARE_PLATFROM var1, int var2, Map var3) {
Toast.makeText(MainActivity.this, "授权成功,获取用户信息...", Toast.LENGTH_SHORT).show();
}
/**
* 授权失败的回调
* @param var1 平台类型
* @param var2 错误原因
*/
@Override
public void errorCall(SHARE_PLATFROM var1, int var2, Throwable var3) {
}
/**
* 取消授权的回调
* @param var1 平台类型
* @param var2 行为序号,开发者用不上
*/
@Override
public void cancelCall(SHARE_PLATFROM var1, int var2) {
}
});
controller.getPlatformInfo();
登录成功后,第三方平台会将用户资料传回, 全部会在Map data中返回 ,由于各个平台对于用户资料的标识不同,
因此为了便于开发者使用,我们将一些常用的字段做了统一封装,开发者可以直接获取,不再需要对不同平台的不同字段名做转换。
(2) 第三方授权
AuthController controller = new AuthController(this, platform,
new AuthHandlerCallback() {
.........
}
controller.doOauthVerify();