友盟官方文檔

#  產品概述
關於分享和受權的sdk接口,咱們在v4.4.0作出了巨大的改變,精簡了接口調用的代碼。並將分享受權,與評論等功能作出了隔離,使結構更加清晰。因此本版本的功能也只有分享與受權並沒有其餘功能,請開發者注意。

注意:本文示例代碼只有分享與受權功能,並對接口進行了調整,如須要原功能的開發者,請繼續使用v4.3.0版本。

# 獲取友盟Appkey
若是你以前已經在友盟註冊了應用,並獲取到了Appkey,能夠繼續使用它.

若是你還沒有在友盟註冊開發者帳號,須要先註冊,註冊以後登陸你的帳號,點擊添加新應用,填寫完應用基本信息後,將進入"下載SDK並添加代碼"頁面,此頁面便可獲得Appkey。


#  下載並安裝SDK
* 下載[SDK最新版](http://dev.umeng.com/social/android/sdk-download)
* 添加代碼和資源引用,咱們提供了兩種方式,能夠根據需求選擇
 
    A.解壓SDK壓縮包,將文件夾中的social_sdk_library_project文件夾導入Eclipse,並在您的工程中添加對此項目的引用便可。
   
    B.解壓SDK壓縮包,將文件夾中的'main/libs'和'main/res'文件夾複製到你的項目工程根目錄下(如使用'ADT 17'如下用戶須要手動添加'libs'下的jar文件到工程Path中),同時將須要添加的對應平臺(platform文件夾下)的jar包和res文件放到你的工程目錄下

* AndroidManifest配置

其中增長一個activity

`  <activity           android:name="com.umeng.socialize.editorpage.ShareActivity"
android:theme="@style/Theme.UMDefault"
android:excludeFromRecents="true"
            />`  
            設置友盟appid
           
 ` <meta-data
android:name="UMENG_APPKEY"
android:value="4eaee02c527015373b000003" >
</meta-data>`
       
   增長權限
       
`  <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
            android:name="com.umeng.example.wxapi.WXEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />`
       
人人網

`<activity
            android:name="com.renn.rennsdk.oauth.OAuthActivity"
            android:configChanges="orientation|navigation|keyboardHidden" />`

騰訊

` <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" />
 </intent-filter>
  </activity>
 <activity          android:name="com.tencent.connect.common.AssistActivity"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />`

谷歌地圖
     
 ` <uses-library
            android:name="com.google.android.maps"
            android:required="false" />
        <uses-library android:name="android.test.runner" />`
facebook
`<activity
            android:name="com.facebook.FacebookActivity"
            android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
            android:label="@string/app_name"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />
        <provider         android:name="com.facebook.FacebookContentProvider"         android:authorities="com.facebook.app.FacebookContentProvider+appid"
android:exported="true" />
 <meta-data
  android:name="com.facebook.sdk.ApplicationId"
  android:value="@string/facebook_app_id" />`

新浪微博

` <activity
            android:name=".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>`
       
`<service android:name="com.sina.weibo.sdk.net.DownloadService"
            android:exported="false"></service>`
           
支付寶

  `<activity
            android:name=".apshare.ShareEntryActivity"
            android:configChanges="keyboardHidden|orientation|screenSize"
            android:exported="true"
            android:screenOrientation="portrait"
            android:theme="@android:style/Theme.Translucent.NoTitleBar" />   `        

 

   

#4.  打開平臺選擇面板

##4.1  各個平臺的配置,建議放在全局Application或者程序入口



       PlatformConfig.setWeixin("wx967daebe835fbeac", "5bb696d9ccd75a38c8a0bfe0675559b3");
       //微信 appid appsecret
      PlatformConfig.setSinaWeibo("3921700954","04b48b094faeb16683c32669824ebdad");
       //新浪微博 appkey appsecret     PlatformConfig.setYixin("yxc0614e80c9304c11b0391514d09f13bf");
        //易信 appkey        PlatformConfig.setRenren("201874","28401c0964f04a72a14c812d6132fcef","3bf66e42db1e4fa9829b955cc300b737");
        //人人 appid appkey appsecret
        PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
        // qq qzone appid appkey
        PlatformConfig.setAlipay("2015111700822536");
        //alipay appid


`說明:須要使用第三方公司api的平臺,新浪,騰訊等,是須要去申請appkey的。人人豆瓣只能在服務器端設置。其它須要配置appid的平臺,如qq,微信,易信,twitter等都須要在本地設置。還有一部分平臺須要在mainfest中配置,前面已經提到過。`


##  受權
受權
目前友盟社會化組件支持的第三方登陸平臺爲:新浪微博、QQ、微信、人人網、豆瓣。(特別說明:QQ空間,qq微博使用qq受權)
首先獲取UMShareAPI


     mShareAPI = UMShareAPI.get( this );

選取須要受權的平臺,並進行受權,其中umAuthLisrener是回調監聽器,須要開發者根據需求從新定義


     SHARE_MEDIA platform = SHARE_MEDIA.SINA;
     mShareAPI.doOauthVerify(this, platform, umAuthListener)
     private UMAuthListener umAuthListener = new UMAuthListener() {
        @Override
        public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
            Toast.makeText( getApplicationContext(), "Authorize succeed", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onError(SHARE_MEDIA platform, int action, Throwable t) {
            Toast.makeText( getApplicationContext(), "Authorize fail", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onCancel(SHARE_MEDIA platform, int action) {
            Toast.makeText( getApplicationContext(), "Authorize cancel", Toast.LENGTH_SHORT).show();
        }
    };java


友盟第三方登陸獲取QQ信息(原文:http://blog.csdn.net/sfy666666/article/details/51559117)
在登陸成功的onComplete方法中加以下代碼:
[java] view plain copy 在CODE上查看代碼片派生到個人代碼片
mShareAPI.getPlatformInfo(HomeActivity.this, platform,
new UMAuthListener() {

@Override
public void onError(SHARE_MEDIA arg0, int arg1,
Throwable arg2) {

}

@Override
public void onComplete(SHARE_MEDIA arg0, int arg1,
Map<String, String> data) {
Set<String> set = data.keySet();
for (String string : set) {
Log.i("msg",
"============================Map=========================");
Log.i("msg", string + "::::" + data.get(string));
String str = data.get(string);
// 設置頭像
if (string.equals("profile_image_url")) {
ImageLoader.getInstance().displayImage(str,
menu_headicon, options);
ImageLoader.getInstance().displayImage(str,
headicon, options);
}
// 設置暱稱
if (string.equals("screen_name")) {
menu_name.setText(str);
}

}

}

@Override
public void onCancel(SHARE_MEDIA arg0, int arg1) {

}
});

 

 

 


對於刪除受權使用的接口是
`mShareAPI.deleteOauth(AuthActivity.this, platform, umdelAuthListener);`

不難看出與受權的參數是同樣的。

注意要重寫onActivityResult()

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

`平臺受權,是須要安裝對應的客戶端的。新浪微博,豆瓣網,人人網除外,這三個平臺若是本地安裝了對應平臺是走本地受權,若是沒有安裝,須要走網絡受權`react

 

 

 

 

 

 

 

 

 

 

 


##分享
分享分爲兩部分

###自定義shareboard:

    final SHARE_MEDIA[] displaylist = new SHARE_MEDIA[]
                        {
                            SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE,SHARE_MEDIA.SINA,
                            SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE,SHARE_MEDIA.DOUBAN
                        };
                new ShareAction(this).setDisplayList( displaylist )
                        .withText( "呵呵" )
                        .withMedia( image )
                        .setShareboardclickCallback(shareBoardlistener)
                        .open();
自定義shareboard須要,指明須要顯示的平臺,放入shareaction中,並執行open方法便可。
shareboard點擊響應回調方法以下:

     private ShareBoardlistener shareBoardlistener = new ShareBoardlistener() {

        @Override
        public void onclick(SHARE_MEDIA share_media) {
         
        }
    };

###單平臺直接分享:

     new ShareAction(this)
     .setPlatform(SHARE_MEDIA.DOUBAN)
     .setCallback(umShareListener)
      .withText("Hello 豆瓣")
      .withMedia(image)
       .share();
選取分享的平臺,設定分享回調接口和內容,並執行share方法。
回調接口以下:


     new UMShareListener() {
        @Override
        public void onResult(SHARE_MEDIA platform) {
            Toast.makeText(ShareActivity.this,platform + " 分享成功啦", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onError(SHARE_MEDIA platform, Throwable t) {
            Toast.makeText(ShareActivity.this,platform + " 分享失敗啦", Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onCancel(SHARE_MEDIA platform) {
            Toast.makeText(ShareActivity.this,platform + " 分享取消了", Toast.LENGTH_SHORT).show();
        }
    };
值得注意的是,分享也應該重寫onActivityResult()
   

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


##獲取用戶信息和好友列表
已受權的平臺,能夠獲取用戶信息(新浪微博能夠獲取用戶好友列表)
實現的方法與受權和解除受權相似:

`mShareAPI = UMShareAPI.get(this);`

初始化UMShareAPI,而後進行用戶信息獲取:

` mShareAPI.getPlatformInfo(UserinfoActivity.this, platform, umAuthListener);`

對於新浪微博好友列表的獲取使用的接口是:

` mShareAPI.getFriend(UserinfoActivity.this, SHARE_MEDIA.SINA, umGetfriendListener);`


##高級功能介紹:
對於以上介紹的基本功能已經能夠實現通常用戶的需求,對於特殊要求,咱們進行了特別處理:
針對分享面板,咱們進行了以下的處理:
###針對不一樣平臺使用不一樣監聽器,以及分享不一樣內容
根據前面的介紹能夠知道,使用ShareAction(this).setDisplayList( displaylist)能夠進行分享面板的平臺設置。同時使用setContentList(),能夠進行不一樣分享內容的處理,使用setListenerList()進行不一樣回調的處理。
`new ShareAction(this)
.setDisplayList( SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE, )
.setContentList(shareContent1,shareContent2)
.setCallback(umShareListener)
.withText( "umeng" )
.withMedia( image )
.setListenerList(listener1,listener2)
 .open();
                          `
###分享面板點擊回調
使用setShareboardclickCallback()能夠進行分享面板不一樣按鈕的點擊
回調,方便開發者進行特殊處理。

`new ShareAction(this)
.setDisplayList( SHARE_MEDIA.WEIXIN, SHARE_MEDIA.WEIXIN_CIRCLE, )
.withText( "umeng" )
.withMedia( image )
setShareboardclickCallback(shareBoardlistener)
 .open();`

###分享面板增長自定義按鈕
若是須要對分享面板增長自定義的按鈕,能夠經過`ShareAction(this).addButton(String showword,String Keyword,String icon,String Grayicon)`
進行設置其中第一個參數是顯示的名字,第二個參數是平臺名稱,第三個參數是按鈕圖標的圖片名字,第四個按鈕是置灰狀況下按鈕圖標的圖片名字。
對於自定義平臺的監聽須要使用上面提到的分享面板點擊回調,以下:
 
         
      private ShareBoardlistener shareBoardlistener = new  ShareBoardlistener() {
         
        @Override
        public void onclick(SnsPlatform snsPlatform,SHARE_MEDIA share_media) {
            if (share_media==null){
                if (snsPlatform.mKeyword.equals("11")){
                    Toast.makeText(ShareActivity.this,"add button success",Toast.LENGTH_LONG).show();
                }
               
            }
            else {
                new ShareAction(ShareActivity.this).setPlatform(share_media).setCallback(umShareListener)
                        .withText("多平臺分享")
                        .share();
            }
        }
    };
 是新增按鈕的回調監聽是經過判斷當獲取平臺爲空時,keyword的值來進行肯定的,並在對應的條件中進行處理便可。
 
###獲取客戶端安裝信息
使用以下接口

`mShareAPI.isInstall(this, SHARE_MEDIA.WEIXIN)`

###關閉log和toast方法:
`Log.LOG = false`

`Config.IsToastTip = false`
###開啓迴流統計的方法:

`Config.isloadUrl = true`
###高級功能收集
因爲本次api版本改動較大,對於新版的sdk有特殊需求的用戶,能夠聯繫咱們的客服,咱們將在版本更新中繼續添加更多有用的新功能。

#微信集成相關說明

微信集成注意如下幾點

正確填寫AppID。
工程的包名必須同申請應用的包名一致。
在微信開放平臺填寫你App的的簽名,測試、發佈時要保證App的簽名跟微信開放平臺的簽名一致。
開發者的應用須要經過審覈。開發者在申請應用必需要經過微信官網的審覈才能進行調試。
Demo中集成的微信沒法使用?

緣由:Demo中使用的微信AppID綁定的簽名信息和你打包時所用的簽名信息不一致,致使沒法響應. 解決辦法有兩個,您任選其一:

申請一個測試Demo中AppID.(申請地址).
填寫"包名"時請使用Demo的包名"com.umeng.soexample".
填寫"簽名"使用簽名生成工具(簽名工具)生成,簽名時填寫Demo的包名.
獲取微信AppID後替換Demo中的使用的AppID.
使用SDK中的 debug.keystore編譯運行Demo工程.


#微信簽名說明
因爲微信的簽名過程跟驗證流程較多,出錯的可能性較大,這裏將對微信的簽名過程跟驗證作詳細的說明。

##  獲取簽名文件
獲取應用簽名方式有兩種
###方式一:
用eclipse導出 帶簽名 的apk文件,注意此時選擇的簽名文件是你發佈app時的簽名文件。在導出的最後一步,eclipse會顯示一個Certificate fingerprints(證書指紋),以下圖。此時找到MD5值,將該MD5值複製出來,按照「 去掉冒號(:),大寫轉小寫 」的規則裝換,此時字符串就是簽名。
###方式二:
導出 帶簽名 的apk文件,將該apk文件安裝至手機中。安裝微信的簽名工具,打開GenSignature應用程序,填寫你App的包名,點擊「Get Signature」便可獲得簽名。

##  請在微信開放平臺申請應用
1:填寫App的相關信息,注意確保包名跟簽名填寫正確,填寫完成提交微信審覈。

##  微信集成測試
在進行微信集成測試時,請填寫你申請App的AppID。測試時須要導出帶簽名的apk文件測試,不然將不能正常分享。

## 微信和微信朋友圈的回調
若是在您的項目中集成了微信或者微信朋友圈,而且您須要準確的分享回調,則須要在AndroidManifest.xml中下注冊下面的回調Activity。
`<activity
   android:name=".wxapi.WXEntryActivity"
   android:theme="@android:style/Theme.Translucent.NoTitleBar"
   android:configChanges="keyboardHidden|orientation|screenSize"
   android:exported="true"
   android:screenOrientation="portrait" />`
  
   而後將SDK包中platforms/weixin目錄下的wxapi文件夾拷貝到您的工程的包目錄下, 而後修改WXEntryActivity的完整路徑便可。
例如social_sdk_example的包名爲com.umeng.soexample,所以將wxapi文件夾拷貝到com.umeng.soexample下,最終WXEntryActivity的 完整路徑爲com.umeng.soexample.wxapi.WXEntryActivity。
其中分享的回調接口SnsPostListener的onComplete方法的第二個參數表明分享的狀態碼,當值爲200時表示分享成功;其他的值則爲分享失敗。

**微信集成相關說明**

微信集成注意如下幾點

正確填寫AppID。
工程的包名必須同申請應用的包名一致。
在微信開放平臺填寫你App的的簽名,測試、發佈時要保證App的簽名跟微信開放平臺的簽名一致。
開發者的應用須要經過審覈。開發者在申請應用必需要經過微信官網的審覈才能進行調試。
Demo中集成的微信沒法使用?

緣由:Demo中使用的微信AppID綁定的簽名信息和你打包時所用的簽名信息不一致,致使沒法響應. 解決辦法有兩個,您任選其一:

申請一個測試Demo中AppID.(申請地址).
填寫"包名"時請使用Demo的包名"com.umeng.soexample".
填寫"簽名"使用簽名生成工具(簽名工具)生成,簽名時填寫Demo的包名.
獲取微信AppID後替換Demo中的使用的AppID.
使用SDK中的 debug.keystore編譯運行Demo工程.

# 應用信息註冊地址列表
下面是Social SDK不一樣平臺應用信息註冊網站的地址:

平臺    網址
新浪微博    http://open.weibo.com
騰訊微博    http://dev.t.qq.com
QQ空間  http://open.qq.com/
微信好友    http://open.weixin.qq.com
FaceBook    https://developers.facebook.com
人人    http://dev.renren.com
豆瓣    http://developers.douban.com/

#混淆
爲了保證引用友盟Social SDK jar文件以及騰訊jar文件被混淆,請在proguard.cfg文件中添加如下代碼避免被混淆.


`-dontshrink
 -dontoptimize
 -dontwarn com.google.android.maps.**
 -dontwarn android.webkit.WebView
 -dontwarn com.umeng.**
 -dontwarn com.tencent.weibo.sdk.**
 -dontwarn com.facebook.**
 -keep public class javax.**
 -keep public class android.webkit.**
 -dontwarn android.support.v4.**
 -keep enum com.facebook.**
 -keepattributes Exceptions,InnerClasses,Signature
 -keepattributes *Annotation*
 -keepattributes SourceFile,LineNumberTable
 
 -keep public interface com.facebook.**
 -keep public interface com.tencent.**
 -keep public interface com.umeng.socialize.**
 -keep public interface com.umeng.socialize.sensor.**
 -keep public interface com.umeng.scrshot.**
 
 -keep public class com.umeng.socialize.* {*;}
 
 
 -keep class com.facebook.**
 -keep class com.facebook.** { *; }
 -keep class com.umeng.scrshot.**
 -keep public class com.tencent.** {*;}
 -keep class com.umeng.socialize.sensor.**
 -keep class com.umeng.socialize.handler.**
 -keep class com.umeng.socialize.handler.*
 -keep class com.tencent.mm.sdk.modelmsg.WXMediaMessage {*;}
 -keep class com.tencent.mm.sdk.modelmsg.** implements com.tencent.mm.sdk.modelmsg.WXMediaMessage$IMediaObject {*;}
 
 -keep class im.yixin.sdk.api.YXMessage {*;}
 -keep class im.yixin.sdk.api.** implements im.yixin.sdk.api.YXMessage$YXMessageData{*;}
 
 -dontwarn twitter4j.**
 -keep class twitter4j.** { *; }
 
 -keep class com.tencent.** {*;}
 -dontwarn com.tencent.**
 -keep public class com.umeng.soexample.R$*{
     public static final int *;
 }
 -keep public class com.umeng.soexample.R$*{
     public static final int *;
 }
 -keep class com.tencent.open.TDialog$*
 -keep class com.tencent.open.TDialog$* {*;}
 -keep class com.tencent.open.PKDialog
 -keep class com.tencent.open.PKDialog {*;}
 -keep class com.tencent.open.PKDialog$*
 -keep class com.tencent.open.PKDialog$* {*;}
 
 -keep class com.sina.** {*;}
 -dontwarn com.sina.**
 -keep class  com.alipay.share.sdk.** {
    *;
 }
 -keepnames class * implements android.os.Parcelable {
     public static final ** CREATOR;
 }
 
 -keep class com.linkedin.** { *; }
 -keepattributes Signature


`

 android

相關文章
相關標籤/搜索