前言
为什么需要再写一个第三方分享呢,现在友盟和sharesdk都封装的很好功能又很齐全,但是都需要微信的secret的值,但是有时候公司不提供secret的值,只提供微信的key的值,只需要微信返回code值然后后台去获取具体信息就可以,这时候你就不得不去微信官方重新写。
本文写法非常简单,代码又很清晰,目前只支持QQ,微信,新浪,基本APP也就这几种对接而已
依赖:
compile 'com.yanxuwen.OAuth:OAuth:1.0.0'
build.gradle 记得加入这句话不然会报错
repositories {
flatDir {
dirs '../OAuth/libs';dirs 'libs'
}
}
实现:
1.首先初始化。
//QQ,WX,SINA分别为对应的key值,第四个参数就是微信的secret值,
//不传的话写null,授权的时候就只会返回code,如果有传的话就会返回openid跟access_token
OAuthID.init(this, QQ, WX,null,SINA, "http://www.sina.com");
//初始化Auth主操作对象
mOAuthUtils=new OAuthUtils(this);
mOAuthUtils.setOAuthListener(this);
}
2.个重要的地方onNewIntent跟onActivityResult,复制进去就是了,记得这2个方法
@Override
protected void onNewIntent(Intent intent) {
super.onNewIntent(intent);
mOAuthUtils.onNewIntent(intent);
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
mOAuthUtils.onActivityResult(requestCode, resultCode, data);
super.onActivityResult(requestCode, resultCode, data);
}
3.AndroidManifest.xml 也里就不说了大家都知道,也是复制进去,
4.WXEntryActivity这个大家也都知道,微信的路径必备的,别漏了
public class WXEntryActivity extends MyWXEntryActivity {}
5. 这时候我们设置一个监听,因为我们授权成功的时候会回调
public class MainActivity extends AppCompatActivity implements OAuthListener {
}
public void onAuthComplete(AuthPlatform platform, AuthType mAuthType, Object object) {}
public void onAuthCancel(AuthPlatform platform, AuthType mAuthType) {}
public void onAuthError(AuthPlatform platform, AuthType mAuthType) {}
这3个方法就是授权成功,授权取消,授权失败的回调,也是分享成功,分享失败的回调,
1.platform是用于判断是QQ还是微信还是新浪,
2.mAuthType是用于判断是登录还是分享
3.object是授权成功返回信息,可以强制转换为QQ的实体类或者微信的实体类,
如:
QQ的 QQLogin mQQLogin=(QQLogin)object;
微信的WXLogin mWXLogin=(WXLogin)object;
新浪的SinaLogin mSinaLogin=(SinaLogin)object;
给一份代码跟清晰:
@Override
public void onAuthComplete(AuthPlatform platform, AuthType mAuthType, Object object) {
switch (platform){
case QQ:
try {
if(mAuthType==AuthType.LOGIN){
QQLogin mQQLogin=(QQLogin)object;
Toast.makeText(this,"授权成功"+mQQLogin.getAccess_token(),Toast.LENGTH_SHORT).show();
}else if(mAuthType==AuthType.USERINFO){
QQInfo mQQInfo=(QQInfo)object;
Toast.makeText(this,"授权成功"+mQQInfo.getNickname(),Toast.LENGTH_SHORT).show();
}else if(mAuthType==AuthType.SHARE){
Toast.makeText(this,"分享成功",Toast.LENGTH_SHORT).show();
}
}catch (Exception e){}
break;
case WX:
if(mAuthType==AuthType.LOGIN){
WXLogin mWXLogin=(WXLogin)object;
Toast.makeText(this,"授权成功"+mWXLogin.getCode(),Toast.LENGTH_SHORT).show();
}else if(mAuthType==AuthType.SHARE){
Toast.makeText(this,"分享成功",Toast.LENGTH_SHORT).show();
}
break;
case SINA:
if(mAuthType==AuthType.LOGIN){
SinaLogin mSinaLogin=(SinaLogin)object;
Toast.makeText(this,"授权成功"+mSinaLogin.getUid(),Toast.LENGTH_SHORT).show();
}else if(mAuthType==AuthType.USERINFO){
}
break;
}
}
@Override
public void onAuthCancel(AuthPlatform platform, AuthType mAuthType) {
switch (mAuthType){
case LOGIN:
Toast.makeText(this,"授权取消",Toast.LENGTH_SHORT).show();
break;
case SHARE:
Toast.makeText(this,"分享取消",Toast.LENGTH_SHORT).show();
break;
case USERINFO:break;
}
}
@Override
public void onAuthError(AuthPlatform platform, AuthType mAuthType) {
switch (mAuthType){
case LOGIN:
Toast.makeText(this,"授权失败",Toast.LENGTH_SHORT).show();
break;
case SHARE:
Toast.makeText(this,"分享失败",Toast.LENGTH_SHORT).show();
break;
case USERINFO:break;
}
}
6.如何调用登录或者分享
首先登录:
mOAuthUtils.login(AuthPlatform.QQ);
//mOAuthUtils.login(AuthPlatform.WX);
//mOAuthUtils.login(AuthPlatform.SINA);
分享QQ:
QQShare2 mQQShare2=mOAuthUtils.shareQQ();
String file_img= Environment.getExternalStorageDirectory()+ File.separator+"test.jpg";
mQQShare2.shareMusic("标题","摘要","https://www.baidu.com/","http://imgcache.qq.com/music/photo/mid_album_300/V/E/000J1pJ50cDCVE.jpg","http://staff2.ustc.edu.cn/~wdw/softdown/index.asp/0042515_05.ANDY.mp3","测试");
具体看demo比较清晰