前言
為什么需要再寫(xiě)一個(gè)第三方分享呢,現(xiàn)在友盟和sharesdk都封裝的很好功能又很齊全英妓,但是都需要微信的secret的值挽放,但是有時(shí)候公司不提供secret的值,只提供微信的key的值蔓纠,只需要微信返回code值然后后臺(tái)去獲取具體信息就可以辑畦,這時(shí)候你就不得不去微信官方重新寫(xiě)。
本文寫(xiě)法非常簡(jiǎn)單腿倚,代碼又很清晰,目前只支持QQ纯出,微信,新浪敷燎,基本APP也就這幾種對(duì)接而已
依賴:
compile 'com.yanxuwen.OAuth:OAuth:1.0.0'
build.gradle 記得加入這句話不然會(huì)報(bào)錯(cuò)
repositories {
flatDir {
dirs '../OAuth/libs';dirs 'libs'
}
}
實(shí)現(xiàn):
1.首先初始化暂筝。
//QQ,WX,SINA分別為對(duì)應(yīng)的key值硬贯,第四個(gè)參數(shù)就是微信的secret值焕襟,
//不傳的話寫(xiě)null,授權(quán)的時(shí)候就只會(huì)返回code,如果有傳的話就會(huì)返回openid跟access_token
OAuthID.init(this, QQ, WX,null,SINA, "http://www.sina.com");
//初始化Auth主操作對(duì)象
mOAuthUtils=new OAuthUtils(this);
mOAuthUtils.setOAuthListener(this);
}
2.個(gè)重要的地方onNewIntent跟onActivityResult,復(fù)制進(jìn)去就是了饭豹,記得這2個(gè)方法
@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 也里就不說(shuō)了大家都知道胧洒,也是復(fù)制進(jìn)去,
<!--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 tools:replace="android:scheme" android:scheme="${tencentKey}" />
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:configChanges="orientation|keyboardHidden|screenSize"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<!--微信-->
<activity android:name="com.zhengchen.yixinxiangfo.wxapi.WXEntryActivity" android:exported="true" />
4.WXEntryActivity這個(gè)大家也都知道墨状,微信的路徑必備的卫漫,別漏了
public class WXEntryActivity extends MyWXEntryActivity {}
5. 這時(shí)候我們?cè)O(shè)置一個(gè)監(jiān)聽(tīng),因?yàn)槲覀兪跈?quán)成功的時(shí)候會(huì)回調(diào)
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個(gè)方法就是授權(quán)成功肾砂,授權(quán)取消列赎,授權(quán)失敗的回調(diào),也是分享成功,分享失敗的回調(diào)包吝,
1.platform是用于判斷是QQ還是微信還是新浪饼煞,
2.mAuthType是用于判斷是登錄還是分享
3.object是授權(quán)成功返回信息,可以強(qiáng)制轉(zhuǎn)換為QQ的實(shí)體類或者微信的實(shí)體類诗越,
如:
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,"授權(quán)成功"+mQQLogin.getAccess_token(),Toast.LENGTH_SHORT).show();
}else if(mAuthType==AuthType.USERINFO){
QQInfo mQQInfo=(QQInfo)object;
Toast.makeText(this,"授權(quán)成功"+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,"授權(quán)成功"+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,"授權(quán)成功"+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,"授權(quán)取消",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,"授權(quán)失敗",Toast.LENGTH_SHORT).show();
break;
case SHARE:
Toast.makeText(this,"分享失敗",Toast.LENGTH_SHORT).show();
break;
case USERINFO:break;
}
}
6.如何調(diào)用登錄或者分享
首先登錄:
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("標(biāo)題","摘要","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","測(cè)試");
具體看demo比較清晰
7.如果你在demo上要測(cè)試你的項(xiàng)目話砖瞧,只要更改下上面的key值還有在build.gradle的下面圖兩個(gè)箭頭的地方更改成你的包名跟騰訊的key值,注意是“tencent+key”別搞錯(cuò)哦
image.png
github代碼:https://github.com/yanxuwen/share
apk:https://www.pgyer.com/Share
喜歡就在github star下,非常感謝o(∩_∩)o~~~嚷狞,您star下就是我的動(dòng)力块促,
微信公眾號(hào):
qrcode_for_gh_8e99f824c0d6_344.jpg