友盟集成总得来说可以分为:
1.友盟官方账号申请+SDK集成
2.第三方账号申请+应用创建
3.将三方的appId和appKey配置到应用
4.分享和登录Api调取实现分享和登录
1.下载SDK,导入jar包
将sdk里面的jar和资源拷贝到项目中:
1.G:\三方\友盟\sdk\Android\analytics\analytics_android_8.0.2:统计的sdk
2.G:\三方\友盟\sdk\Android\common\common_android_2.0.2\normal,基础的sdk(必须)
3.G:\三方\友盟\sdk\Android\share\share_android_6.9.4:分享的sdk
4.配置完成后:libs+图片+布局+values对应都有相应的资源
2.配置清单文件 AndroidManifest.xml
3.微信需要创建如下类
在包名目录下创建wxapi文件夹,新建一个名为WXEntryActivity的activity并继承WXCallbackActivity。
public class WXEntryActivity extends WXCallbackActivity {
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_wxentry);
}
}
4.创建Application,注意:需要在清单文件配置
public class BaseApp extends Application {
@Override
public void onCreate() {
super.onCreate();
UMConfigure.init(this, "5ca5719e3fc195b491001175"
, "umeng", UMConfigure.DEVICE_TYPE_PHONE, "");
//todo 三方ak没有申请
///需要设置各个平台的appkey:
PlatformConfig.setWeixin("wxdc1e388c3822c80b", "3baf1193c85774b3fd9d18447d76cab0");
//豆瓣RENREN平台目前只能在服务器端配置
PlatformConfig.setSinaWeibo("2248884681", "7ed722f6244fb5ce4504b4fe46c394bb",
"http://sns.whalecloud.com");
PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
/* PlatformConfig.setYixin("yxc0614e80c9304c11b0391514d09f13bf");
PlatformConfig.setTwitter("3aIN7fuF685MuZ7jtXkQxalyi", "MK6FEYG63eWcpDFgRYw4w9puJhzDl0tyuqWjZ3M7XJuuG7mMbO");
PlatformConfig.setAlipay("2015111700822536");
PlatformConfig.setLaiwang("laiwangd497e70d4", "d497e70d4c3e4efeab1381476bac4c5e");
PlatformConfig.setPinterest("1439206");
PlatformConfig.setKakao("e4f60e065048eb031e235c806b31c70f");
PlatformConfig.setDing("dingoalmlnohc0wggfedpk");
PlatformConfig.setVKontakte("5764965","5My6SNliAaLxEm3Lyd9J");
PlatformConfig.setDropbox("oz8v5apet3arcdy","h7p2pjbzkkxt02a");
PlatformConfig.setYnote("9c82bf470cba7bd2f1819b0ee26f86c6ce670e9b");*/
}
}
5.在activity_main.xml文件下
//在Activity中设置监听
private void initView() {
mBtn1 = (Button) findViewById(R.id.btn1);
mBtn1.setOnClickListener(this);
mBtn2 = (Button) findViewById(R.id.btn2);
mBtn2.setOnClickListener(this);
mBtn3 = (Button) findViewById(R.id.btn3);
mBtn3.setOnClickListener(this);
mBtn4 = (Button) findViewById(R.id.btn4);
mBtn4.setOnClickListener(this);
mBtn5 = (Button) findViewById(R.id.btn5);
mBtn5.setOnClickListener(this);
mBtn6 = (Button) findViewById(R.id.btn6);
mBtn6.setOnClickListener(this);
mBtn7 = (Button) findViewById(R.id.btn7);
mBtn7.setOnClickListener(this);
}
@Override
public void onClick(View v) {
switch (v.getId()) {
case R.id.btn1:
shareBorad();
break;
case R.id.btn2:
share(SHARE_MEDIA.QQ);
break;
case R.id.btn3:
share(SHARE_MEDIA.SINA);
break;
case R.id.btn4:
share(SHARE_MEDIA.WEIXIN);
break;
case R.id.btn5:
login(SHARE_MEDIA.QQ);
break;
case R.id.btn6:
login(SHARE_MEDIA.SINA);
break;
case R.id.btn7:
login(SHARE_MEDIA.WEIXIN);
break;
}
}
6.带面板分享
/**
* 带面板的分享
*/
private void shareBorad() {
UMImage thumb = new UMImage(this, "https://ws1.sinaimg.cn/large/0065oQSqly1fw8wzdua6rj30sg0yc7gp.jpg");
thumb.compressStyle = UMImage.CompressStyle.SCALE;//大小压缩,默认为大小压缩,
new ShareAction(MainActivity.this).withText("hello")
.withMedia(thumb)
.setDisplayList(SHARE_MEDIA.SINA, SHARE_MEDIA.QQ, SHARE_MEDIA.WEIXIN)
.setCallback(umShareListener)
.open();
}
7.不带面板分享
/**
* 不带面板分享
*
* @param type
*/
private void share(SHARE_MEDIA type) {
UMImage thumb = new UMImage(this, "https://ws1.sinaimg.cn/large/0065oQSqly1fw8wzdua6rj30sg0yc7gp.jpg");
thumb.compressStyle = UMImage.CompressStyle.SCALE;//大小压缩,默认为大小压缩,
new ShareAction(MainActivity.this)
.setPlatform(type)//传入平台
.withText("hello")//分享内容
.withMedia(thumb)//分享图片
.setCallback(umShareListener)//回调监听器
.share();
}
8.分享开始回调
private UMShareListener umShareListener = new UMShareListener() {
/**
* @descrption 分享开始的回调
* @param platform 平台类型
*/
@Override
public void onStart(SHARE_MEDIA platform) {
}
/**
* @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();
}
};
9.登录
/**
* 登录
*
* @param type
*/
private void login(SHARE_MEDIA type) {
UMShareAPI umShareAPI = UMShareAPI.get(this);
umShareAPI.getPlatformInfo(MainActivity.this, type, umAuthListener);
}
10.登录开始后回调
private UMAuthListener umAuthListener = new UMAuthListener() {
/**
* @desc 授权开始的回调
* @param platform 平台名称
*/
@Override
public void onStart(SHARE_MEDIA platform) {
}
/**
* @desc 授权成功的回调
* @param platform 平台名称
* @param action 行为序号,开发者用不上
* @param data 用户资料返回
*/
@Override
public void onComplete(SHARE_MEDIA platform, int action, Map data) {
for (Map.Entry entry : data.entrySet()) {
String key = entry.getKey();
String value = entry.getValue();
Log.d(TAG, "key: " + key + ",value:" + value);
}
Toast.makeText(MainActivity.this, "成功了", Toast.LENGTH_LONG).show();
}
/**
* @desc 授权失败的回调
* @param platform 平台名称
* @param action 行为序号,开发者用不上
* @param t 错误原因
*/
@Override
public void onError(SHARE_MEDIA platform, int action, Throwable t) {
Toast.makeText(MainActivity.this, "失败:" + t.getMessage(), Toast.LENGTH_LONG).show();
}
/**
* @desc 授权取消的回调
* @param platform 平台名称
* @param action 行为序号,开发者用不上
*/
@Override
public void onCancel(SHARE_MEDIA platform, int action) {
Toast.makeText(MainActivity.this, "取消了", Toast.LENGTH_LONG).show();
}
};
11.Android6.0权限适配
if (Build.VERSION.SDK_INT>Build.VERSION_CODES.M){
String[] mPermissionList = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,
Manifest.permission.READ_EXTERNAL_STORAGE,};
ActivityCompat.requestPermissions(this,mPermissionList,123);
}
12.onActivityResult
QQ与新浪不需要添加Activity,但需要在使用QQ分享或者授权的Activity中,添加:
注意onActivityResult不可在fragment中实现,如果在fragment中调用登录或分享,需要在fragment依赖的Activity中实现
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}