天天看點

Android中使用ShareSDK功能學習

前言:由于最近做了個項目用到了社會化分享的功能,之前從來沒有碰到過這類功能,然後自己就一邊檢視資料,一邊在項目中加入,慢慢摸索,這邊文章算是自己對ShareSDK的學習筆記,有錯誤的地方,歡迎大家給予提出意見。

一、基本的步驟

一、首先,我們在mob官網上擷取App Key和App Secret。

我就簡略的上傳一些圖了。這邊有一個官方提供的連結大家可以看看–http://bbs.mob.com/forum.php?mod=viewthread&tid=8212&extra=page%3D1

1、在登入,或者注冊填寫完一些基本的資訊之後,點選右上角進入背景。

Android中使用ShareSDK功能學習

2、此時注意,不同SDK背景建立應用的App Key和App Secret是不通用的,請分别建立。

Android中使用ShareSDK功能學習

3、然後就會看到你的App Key和App Secret,這個後面是要使用的。

Android中使用ShareSDK功能學習

4、如圖可以添加應用。

Android中使用ShareSDK功能學習

二、然後下載下傳mob上的Share Sdk,內建到自己的應用中去。

我也是簡略上傳一些圖。這邊也是官網上的連結,大家可以看看–http://wiki.mob.com/Android_%E5%BF%AB%E9%80%9F%E9%9B%86%E6%88%90%E6%8C%87%E5%8D%97/

1、進入下載下傳Android SDK界面,點選下載下傳。

Android中使用ShareSDK功能學習

2、然後下載下傳你想要用的平台,不要用的可以取消勾選。(本人是全部選擇的,因為到時候可以隐藏一些不要用的,但是應用包會變大)。

Android中使用ShareSDK功能學習

3、解壓你下載下傳下來的包,我們會看到一些檔案,可以先看看是哪些,猜測一下有哪些作用。

Android中使用ShareSDK功能學習

特别是這兩個包裡的檔案。

Android中使用ShareSDK功能學習

三、再然後,我們在社會化分享平台上擷取App Key和App Secret。

我們想在其他平台上分享東西,難道不要在其他平台上面做點什麼嗎!?那肯定是要驗證一些東西了,你懂的,我們再做一些必要的準備。

這裡我就介紹騰訊和微信這兩個開發者平台擷取App Key和App Secret。

這裡有個高手的部落格連結大家可以看看–http://www.cnblogs.com/smyhvae/p/4585340.html

1、騰訊開發者平台擷取。http://open.qq.com/

點選移動應用

Android中使用ShareSDK功能學習

建立應用,填寫一些基本的資訊。擷取到App Key和App ID。

2、微信開發者平台擷取。https://open.weixin.qq.com/

建立移動應用,填寫一些基本的資訊,微信上面是需要稽核的,不過很快就能結束。擷取到App ID和App Secret。

二、開始進入代碼階段

一些常用的資訊都擷取結束了,我們來總結一下,主要有mob,qq,微信的App Key和App Secret(App Id)。同樣,其他平台上的分享,也可以參考官網上的資料。

1、打開Android Studio,建立一個項目,開始導入SDK。

這裡建議采用建立Library module的方式來導入SDK。這裡面我們就不用複制jar包的方式了,因為jar包不友善改源碼。建立Library module以及引用library的步驟要是不會,這裡有一個大神的連結部落格,學習一下–http://www.cnblogs.com/smyhvae/p/4392611.html

2、導入SDK

建立一個module形式的第三方library的通用步驟是:

①建立一個library形式的module,删掉這個module中src/main目錄裡面的所有檔案(包括删掉java、res、AndroidManifest.xml)

Android中使用ShareSDK功能學習
Android中使用ShareSDK功能學習

②複制第三方庫的AndroidMainfest.xml、res、src檔案(夾)到庫目錄的src/main目錄中

③将src/main目錄下的src目錄重命名(Shift+F6)為java

我們将上圖中的兩個工程檔案建立為兩個Library module:ShareSDK和OneKeyShare,記得要将下面的這個檔案夾中的東西也要拷到MainLibs這個module的libs檔案夾下:

Android中使用ShareSDK功能學習

然後,需要注意的是,OneKeyShare這個module是依賴于ShareSDK這個module;而app這個module是依賴于OneKeyShare這個module。

Android中使用ShareSDK功能學習
Android中使用ShareSDK功能學習

3、添加應用資訊

先在app這個module(即我們這個項目的module)下建立一個assets檔案夾(即第三方資産目錄),操作如下:

Android中使用ShareSDK功能學習
Android中使用ShareSDK功能學習

然後,我們将上圖中的ShareSDK.xml檔案複制到assets目錄下。

