Anroid開發:友盟分享SDK v5使用指南(Android Studio)

友盟UMeng社會化分享SDK v5.0做出了巨大的改變,精簡了接口調用的代碼,結構更加清晰。但是官方文檔不是很完整,並且多出了授權部分的說明,所以僅需要分享功能的開發者需要看很多無用說明,這裏把分享功能的使用進行整理,並把官方文檔中沒有填的坑暴露出來,以幫助後來開發者。可以先看本文目錄在進行整體閱讀。

申請APP_KEY

登錄友盟,打開http://www.umeng.com/apps/new,添加應用,填寫信息,然後得到了一個友盟的app_key.

申請所需分享平臺的Appkey,比如QQ,微信,微博

本文所例舉的平臺只包括QQ,QZone,微信,朋友圈,微博5個平臺,更多平臺說明請訪問友盟官方文檔

地址如下:

(其他的開放平臺請自行搜索)

umeng友盟分享SDK文件介紹

下載umeng分享SDK:http://dev.umeng.com/social/android/sdk-download
解壓目錄結構如下:

  1. main:存放了必須使用的jar包和res文件
  2. platforms:存放了各個平臺必須用到的jar包和res文件
  3. social_sdk_example:UMeng友盟分享/授權demo源碼
  4. social_sdk_library_project:Eclipse中使用的依賴工程,Android Studio中我沒有用到這個工程作爲依賴,於是踩坑!!!
  5. debug.keystore:demo的簽名文件
  6. umeng_android_socialize_demo.apk:demo的apk
  7. v5.0_api.md:api說明文檔

social_sdk_library_project等下會用到

文件使用說明:

  • 將main下的兩個jar包放入工程libs

  • 將platforms中所需分享平臺的jar包和.so目錄放入工程libs

    其中sina微博有用到.so類庫,請連同.so的目錄一同拷貝進libs,而不僅僅是拷貝.so文件,如果你的工程中有同名目錄,僅僅拷貝.so也是可以的。

Android Studio添加依賴

添加jar包依賴

compile files('libs/umeng_social_sdk.jar')
compile files('libs/httpmime-4.1.3.jar')
compile files('libs/SocialSDK_QQZone_3.jar')
compile files('libs/SocialSDK_WeiXin_1.jar')
compile files('libs/SocialSDK_WeiXin_2.jar')
compile files('libs/mta-sdk-1.6.2.jar')
compile files('libs/open_sdk_r5509.jar')
compile files('libs/SocialSDK_Sina.jar')
compile files('libs/weiboSDKCore_3.1.4.jar')

其他平臺請自行添加jar包和依賴。

添加so依賴

android{

    sourceSets {
        main {
            jniLibs.srcDirs = ['libs']//就是你存放so文件夾的不同cup目錄地址
        }
    }

}

Android Studio中AndroidManifest清單配置

  • 添加使用權限:
 <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />

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

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

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

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

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

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

    <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.SET_DEBUG_APP" />

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

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

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

    <uses-permission android:name="android.permission.MANAGE_ACCOUNTS"/>
  • 添加Activity及其他數據

1.添加友盟的Activity和APP_KEY/APP_ID

<activity           
           android:name="com.umeng.socialize.editorpage.ShareActivity"
           android:theme="@style/Theme.UMDefault"
           android:excludeFromRecents="true"/>
<meta-data
           android:name="UMENG_APPKEY"
           android:value="4eaee02c527015373b000003" ><!--替換爲自己的友盟key-->
</meta-data>

以上Theme.UMDefault其實就是:Theme.NoTitleBar

2.添加微信分享需要的Activity

<activity
            android:name="your_package_name.wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:launchMode="singleTop"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" >
</activity>

your_ package_name即你的應用包名,你必須新建一個wxapi的包,並新建WXEntryActivity這個類,可繼承Activity或其他Activity,UMeng建議繼承WXCallbackActivity,並整個類留空即可。

3.添加QQ,QZone分享需要的Activity

<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 android:scheme="tencent100424468" /><!--TODO 修改爲自己的key-->                
        </intent-filter>
