Android集成最新ShareSDK V3.1.0第三方分享爬坑總結(jié)

一、前言

最近做了個(gè)項(xiàng)目,需要集成分享功能,距離上一個(gè)項(xiàng)目集成分享功能不到兩個(gè)月,原以為分分鐘可以搞定的事情,但是卻花費(fèi)了大半天功夫(簡(jiǎn)直就是浪費(fèi)生命啊......),集成過程還是遇到了一些坑,導(dǎo)致浪費(fèi)了一些不必要的時(shí)間,所以,有的時(shí)候?qū)W過、用過的東西還是得記錄總結(jié)一下,便于以后遇到類似問題時(shí)快速解決,提高效率。

二、爬坑

具體步驟參考官網(wǎng)的ShareSDK官方快速集成文檔 V3.x,這里只說一些注意事項(xiàng):

第一步、獲取ShareSDK;

第二步:導(dǎo)入ShareSDK;

這一步比較簡(jiǎn)單,只說一下ShareSDK.xml需要注意的一些小點(diǎn),AppId和AppSecret替換成自己申請(qǐng)的, BypassApproval設(shè)置為"false",即不繞過審核,這樣才能正確的分享,如果為true,分享出去的圖片就是一個(gè)文件。只要是正式環(huán)境分享,BypassApproval的值都應(yīng)該為false。

 <Wechat
        Id="4"
        SortId="1"
        AppId="xxx"
        AppSecret="xxx"
        userName="gh_afb25ac019c9"
        path="pages/index/index.html?id=1"
        BypassApproval="false"
        Enable="true" />

第三步:配置Android Manifest.xml;

3.1 官方的文檔上少了一個(gè)讀SD卡的權(quán)限,需要自己加一下,該權(quán)限應(yīng)該是用來讀取手機(jī)中是否安裝了分享的App(QQ、微信等),而且如果是6.0+的系統(tǒng)需要?jiǎng)討B(tài)申請(qǐng)?jiān)摍?quán)限:

    <uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

3.2 Application配置,官方給出了說明,但是不太好找,所以我也把它匯總進(jìn)來:

Application配置.png

其他的基本上參照上面給的官方文檔來就行了,我們項(xiàng)目中只集成了微信好友、微信朋友圈、QQ好友、QQ空間,我貼一下我們項(xiàng)目中的集成ShareSDK的Android Manifest.xml部分:

<uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/>
<uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/>
<uses-permission android:name="android.permission.GET_TASKS" />
<uses-permission android:name="android.permission.INTERNET" />
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<uses-permission android:name="android.permission.CHANGE_WIFI_STATE" />
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<uses-permission android:name="android.permission.SYSTEM_ALERT_WINDOW" />
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />

    <application
        android:name=".App"
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">

       <!-- 微信分享回調(diào) -->
        <activity
            android:name=".wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
        <activity
            android:name="cn.sharesdk.tencent.qq.ReceiveActivity"
            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 android:scheme="tencentxxx" />
            </intent-filter>
        </activity>

        <meta-data
            android:name="Mob-AppKey"
            android:value="xxx" />
        <meta-data
            android:name="Mob-AppSecret"
            android:value="xxx" />
        <!-- ShareSdk  end -->

3.3 其中有3項(xiàng)需要替換的地方,“xxx”替換成自己應(yīng)用的相關(guān)key即可,注意第一個(gè)一定要保留
“tencent”前綴:

    <data android:scheme="tencentxxx" />
       <meta-data
            android:name="Mob-AppKey"
            android:value="xxx" />
        <meta-data
            android:name="Mob-AppSecret"
            android:value="xxx" />

至此,Android Manifest.xml部分配置完成。

第四步:添加分享代碼;

 private void showShare() {

        OnekeyShare oks = new OnekeyShare();
        //關(guān)閉sso授權(quán)
        oks.disableSSOWhenAuthorize();
        // 分享時(shí)Notification的圖標(biāo)和文字  2.5.9以后的版本不     調(diào)用此方法
        //oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name));
        // title標(biāo)題,印象筆記、郵箱、信息、微信、人人網(wǎng)和QQ空間使用
        oks.setTitle(getString(R.string.app_name));
        // titleUrl是標(biāo)題的網(wǎng)絡(luò)鏈接,僅在人人網(wǎng)和QQ空間使用
        oks.setTitleUrl("www.qq.com");
        // text是分享文本,所有平臺(tái)都需要這個(gè)字段
        oks.setText("Text文本內(nèi)容 www.qq.com");
        // imagePath是圖片地址,Linked-In以外的平臺(tái)都支持此參數(shù)
        // 如果不用本地圖片,千萬不要調(diào)用這個(gè)方法?。?!
//        oks.setImagePath("http://f1.sharesdk.cn/imgs/2014/02/26/owWpLZo_638x960.jpg");
        oks.setImageUrl("http://f1.sharesdk.cn/imgs/2014/02/26/owWpLZo_638x960.jpg");
        // url僅在微信(包括好友和朋友圈)中使用
        oks.setUrl("www.qq.com");
        // comment是我對(duì)這條分享的評(píng)論,僅在人人網(wǎng)和QQ空間使用
        oks.setComment("我是測(cè)試評(píng)論文本");
        // site是分享此內(nèi)容的網(wǎng)站名稱,僅在QQ空間使用
        oks.setSite(getString(R.string.app_name));
        // siteUrl是分享此內(nèi)容的網(wǎng)站地址,僅在QQ空間使用
        oks.setSiteUrl("www.qq.com");
        oks.setCallback(new PlatformActionListener() {
            @Override
            public void onComplete(Platform platform, int i, HashMap<String, Object> hashMap) {
                KLog.i("share onComplete...");
            }

            @Override
            public void onError(Platform platform, int i, Throwable throwable) {
                KLog.i("share onError..." + throwable);
            }

            @Override
            public void onCancel(Platform platform, int i) {
                KLog.i("share onCancel...");
            }
        });
        // 啟動(dòng)分享GUI
        oks.show(getActivity());
    }