Android中使用ShareSDK功能學習

這裡有一個别人部落格新浪微網誌的例子,我們可以先看一下。

Android中使用ShareSDK功能學習

代碼解釋:

02行:還記得之前說過AppKey有用嗎?這裡就派上用場了,填上去就行了。

08行:需要先事先在新浪微網誌的開發者平台注冊得到AppKey。也就是上面第三段中提到的内容。

12行:如果不想用這個分享平台,可以将其設定為false。 總結: ShareSDK的每一個平台都具備SortId、Id、Enable字段,除此之外的字段(如新浪微網誌的AppKey、AppSecret、RedirectUrl、ShareByAppClient等字段)需要到目标平台上注冊應用以後得到,請正确填寫這些字段的資料,否則ShareSDK無法完成授權,則後續的其它操作也将無法執行。

接着我們以QQ為例,修改其中的代碼。

<ShareSDK 
        AppKey = "androidv1101"/> <!-- 修改成你在sharesdk背景注冊的應用的appkey"-->

    <!-- ShareByAppClient辨別是否使用微部落格戶端分享,預設是false -->
    <SinaWeibo
        Id="1"
        SortId="1"
        AppKey="568898243"
        AppSecret="38a4f8204cc784f81f9f0daaf31e02e3"
        RedirectUrl="http://www.sharesdk.cn"
        ShareByAppClient="true"
        Enable="true" />
        将Enable="false"設為這個,則在使用分享時,不會顯示這個分享子產品。

    <TencentWeibo
        Id="2" 
        SortId="2"
        AppKey="801307650"
        AppSecret="ae36f4ee3946e1cbb98d6965b0b2ff5c"
        RedirectUri="http://sharesdk.cn"
        Enable="true" />

    <QZone
        Id="3"
        SortId="3"
        AppId="100371282"
        AppKey="aed9b0303e3ed1e27bae87c33761161d"
        Enable="true" />
           

首先,填入shared sdk的app key,接着我們填入QQ的id和key。

4、配置AndroidManifest.xml:

(1)添加如下權限:(和application節點并列)

<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.MANAGE_ACCOUNTS"/>
    <uses-permission android:name="android.permission.GET_ACCOUNTS"/>
           

(2)在application節點下注冊下面的Activity:

<activity
            android:name="com.mob.tools.MobUIShell"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:screenOrientation="portrait"
            android:windowSoftInputMode="stateHidden|adjustResize" >
            <intent-filter>
                <data android:scheme="tencent1104646053" />
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.BROWSABLE" />
                <category android:name="android.intent.category.DEFAULT" />
            </intent-filter>
        </activity>
           

注意: MobUIShell的路徑是固定的,一定要在“cn.sharesdk.framework”下,因為它在Share-Core中。之後,需要對上面的代碼進行以下修改:

Android中使用ShareSDK功能學習

上圖中,藍字處需要修改成在騰訊開放平台申請到的AppId。

如果項目內建了微信,還需要添加以下WXEntryActivity,不然的話,mob背景無法做微信的分享統計:(在工程的包下建立wxapi目錄再放置WXEntryActivity)

WXEntryActivity.java的代碼如下:
/*
 * 官網地站:http://www.mob.com
 * 技術支援QQ: 4006852216
 * 官方微信:ShareSDK   (如果釋出新版本的話,我們将會第一時間通過微信将版本更新内容推送給您。如果使用過程中有任何問題,也可以通過微信與我們取得聯系,我們将會在24小時内給予回複)
 *
 * Copyright (c) 2013年 mob.com. All rights reserved.
 */
package com.smyhvae.sharedemo.wxapi;
import android.content.Intent;
import android.widget.Toast;
import cn.sharesdk.wechat.utils.WXAppExtendObject;
import cn.sharesdk.wechat.utils.WXMediaMessage;
import cn.sharesdk.wechat.utils.WechatHandlerActivity;
/** 微信用戶端回調activity示例 */
public class WXEntryActivity extends WechatHandlerActivity {
    /**
     * 處理微信發出的向第三方應用請求app message
     * <p>
     * 在微信用戶端中的聊天頁面有“添加工具”,可以将本應用的圖示添加到其中
     * 此後點選圖示,下面的代碼會被執行。Demo僅僅隻是打開自己而已,但你可
     * 做點其他的事情,包括根本不打開任何頁面
     */
    public void onGetMessageFromWXReq(WXMediaMessage msg) {
        Intent iLaunchMyself = getPackageManager().getLaunchIntentForPackage(getPackageName());
        startActivity(iLaunchMyself);
    }
    /**
     * 處理微信向第三方應用發起的消息
     * <p>
     * 此處用來接收從微信發送過來的消息,比方說本demo在wechatpage裡面分享
     * 應用時可以不分享應用檔案,而分享一段應用的自定義資訊。接受方的微信
     * 用戶端會通過這個方法,将這個資訊發送回接收方手機上的本demo中,當作
     * 回調。
     * <p>
     * 本Demo隻是将資訊展示出來,但你可做點其他的事情,而不僅僅隻是Toast
     */
    public void onShowMessageFromWXReq(WXMediaMessage msg) {
        if (msg != null && msg.mediaObject != null
                && (msg.mediaObject instanceof WXAppExtendObject)) {
            WXAppExtendObject obj = (WXAppExtendObject) msg.mediaObject;
            Toast.makeText(this, obj.extInfo, Toast.LENGTH_SHORT).show();
        }
    }
}
           

