前言
当你出去外面旅游,拍了很多好看的照片,想要跟别人分享,但是身边没有人,那怎么办呢,肯定是利用手机上的App 发个朋友圈啥的把,这就要用到分享功能了,作为一个IT程序员,不少人都有选择证把,分享集成有好多个平台,在这里我推荐用友盟,因为它可以搭配统计一起使用,根据个人习惯而定.
介绍
友盟统计
友盟官方集成文档
友盟多功能Android Demo
使用
(一). 集成准备
1.获取AppKey
集成【友盟+】SDK之前,您首先需要到 【友盟+】官网注册并且添加新应用,获得AppKey,这个应该没什么问题
2.快速集成
官方文档指出有两种集成方式:自动集成和手动集成
- 自动集成:现在只支持微信,QQ,新浪三个平台,如果想使用其他平台需要选择快速集成。
- 快速集成:需要下载最新SDK,选择社会化分享SDK即可,多种平台可以选择。
为了方便,主要使用自动集成的方式,如果你们在开发项目的时候,一定要仔细看官方文档,一看吓一跳!!
(二).简单使用
第一步:依赖只支持微信,QQ,新浪三个平台
注意:依赖库qq包不全,不能回调QQ回调页面,在这里我使用了jar包
// 基础组建库,要是不添加会导致初始化的时候的UMConfigure这个类不能识别
compile 'com.umeng.sdk:common:latest.integration'
compile 'com.umeng.sdk:utdid:1.1.5.3'
//在App上线前请务必删除集成调试库,避免无关信息的打印。
compile 'com.umeng.sdk:debug:latest.integration'
//友盟分享 QQ 微信 新浪
compile 'com.umeng.sdk:share-core:latest.integration'
//compile 'com.umeng.sdk:share-qq:latest.integration'
compile 'com.umeng.sdk:share-wechat:latest.integration'
compile 'com.umeng.sdk:share-sina:latest.integration'
//分享面板需要使用
compile 'com.umeng.sdk:shareboard-widget:latest.integration'
第二步:相关配置
QQ相关配置
<!--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" />
<data android:scheme="tencent100424468" />
</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" />
微信相关配置
在包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity继承WXCallbackActivity。
<!--微信-->
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
新浪相关配置
<!--新浪-->
<activity
android:name="com.umeng.socialize.media.WBShareCallBackActivity"
android:configChanges="keyboardHidden|orientation"
android:exported="false"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"></activity>
<activity
android:name="com.sina.weibo.sdk.web.WeiboSdkWebActivity"
android:configChanges="keyboardHidden|orientation"
android:exported="false"
android:windowSoftInputMode="adjustResize"></activity>
<activity
android:name="com.sina.weibo.sdk.share.WbShareTransActivity"
android:launchMode="singleTask"
android:theme="@android:style/Theme.Translucent.NoTitleBar.Fullscreen">
<intent-filter>
<action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
<category android:name="android.intent.category.DEFAULT" />
</intent-filter>
</activity>
签名相关配置
微信签名详解
第三步:配置权限
<!-- 必须的权限 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!--如果需要使用QQ纯图分享或避免其它平台纯图分享的时候图片不被压缩,可以增加以下权限:-->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<!-- 推荐的权限 -->
<!-- 添加如下权限,以便使用更多的第三方SDK和更精准的统计数据 -->
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION" />
<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
第四步:初始化设置
初始化需要在自己新建Application中调用我们的初始化接口:
private void initShare() {
/**
* 设置组件化的Log开关
* 参数: boolean 默认为false,如需查看LOG设置为true
*/
UMConfigure.setLogEnabled(true);
/**
* 如果在注册清单里 声明APP KEY,就可以使用这个初始化方法
*
* 初始化common库
* 参数1:上下文,不能为空
* 参数2:APP_KEY 如果设置为null 在注册清单 添加 <meta-data android:name="UMENG_APPKEY" android:value="5ac6d250f43e4835e8000a27" />
* 参数3:Channel 如果设置为null 同上
* 参数4:设备类型,UMConfigure.DEVICE_TYPE_PHONE为手机、UMConfigure.DEVICE_TYPE_BOX为盒子,默认为手机
* 参数5:Push推送业务的secret 需要集成Push功能必须传入的sercet,否则为空
*/
UMConfigure.init(getApplicationContext(), "友盟应用APPKETY", "umeng", UMConfigure.DEVICE_TYPE_PHONE, null);
// PlatformConfig.setWeixin("wxdc1e388c3822c80b", "3baf1193c85774b3fd9d18447d76cab0");
PlatformConfig.setWeixin("wx36db35b049be0d54", "7103f189703d59a3798755df5f23ddfa");
PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad", "http://sns.whalecloud.com");
PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
}
第五步:代码中编写
public class MainActivity extends AppCompatActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
initPermission();
}
/**
* 6.0版本以上需要适配权限
*/
private void initPermission() {
if(Build.VERSION.SDK_INT>=23){
String[] mPermissionList = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.CALL_PHONE,Manifest.permission.READ_LOGS,Manifest.permission.READ_PHONE_STATE, Manifest.permission.READ_EXTERNAL_STORAGE,Manifest.permission.SET_DEBUG_APP,Manifest.permission.SYSTEM_ALERT_WINDOW,Manifest.permission.GET_ACCOUNTS,Manifest.permission.WRITE_APN_SETTINGS};
ActivityCompat.requestPermissions(this,mPermissionList,123);
}
}
public void mBtn(View view) {
//设置面板自定义
ShareBoardConfig config = new ShareBoardConfig();
//设置位置
config.setShareboardPostion(ShareBoardConfig.SHAREBOARD_POSITION_CENTER);
//设置item背景形状
config.setMenuItemBackgroundColor(ShareBoardConfig.BG_SHAPE_CIRCULAR);
//设置分享面板title文本内容
config.setTitleText("测试选择要分享的平台");
new ShareAction(MainActivity.this)
.setDisplayList(SHARE_MEDIA.SINA, SHARE_MEDIA.QQ, SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE)
.withText("hello")
.withMedia(new UMImage(MainActivity.this, R.mipmap.ic_launcher))
.setCallback(umShareListener)
.open(config);
}
private UMShareListener umShareListener = new UMShareListener() {
/**
* @descrption 分享开始的回调
* @param platform 平台类型
*/
@Override
public void onStart(SHARE_MEDIA platform) {
Toast.makeText(MainActivity.this, "开始了", Toast.LENGTH_LONG).show();
}
/**
* @descrption 分享成功的回调
* @param platform 平台类型
*/
@Override
public void onResult(SHARE_MEDIA platform) {
Toast.makeText(MainActivity.this, "成功了", Toast.LENGTH_LONG).show();
}
/**
* @descrption 分享失败的回调
* @param platform 平台类型
* @param t 错误原因
*/
@Override
public void onError(SHARE_MEDIA platform, Throwable t) {
Toast.makeText(MainActivity.this, "失败了" + t.getMessage(), Toast.LENGTH_LONG).show();
}
/**
* @descrption 分享取消的回调
* @param platform 平台类型
*/
@Override
public void onCancel(SHARE_MEDIA platform) {
Toast.makeText(MainActivity.this, "取消了", Toast.LENGTH_LONG).show();
}
};
/**
* QQ与新浪不需要添加Activity,但需要在使用QQ分享或者授权的Activity中,添加:
*
* @param requestCode
* @param resultCode
* @param data
*/
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}
/**
* 内存泄漏解决方案,在使用分享的Activity中,重写onDestory()方法:
*/
@Override
protected void onDestroy() {
super.onDestroy();
UMShareAPI.get(this).release();
}
}
总结
备注:
效果图:以后再发
github地址
微信签名,出的问题很大,必须自己去微信开发平台自己创建一个应用,还有时间审核期,需要开通功能才可以使用微信的key
QQ,如果安装文档 提示 使用自动集成的话,依赖库qq导入的文件不全,无法在注册清单里声明Activity,需要自己下载jar包 add导入
如果要分享照片,6.0版本的手机必须自己写适配权限,要不然读取不到权限,无法跳转到分享页面