4.1 其中有一個(gè)坑是尤其需要注意的,就是這行代碼:

// 如果不用本地圖片,千萬不要調(diào)用這個(gè)方法?。?!
  oks.setImagePath("http://f1.sharesdk.cn/imgs/2014/02/26/owWpLZo_638x960.jpg");

分享到QQ好友的時(shí)候,如果你的圖片不是本地圖片,千萬不要調(diào)用這個(gè)方法?。?!
分享到QQ好友的時(shí)候,如果你的圖片不是本地圖片,千萬不要調(diào)用這個(gè)方法?。?!
分享到QQ好友的時(shí)候,如果你的圖片不是本地圖片,千萬不要調(diào)用這個(gè)方法!?。?br> 否則分享失敗,這是我這次分享遇到的最大的坑,其他分享加上這行代碼沒有問題,分享到QQ好友死活不行,最后把這行代碼注釋掉之后終于成功了,心中頓時(shí)一萬頭草泥馬奔騰而過......

4.2 涉及到URL相關(guān)的時(shí)候,最好先用正規(guī)的鏈接測(cè)試,因?yàn)槟愕逆溄尤绻悄莻€(gè)平臺(tái)的黑名單也是會(huì)分享失敗的,確保分享功能正常之后,再替換回自己的鏈接進(jìn)行測(cè)試。比如

        oks.setTitleUrl("www.qq.com");

4.3 微信分享一定要打簽名包才能成功;
4.4 不時(shí)清空數(shù)據(jù)。 親測(cè):如果微信開發(fā)者平臺(tái)的簽名做了修改,可能需要清空微信數(shù)據(jù)或者卸載重裝才能分享成功,就問你怕不怕?所以還是先備份好數(shù)據(jù)吧。

4.5 多準(zhǔn)備兩臺(tái)手機(jī)測(cè)試,為什么這么說呢?
由于在這個(gè)項(xiàng)目中我只負(fù)責(zé)把分享功能調(diào)通,具體的分享內(nèi)容是其他童鞋負(fù)責(zé),其中有一個(gè)童鞋在使用我寫的分享功能分享到QQ好友的時(shí)候,死活不成功,分享出來的內(nèi)容各種不對(duì)勁,但是另外一個(gè)童鞋是已經(jīng)成功了的,所以我相信代碼應(yīng)該是ok的,然后我讓他自己調(diào)試一下,各種debug、打log無果之后,我讓他換臺(tái)手機(jī),最終終于成功了!我問他怎么成功的,他說新手機(jī)裝了手機(jī)QQ,舊手機(jī)沒裝。。。。。。。。那一刻,我噴了滿屏鮮血,感覺整個(gè)身體被掏空,我終于體會(huì)到了:不怕神一樣的對(duì)手,就怕沒裝手機(jī)QQ的隊(duì)友還要強(qiáng)行分享到QQ好友!

第五步:完成;

三、后記

總的來說,使用ShareSDK實(shí)現(xiàn)第三方分享還是比較簡(jiǎn)單的,只是有些小坑需要我們注意一下,就能順利集成。有問題歡迎留言反饋,最后附上官方爬坑指南,希望老司機(jī)早日脫坑。

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

  • Android 自定義View的各種姿勢(shì)1 Activity的顯示之ViewRootImpl詳解 Activity...
    passiontim閱讀 178,724評(píng)論 25 709
  • 以前老是看到別人說要多整理,以前我不以為然,覺得我會(huì)用就行了,干嘛還要整理,繼前兩天有時(shí)間整理了第一篇之后,才...
    起個(gè)牛逼的昵稱閱讀 11,077評(píng)論 23 76
  • 發(fā)現(xiàn) 關(guān)注 消息 iOS 第三方庫(kù)、插件、知名博客總結(jié) 作者大灰狼的小綿羊哥哥關(guān)注 2017.06.26 09:4...
    肇東周閱讀 15,026評(píng)論 4 61
  • 曾經(jīng)彼此相愛,分手,久了,就習(xí)慣了。 我努力愛你,卻得不到你的心。 我知道我又傻又笨,但我希望你不嫌棄。 我漸漸學(xué)...
    陳祺閱讀 401評(píng)論 0 2
  • 如今隨著BIM的告訴發(fā)展,人們對(duì)于BIM的認(rèn)知在逐漸的提高,BIM技術(shù)似乎也正以勢(shì)不可擋的趨勢(shì)逐漸改變著人們的傳統(tǒng)...
    寂靜著地閱讀 202評(píng)論 0 0

友情鏈接更多精彩內(nèi)容