</activity>
<activity
        android:name="com.tencent.connect.common.AssistActivity"
        android:screenOrientation="portrait"
        android:theme="@android:style/Theme.Translucent.NoTitleBar" />

4.添加微博分享需要的Activity

 <activity
        android:name="your_package_name.activity.WBShareActivity"
        android:configChanges="keyboardHidden|orientation"
        android:screenOrientation="portrait" >
        <intent-filter>
            <action android:name="com.sina.weibo.sdk.action.ACTION_SDK_REQ_ACTIVITY" />
            <category android:name="android.intent.category.DEFAULT" />
        </intent-filter>
 </activity>

  <activity
        android:name="com.sina.weibo.sdk.component.WeiboSdkBrowser"
        android:configChanges="keyboardHidden|orientation"
        android:windowSoftInputMode="adjustResize"
        android:exported="false" >
   </activity>
        <!--in weibosdkcore_3.0.1.jar and before:xiong_it。微博SDK V3.1以後,剔除了這個Service,不用添加,否則報紅色,並且無法消除-->
        <!--<service android:name="com.sina.weibo.sdk.net.DownloadService"
            android:exported="false">
        </service>-->

微博SDK V3.1以後,剔除了com.sina.weibo.sdk.net.DownloadService 這個類,所以儘管UMeng分享SDK V5給的demo中有這個service,它也是報紅色警告的,不用添加即可。
需新建一個WBShareActivity在任意包下,友盟建議繼承WBShareCallBackActivity

截至現在,清單文件配置完畢,清單裏只剩下修改QQ的key而已。其實,QQ的key無需修改也可正常分享。

初始化各分享平臺設置

友盟建議在自定義的Application中進行平臺配置的初始化,初始化代碼如下:

PlatformConfig.setWeixin("wx967daebe835fbeac", "5bb696d9ccd75a38c8a0bfe0675559b3");//微信 appid appsecret

PlatformConfig.setSinaWeibo("3921700954","04b48b094faeb16683c32669824ebdad");//新浪微博 appkey appsecret

PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba"); // QQ和Qzone appid appkey

開始愉快的進行分享了

1.使用友盟集成的分享面板:

不用自己寫分享彈出的面板及佈局

final SHARE_MEDIA[] displaylist = new SHARE_MEDIA[]
                    {
                        SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE,SHARE_MEDIA.SINA,
                        SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE
                    };
ShareAction action = new ShareAction(mActivity);
action.setDisplayList(displaylist);
action.withTitle("分享標題");
action.withText("分享文本內容");
action.withTargetUrl("http://blog.xiongit.com");//點擊分享內容打開的鏈接
action.withMedia(UMImage);//附帶的圖片,音樂,視頻等多媒體對象
action.setShareboardclickCallback(mShareBoardlistener);//設置友盟集成的分享面板的點擊監聽回調
action.open();//打開集成的分享面板

/**
 * 友盟分享面板PopupWindow監聽器
 */
private ShareBoardlistener mShareBoardlistener = new ShareBoardlistener() {

    @Override
    public void onclick(SnsPlatform snsPlatform, SHARE_MEDIA share_media) {
        ShareAction shareAction = new ShareAction(mActivity);
        shareAction.setPlatform(share_media);
        shareAction..setCallback(mUmShareListener);//設置每個平臺的點擊事件
        shareAction.withTitle("分享標題");
        shareAction.withText("分享文本內容");
        shareAction.withTargetUrl("http://blog.xiongit.com");//點擊分享內容打開的鏈接
        shareAction.withMedia(UMImage);//附帶的圖片,音樂,視頻等多媒體對象
        shareAction.share();//發起分享,調起微信,QQ,微博客戶端進行分享。
    }
};
// title在微博中無用,text在朋友圈中無用。但是加上也不影響分享。

/**
 * 友盟分享後事件監聽器
 */