同時,在清單檔案中進行聲明:

<!--微信分享回調-->
        <activity
            android:name=".wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar"/>
           

5、添加代碼:

內建ShareSDK至少需要在兩個位置添加代碼,包括:

(1)在項目的入口Activity,在其onCreate方法中插入下面的代碼進行初始化:(這個方法越早調用越好)

ShareSDK.initSDK(this);
           

如果不在所有的ShareSDK的操作之前調用這行代碼,就會抛出空指針異常。

(2)在項目出口Activity的onDestroy方法中第一行插入下面的代碼:

ShareSDK.stopSDK(this);
           

上方這行代碼會結束ShareSDK的統計功能并釋放資源。如果這行代碼沒有被調用,那麼“應用啟動次數”将會不準确,因為應用可能從來沒有被關閉過(注:這一行代碼我還是沒用到,不知道會造成什麼實質性的後果)。

注意:initSDK是可以重複調用的,其實ShareSDK建議在不确定的時候調用這個方法來保證ShareSDK被正确初始化。而stopSDK一旦被調用了,就必須重新調用initSDK才能使用ShareSDK的功能,否則會出現空指針異常。

在代碼中調用此方法,即可打開一鍵分享功能進行分享:
private void showShare() {
 ShareSDK.initSDK(this);
 OnekeyShare oks = new OnekeyShare();
 //關閉sso授權
 oks.disableSSOWhenAuthorize(); 
// 分享時Notification的圖示和文字  2.5.9以後的版本不調用此方法
 //oks.setNotification(R.drawable.ic_launcher, getString(R.string.app_name));
 // title标題,印象筆記、郵箱、資訊、微信、人人網和QQ空間使用
 oks.setTitle(getString(R.string.share));
 // titleUrl是标題的網絡連結,僅在人人網和QQ空間使用
 oks.setTitleUrl("http://sharesdk.cn");
 // text是分享文本,所有平台都需要這個字段
 oks.setText("我是分享文本,啦啦啦~");
 // imagePath是圖檔的本地路徑,Linked-In以外的平台都支援此參數
 oks.setImagePath("/sdcard/test.jpg");//確定SDcard下面存在此張圖檔
 // url僅在微信(包括好友和朋友圈)中使用
 oks.setUrl("http://sharesdk.cn");
 // comment是我對這條分享的評論,僅在人人網和QQ空間使用
 oks.setComment("我是測試評論文本");
 // site是分享此内容的網站名稱,僅在QQ空間使用
 oks.setSite(getString(R.string.app_name));
 // siteUrl是分享此内容的網站位址,僅在QQ空間使用
 oks.setSiteUrl("http://sharesdk.cn");
// 啟動分享GUI
 oks.show(this);
 }
           

上面的這些代碼是官方給的,實際項目中可以放在按鈕的點選事件中,根據需要去填寫。

代碼解釋:

14行:setText是需要分享的文本内容

16行:setImagePath是需要分享的本地圖檔。(如果是在真機當中,需要通過api去拿sd卡的路徑,即Environment.getExternalStorageDirectory()這個api)

6、在onekeyshare這個Module中對分享界面進行略微修改

由于我們使用的是onekeyshare一鍵分享功能,于是分享界面在onekeyshare這個module中已經定制好了,現在可以進行略微的修改:

1、将每行多個分享按鈕改為每行兩個分享按鈕:

Android中使用ShareSDK功能學習

這樣的話,每排就是固定為兩個分享按鈕:

Android中使用ShareSDK功能學習

2、修改分享界面的背景:

可以在下面這個位置加背景:

Android中使用ShareSDK功能學習

上圖中, 添加紅框部分的代碼即可。

注意:

需要注意的是在給QQ好友和QQ群分享資訊時:需要把

oks.setImagePath("/sdcard/test.jpg");//確定SDcard下面存在此張圖檔

去掉或者換成

oks.setImageUrl()

,不然會出現錯誤。