第三方登錄和分享

前言

為什么需要再寫(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
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個(gè)濱河市床未,隨后出現(xiàn)的幾起案子竭翠,更是在濱河造成了極大的恐慌,老刑警劉巖薇搁,帶你破解...
    沈念sama閱讀 217,509評(píng)論 6 504
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件斋扰,死亡現(xiàn)場(chǎng)離奇詭異,居然都是意外死亡啃洋,警方通過(guò)查閱死者的電腦和手機(jī)传货,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 92,806評(píng)論 3 394
  • 文/潘曉璐 我一進(jìn)店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來(lái)宏娄,“玉大人问裕,你說(shuō)我怎么就攤上這事【啵” “怎么了僻澎?”我有些...
    開(kāi)封第一講書(shū)人閱讀 163,875評(píng)論 0 354
  • 文/不壞的土叔 我叫張陵貌踏,是天一觀的道長(zhǎng)十饥。 經(jīng)常有香客問(wèn)我,道長(zhǎng)祖乳,這世上最難降的妖魔是什么逗堵? 我笑而不...
    開(kāi)封第一講書(shū)人閱讀 58,441評(píng)論 1 293
  • 正文 為了忘掉前任,我火速辦了婚禮眷昆,結(jié)果婚禮上蜒秤,老公的妹妹穿的比我還像新娘。我一直安慰自己亚斋,他們只是感情好作媚,可當(dāng)我...
    茶點(diǎn)故事閱讀 67,488評(píng)論 6 392
  • 文/花漫 我一把揭開(kāi)白布。 她就那樣靜靜地躺著帅刊,像睡著了一般纸泡。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發(fā)上赖瞒,一...
    開(kāi)封第一講書(shū)人閱讀 51,365評(píng)論 1 302
  • 那天女揭,我揣著相機(jī)與錄音蚤假,去河邊找鬼。 笑死吧兔,一個(gè)胖子當(dāng)著我的面吹牛磷仰,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播境蔼,決...
    沈念sama閱讀 40,190評(píng)論 3 418
  • 文/蒼蘭香墨 我猛地睜開(kāi)眼灶平,長(zhǎng)吁一口氣:“原來(lái)是場(chǎng)噩夢(mèng)啊……” “哼!你這毒婦竟也來(lái)了欧穴?” 一聲冷哼從身側(cè)響起民逼,我...
    開(kāi)封第一講書(shū)人閱讀 39,062評(píng)論 0 276
  • 序言:老撾萬(wàn)榮一對(duì)情侶失蹤,失蹤者是張志新(化名)和其女友劉穎涮帘,沒(méi)想到半個(gè)月后拼苍,有當(dāng)?shù)厝嗽跇?shù)林里發(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,500評(píng)論 1 314
  • 正文 獨(dú)居荒郊野嶺守林人離奇死亡调缨,尸身上長(zhǎng)有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點(diǎn)故事閱讀 37,706評(píng)論 3 335
  • 正文 我和宋清朗相戀三年疮鲫,在試婚紗的時(shí)候發(fā)現(xiàn)自己被綠了。 大學(xué)時(shí)的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片弦叶。...
    茶點(diǎn)故事閱讀 39,834評(píng)論 1 347
  • 序言:一個(gè)原本活蹦亂跳的男人離奇死亡俊犯,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出伤哺,到底是詐尸還是另有隱情燕侠,我是刑警寧澤,帶...
    沈念sama閱讀 35,559評(píng)論 5 345
  • 正文 年R本政府宣布立莉,位于F島的核電站绢彤,受9級(jí)特大地震影響,放射性物質(zhì)發(fā)生泄漏蜓耻。R本人自食惡果不足惜茫舶,卻給世界環(huán)境...
    茶點(diǎn)故事閱讀 41,167評(píng)論 3 328
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望刹淌。 院中可真熱鬧饶氏,春花似錦、人聲如沸有勾。這莊子的主人今日做“春日...
    開(kāi)封第一講書(shū)人閱讀 31,779評(píng)論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽(yáng)蔼卡。三九已至喊崖,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間,已是汗流浹背贷祈。 一陣腳步聲響...
    開(kāi)封第一講書(shū)人閱讀 32,912評(píng)論 1 269
  • 我被黑心中介騙來(lái)泰國(guó)打工趋急, 沒(méi)想到剛下飛機(jī)就差點(diǎn)兒被人妖公主榨干…… 1. 我叫王不留,地道東北人势誊。 一個(gè)月前我還...
    沈念sama閱讀 47,958評(píng)論 2 370
  • 正文 我出身青樓呜达,卻偏偏與公主長(zhǎng)得像,于是被迫代替她去往敵國(guó)和親粟耻。 傳聞我的和親對(duì)象是個(gè)殘疾皇子查近,可洞房花燭夜當(dāng)晚...
    茶點(diǎn)故事閱讀 44,779評(píng)論 2 354