private UMShareListener mUmShareListener = new UMShareListener() {

    @Override
    public void onResult(SHARE_MEDIA platform) {
        mTempActivity = null;
        // TODO 分享成功
    }

    @Override
    public void onError(SHARE_MEDIA platform, Throwable t) {
        mTempActivity = null;
        // TODO 分享失敗
    }

    @Override
    public void onCancel(SHARE_MEDIA platform) {
        mTempActivity = null;
        // TODO 分享取消
    }
};

2.使用自己的分享面板:

可以使用PopupWindow或者Dialog,裏面放置你需要分享的平臺圖標及描述,對圖標進行點擊監聽,點擊後,使用友盟進行分享.現在假如點擊的是微博圖標。示例代碼如下:

ShareAction action = new ShareAction(mActivity);
action.setPlatform(SHARE_MEDIA.SINA)
action.withTitle("分享標題");//標題在微博中無用,可不用寫
action.withText("分享文本內容");。
action.withTargetUrl("http://blog.xiongit.com");//點擊分享內容打開的鏈接
action.withMedia(UMImage);//附帶的圖片,音樂,視頻等多媒體對象
action.setCallback(mUmShareListener)//設置友盟分享後狀態監聽
action..share();//發起分享,調起微信,QQ,微博客戶端進行分享。

/**
 * 友盟分享後事件監聽器
 */
private UMShareListener mUmShareListener = new UMShareListener() {

    @Override
    public void onResult(SHARE_MEDIA platform) {
        mTempActivity = null;
        // TODO 分享成功
    }

    @Override
    public void onError(SHARE_MEDIA platform, Throwable t) {
        mTempActivity = null;
        // TODO 分享失敗
    }

    @Override
    public void onCancel(SHARE_MEDIA platform) {
        mTempActivity = null;
        // TODO 分享取消
    }
};

最後,對分享所在Activity的onActivityResult()重寫,無論是使用集成面板還是自定義面板都需要重寫

@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    UMShareAPI.get( this ).onActivityResult( requestCode, resultCode, data);
}

咦,一點擊分享就崩潰了???

到此爲止,代碼看似沒有任何報錯,但是一點擊分享,就崩了!!並且log爲:

這裏寫代碼片

java.lang.RuntimeException: 獲取資源ID失敗:(packageName=包名 type=drawable name=umeng_socialize_tx_on

java.lang.RuntimeException: 獲取資源ID失敗:(packageName=包名 type=layout name=umeng_socialize_shareboard_item

log顯示缺少umeng_socialize_tx_on這個drawable,
log指示,com.umeng.socialize.common.ResContainer.getResourceId()報錯
缺少layout類型的資源文件,文件名稱爲:umeng_socialize_shareboard_item,於是我就納了悶了,怎麼會缺少文件呢?最後在social_sdk_library_project中找到了這個文件,放在自己工程中,結果又報了無數錯誤,格式通通如下:

java.lang.RuntimeException: 獲取資源ID失敗:(packageName=包名 type=?
name=umeng_socialize_xxx

解決辦法就是在最後在social_sdk_library_project中找到了對應文件,然後拷貝到工程即可。
大概拷貝十幾個文件就行。
終極解決辦法就是在Android Studio中添加social_sdk_library_project項目依賴。具體方法請參考:http://rocko.xyz/2014/12/13/Android-Studio-jar%E3%80%81so%E3%80%81library%E9%A1%B9%E7%9B%AE%E4%BE%9D%E8%B5%96/

本文原創作者xiong_it,本文鏈接:http://blog.csdn.net/Xiong_IT/article/details/50956025

結束了?

友盟分享講到這裏就結束了,代碼混淆部分友盟官網給了相關介紹。但是很想吐槽下各個開放平臺對待Android開發者的糟糕態度,API文檔更新不及時,甚至有的平臺都沒有API文檔,SDK使用文檔說明不清晰,demo源碼髒亂差。反觀對iOS開發者的態度,文檔更新夠快,Demo源碼稍好,demo功能全。現在許多Android開發者都使用了AS作爲開發工具,可是很多平臺的說明文檔還是以eclipse爲基準,希望這些在以後有所改觀。

發佈了69 篇原創文章 · 獲贊 251 · 訪問量 49萬+
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章