關于 react-native 中集成友盟(umeng)第三方登錄后取消授權(quán)的解決方案(Android)

前段時間自己試著用react-native寫一個小應用窥岩,對于我這個半路出家的前端,而且對Android也是一竅不通宏胯,踩過的坑不知道有多少谜酒。好在網(wǎng)上有很多前輩總結(jié)的經(jīng)驗,才讓我勉勉強強堅持下來芦鳍。好了嚷往,切入主題,說多了都是淚柠衅。


來一波雞血

友盟(umeng)分享組件在app開發(fā)中應該是用的比較多的一套組件了皮仁,我也是通過在網(wǎng)上各種研究后才決定用他作為第三方登錄和分享,在react-native中想要集成友盟也是一件比較麻煩的事情菲宴,特別是對于沒有接觸過原生開發(fā)的同學贷祈。在這里要感謝 react native集成友盟登錄分享記錄1.0.0 這篇文章,不會的也可以看著友盟的官方文檔一步一步配置喝峦,只是官方文檔比較雜散势誊,但是能保證版本的同步。有時間我再把自己集成的過程貼出來谣蠢。

這次要說的是友盟的第三方登錄這一塊粟耻,比如說使用QQ登錄,默認情況下眉踱,當?shù)谝淮问跈?quán)的時候挤忙,會跳轉(zhuǎn)到授權(quán)界面,用戶可以選擇想要授權(quán)賬號等谈喳,授權(quán)成功后册烈,友盟會自己記錄一個授權(quán)狀態(tài)并生成一個refreshToken,在有效期內(nèi)當我們重新點擊QQ登錄時,你會發(fā)現(xiàn)不會和第一次一樣彈出授權(quán)選擇界面婿禽,而是直接使用上次授權(quán)的賬號直接獲取了授權(quán)信息赏僧。在有些情況下,這是可行的谈宛,但是仔細一想次哈,似乎又有點問題胎署。

授權(quán)界面

一般的APP一般都有登錄和退出賬號吆录,假如我登錄后想要用另一個QQ賬號登錄(假裝有小號),如果按照友盟默認的行為琼牧,那么我退出登錄后再次點擊使用QQ登錄時恢筝,就不會出現(xiàn)授權(quán)界面,也就無法更換QQ賬號登錄巨坊,這肯定是不行的撬槽。

關鍵的地方來了,官方并沒有給出react-native的配置選項趾撵,網(wǎng)上找了一大圈都是原生的侄柔,作為小白根本不知道是改哪個地方共啃,而且原生的友盟SDK和 react-native的差別比較大,為了解決這事也是絞盡腦汁暂题,最后終于探索出來移剪,當然會原生的就不要笑話我了。

解決方法:

1薪者、找到如圖所示文件shareModule.java(即之前在友盟下載的分享組價包纵苛,我使用的是6.9.3版本),文件目錄根據(jù)自己的包來言津。

文件所在目錄

2攻人、在shareModule.java文件中查找 auth,會有一個auth的函數(shù)悬槽,如下

    @ReactMethod   //注意觀察這里怀吻,這里聲明是一個react方法
    public void auth(final int  sharemedia, final Callback successCallback){
        runOnMainThread(new Runnable() {
            @Override
            public void run() {
                UMShareAPI.get(ma).getPlatformInfo(ma, getShareMedia(sharemedia), new UMAuthListener() {
                    @Override
                    public void onStart(SHARE_MEDIA share_media) {

                    }
                    @Override
                    public void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> map) {
                        WritableMap result = Arguments.createMap();
                        for (String key:map.keySet()){
                            result.putString(key,map.get(key));
                            Log.e("todoremove","key="+key+"   value"+map.get(key).toString());
                        }
                        successCallback.invoke(0,result,"success");
                    }
                    @Override
                    public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {
                        WritableMap result = Arguments.createMap();
                        successCallback.invoke(1,result,throwable.getMessage());
                    }
                    @Override
                    public void onCancel(SHARE_MEDIA share_media, int i) {
                        WritableMap result = Arguments.createMap();
                        successCallback.invoke(2,result,"cancel");
                    }
                });
            }
        });
    }

這個函數(shù)的作用不知道大家看明白的沒有,是不是感覺在哪見過陷谱?沒錯烙博,這就是我們的授權(quán)函數(shù),在react-native中我們會用到它烟逊,比如我要發(fā)起登錄授權(quán)的時候:

import ShareUtile from '../../utils/ShareUtil'

//   當我點擊登錄按鈕時,logintype為選擇的登錄方式渣窜,比如QQ登錄為 1
async userLogin(logintype) {
        //  登錄
        //  此處調(diào)用的就是上面提到的 auth 方法
        ShareUtile.auth(logintype, async (code, result, message) => {
            console.log(code)
            console.log(result)
            console.log(message)
            if (code == 0) {
                result.logintype = logintype;
                //   下面是你自己的登錄邏輯
                try {
                    let res = await Api.users.login(result);
                    console.log(res)
                } catch (err) {
                    console.log(err)
                }
            }
        });
    }

這樣一來,我們就會想能不能自己添加一個方法宪躯,然后每次點擊登錄的時候先取消授權(quán)乔宿,再進行登錄呢,答案是肯定的访雪,怎么添加详瑞,其實友盟提供了一個刪除授權(quán)的函數(shù)deleteOauth(),參數(shù)和授權(quán)時的一樣,具體代碼看下面:

3臣缀、在shareModule.java中添加一個取消授權(quán)函數(shù)deleteOauth()坝橡,可以緊跟在auth()函數(shù)下面

// umeng取消登錄授權(quán)
    @ReactMethod
    public void deleteOauth(final int sharemedia,final Callback successCallback) {

        UMShareAPI.get(ma).deleteOauth(ma, getShareMedia(sharemedia), new UMAuthListener() {
            @Override
            public void onStart(SHARE_MEDIA share_media) {
                //開始取消授權(quán)
            }

            @Override
            public void onComplete(SHARE_MEDIA share_media, int i, Map<String, String> map) {
                //取消授權(quán)成功 i=1
                successCallback.invoke(0,"success");
            }

            @Override
            public void onError(SHARE_MEDIA share_media, int i, Throwable throwable) {
                //取消授權(quán)出錯
                successCallback.invoke(1,"error");
            }

            @Override
            public void onCancel(SHARE_MEDIA share_media, int i) {
                //取消
                successCallback.invoke(0,"cancel");
            }
        });
    }

注意:successCallback 為回調(diào),這里我回調(diào)函數(shù)只保留了兩個參數(shù)精置,在react-native中調(diào)用的時候回調(diào)也只有兩個參數(shù)计寇,可根據(jù)自己習慣設置回調(diào)參數(shù)。

4脂倦、然后回到我們的登錄頁面進行登錄操作:

async userLogin(logintype) {
        // 登錄
        //  先執(zhí)行我們自己設置的取消授權(quán)操作番宁,然后在回調(diào)中再進行授權(quán)操作
        ShareUtile.deleteOauth(logintype,async (code,message) => {
            console.log(code)
            console.log(message)
            //  這里我沒有做取消授權(quán)是否成功的判斷,然后發(fā)起之前的授權(quán)操作
            ShareUtile.auth(logintype, async (code, result, message) => {
                console.log(code)
                console.log(result)
                console.log(message)
                if (code == 0) {
                    result.logintype = logintype;
                    try {
                        let res = await Api.users.login(result);
                        console.log(res)
                    } catch (err) {
                        console.log(err)
                    }
                }
            });
        })
  }

好了赖阻,大功告成蝶押,這樣,每次我們需要重新登錄的時候就會彈出授權(quán)界面火欧,用戶可以選擇自己想要的賬號進行登錄棋电,其實找到地方之后不難茎截,關鍵是對于我們這種原生小白不知道從何下手,希望分享出來能幫助有需要的同學吧赶盔。畢竟我找了好久沒有找到合適的稼虎,祝大家學習愉快。

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末招刨,一起剝皮案震驚了整個濱河市霎俩,隨后出現(xiàn)的幾起案子,更是在濱河造成了極大的恐慌沉眶,老刑警劉巖打却,帶你破解...
    沈念sama閱讀 219,589評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件,死亡現(xiàn)場離奇詭異谎倔,居然都是意外死亡柳击,警方通過查閱死者的電腦和手機,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,615評論 3 396
  • 文/潘曉璐 我一進店門片习,熙熙樓的掌柜王于貴愁眉苦臉地迎上來捌肴,“玉大人,你說我怎么就攤上這事藕咏∽粗” “怎么了?”我有些...
    開封第一講書人閱讀 165,933評論 0 356
  • 文/不壞的土叔 我叫張陵孽查,是天一觀的道長饥悴。 經(jīng)常有香客問我,道長盲再,這世上最難降的妖魔是什么西设? 我笑而不...
    開封第一講書人閱讀 58,976評論 1 295
  • 正文 為了忘掉前任,我火速辦了婚禮答朋,結(jié)果婚禮上贷揽,老公的妹妹穿的比我還像新娘。我一直安慰自己梦碗,他們只是感情好禽绪,可當我...
    茶點故事閱讀 67,999評論 6 393
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著叉弦,像睡著了一般丐一。 火紅的嫁衣襯著肌膚如雪藻糖。 梳的紋絲不亂的頭發(fā)上淹冰,一...
    開封第一講書人閱讀 51,775評論 1 307
  • 那天,我揣著相機與錄音巨柒,去河邊找鬼樱拴。 笑死柠衍,一個胖子當著我的面吹牛,可吹牛的內(nèi)容都是我干的晶乔。 我是一名探鬼主播珍坊,決...
    沈念sama閱讀 40,474評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼正罢!你這毒婦竟也來了阵漏?” 一聲冷哼從身側(cè)響起,我...
    開封第一講書人閱讀 39,359評論 0 276
  • 序言:老撾萬榮一對情侶失蹤翻具,失蹤者是張志新(化名)和其女友劉穎履怯,沒想到半個月后,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體裆泳,經(jīng)...
    沈念sama閱讀 45,854評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡叹洲,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 38,007評論 3 338
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發(fā)現(xiàn)自己被綠了工禾。 大學時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片运提。...
    茶點故事閱讀 40,146評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖闻葵,靈堂內(nèi)的尸體忽然破棺而出民泵,到底是詐尸還是另有隱情,我是刑警寧澤槽畔,帶...
    沈念sama閱讀 35,826評論 5 346
  • 正文 年R本政府宣布洪灯,位于F島的核電站,受9級特大地震影響竟痰,放射性物質(zhì)發(fā)生泄漏签钩。R本人自食惡果不足惜,卻給世界環(huán)境...
    茶點故事閱讀 41,484評論 3 331
  • 文/蒙蒙 一坏快、第九天 我趴在偏房一處隱蔽的房頂上張望铅檩。 院中可真熱鬧,春花似錦莽鸿、人聲如沸昧旨。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,029評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽兔沃。三九已至,卻和暖如春级及,著一層夾襖步出監(jiān)牢的瞬間乒疏,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 33,153評論 1 272
  • 我被黑心中介騙來泰國打工饮焦, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留怕吴,地道東北人窍侧。 一個月前我還...
    沈念sama閱讀 48,420評論 3 373
  • 正文 我出身青樓,卻偏偏與公主長得像转绷,于是被迫代替她去往敵國和親伟件。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 45,107評論 2 356

推薦閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 172,190評論 25 707
  • 用兩張圖告訴你议经,為什么你的 App 會卡頓? - Android - 掘金 Cover 有什么料斧账? 從這篇文章中你...
    hw1212閱讀 12,734評論 2 59
  • 4.1創(chuàng)建leadership數(shù)據(jù)框 Q:stringsAsFactors什么意思? 4.2創(chuàng)建新變量 變量名<-...
    小磨人人人人精閱讀 1,175評論 0 0
  • 兒今奉令守衛(wèi)石牌要塞 胡璉寫給父親和妻子 1943年5月27日 父親: ...
    黎景陽閱讀 5,296評論 0 0
  • 很多年前,我爸問我煞肾,長大之后想做什么其骄? 那時候沒心沒肺 無憂無慮 只覺得躺在爸爸懷里 聽他講那些我百聽不厭的故事 ...
    葉落瀟瀟夢閱讀 217評論 0 0