產品概述
Android U-share 6.0sdk是在5.0+的基礎上做了進一步的優化,降低了包的大小,對于三方的jar提供了更多選擇(精簡版,原生版),并提供了更多實用的接口,方便了用戶的集成和升級。同時6.0的版本兼容5.0+的版本,老用戶,只要替換對應的jar就可以了。
特別提示:之后我們會針對6.0+的版本提供更多方便個性的功能,所以建議用戶升級,并留意我們接下來的新功能。
獲取友盟Appkey
如果你之前已經在友盟注冊了應用,并獲取到了Appkey,可以繼續使用它.
如果你尚未在友盟注冊開發者賬號,需要先注冊,注冊之后登錄你的賬號,點擊添加新應用,填寫完應用基本信息后,將進入"下載SDK并添加代碼"頁面,此頁面即可得到Appkey。
下載并安裝SDK
下載SDK最新版
如下圖所示:
快速集成
AndroidStudio
1)新建立一個工程
2)拷貝jar及res
a.將main文件夾以及platform(選擇你想使用的平臺即可)文件下,對應的資源文件和jar放入你的工程
例如我想用微信,qq和微博三個平臺如下圖:
<font color=#0099ff size=5 face="黑體">注意:微博平臺有.so文件,需要在工程下建立一個jniLib的文件夾,將.so放進去,如下圖所示</font>
b.如果不想像a方式一樣一個個拷貝,可以使用集成工具umeng_integrate_tool.jar
雙擊點開這個工具,如下圖所示:
選擇你想使用的平臺,以及你所使用的開發工具,點擊ok
會在當前目錄下生成一個新的文件夾umeng_integratetool_result
只需將該文件夾下生成的對應文件對應放入你的工程中即可
3)添加對應的回調Activity
包名目錄下創建wxapi文件夾,新建一個名為WXEntryActivity的activity繼承WXCallbackActivity。這里注意一定是包名路徑下,例如我的包名是com.umeng.soexample,則配置如下:
在這里你可能會爆紅也可能不爆紅這是由于IDE還沒有sync剛才放入的jar包。
同理需要建立回調的平臺還有支付寶與易信,支付寶是需要建立一個apshare的文件夾,然后建立一個ShareEntryActivity的類,繼承ShareCallbackActivity。易信是需要建立一個yxapi的文件夾,建立一個YXEntryActivity的類繼承YXCallbackActivity。如果不使用這兩個平臺可以不用建立。
同理新浪微博也需要一個回調的Activity,與微信不同的是它只需要在包名目錄下建立一個名為WBShareActivity類即可,不用建立文件夾,該類繼承WBShareCallBackActivity,如下圖所示(注意看目錄結構):
4)修改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.READ_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" />
然后加入sdk中需要的Activity:
新浪微博:
<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=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<!-- alipay callback-->
支付寶:
<activity
android:name=".apshare.ShareEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
qq:
<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"
android:configChanges="orientation|keyboardHidden|screenSize"/>
分享編輯頁:
<activity
android:name="com.umeng.socialize.editorpage.ShareActivity"
android:theme="@style/Theme.UMDefault"
android:excludeFromRecents="true"
/>
其他平臺的回調activity請到附錄中查詢。
添加友盟appkey
<meta-data
android:name="UMENG_APPKEY"
android:value="561cae6ae0f55abd990035bf" >
</meta-data>
5)修改build.gradle文件
將文件夾中的簽名文件放入到工程中,例如我的簽名文件是debug.keystore
然后增加簽名文件的密碼:
signingConfigs {
debug {
storeFile file('debug.keystore')
storePassword "android"
keyAlias "androiddebugkey"
keyPassword "android"
}
}
然后在buildTypes中將這個signingConfigs配置進去,如下圖所示:
簽名文件如果不加,部分平臺的授權會受到影響。
6)配置各個平臺的appkey
建立一個application文件,隨便起一個名字,比如叫App,別忘了在AndroidManifest文件中配置(如果本身已有,不需要重新建立):
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:name=".App"
android:theme="@style/AppTheme">
在application文件中配置三方平臺的appkey:
public class App extends Application{
{
PlatformConfig.setWeixin("wx967daebe835fbeac", "5bb696d9ccd75a38c8a0bfe0675559b3");
PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad");
PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
}
}
7)增加代碼
例如我有三個按鈕,分別進行qq平臺的分享,授權,和打開分享面板:
點擊分享按鈕:
findViewById(R.id.share).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new ShareAction(MainActivity.this).setPlatform(SHARE_MEDIA.QQ)
.withText("hello")
.setCallback(umShareListener)
.share();
}
});
其中umShareListener為回調監聽,構建如下:
private UMShareListener umShareListener = new UMShareListener() {
@Override
public void onResult(SHARE_MEDIA platform) {
Log.d("plat","platform"+platform);
if(platform.name().equals("WEIXIN_FAVORITE")){
Toast.makeText(MainActivity.this,platform + " 收藏成功啦",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(MainActivity.this, platform + " 分享成功啦", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onError(SHARE_MEDIA platform, Throwable t) {
Toast.makeText(MainActivity.this,platform + " 分享失敗啦", Toast.LENGTH_SHORT).show();
if(t!=null){
Log.d("throw","throw:"+t.getMessage());
}
}
@Override
public void onCancel(SHARE_MEDIA platform) {
Toast.makeText(MainActivity.this,platform + " 分享取消了", Toast.LENGTH_SHORT).show();
}
};
更多分享類型請參見詳細集成文檔或參照demo。
點擊授權按鈕:
findViewById(R.id.auth).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
UMShareAPI mShareAPI = UMShareAPI.get( MainActivity.this );
mShareAPI.doOauthVerify(MainActivity.this, SHARE_MEDIA.QQ, umAuthListener);
}
});
其中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();
}
};
點擊打開面板:
findViewById(R.id.shareboard).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new ShareAction(MainActivity.this).withText("hello")
.setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.WEIXIN)
.setCallback(umShareListener).open();
}
});
打開面板的使用方式與分享類似,只是一個設置單一的使用平臺,一個設置一個平臺list,一個最后調用的是share方法,一個調用open的方法。關于分享面板還有許多拓展功能,可以參照詳細集成文檔。
最后在Activity的onActivityResult中加入我們的回調
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}
eclipse
1)新建立一個工程
2)拷貝jar及res
a.將main文件夾以及platform(選擇你想使用的平臺即可)文件下,對應的資源文件和jar放入你的工程
例如我想用微信,qq和微博三個平臺如下圖:
b.如果不想像a方式一樣一個個拷貝,可以使用集成工具umeng_integrate_tool.jar
雙擊點開這個工具,如下圖所示:
選擇你想使用的平臺,以及你所使用的開發工具,點擊ok
會在當前目錄下生成一個新的文件夾umeng_integratetool_result
只需將該文件夾下生成的對應文件對應放入你的工程中即可
3)添加對應的回調Activity
包名目錄下創建wxapi文件夾,新建一個名為WXEntryActivity的activity繼承WXCallbackActivity。這里注意一定是包名路徑下,例如我的包名是com.umeng.soexample,則配置如下:
在這里你可能有紅線報警也可能沒有,這是由于IDE還沒有sync剛才放入的jar包。
同理需要建立回調的平臺還有支付寶與易信,支付寶是需要建立一個apshare的文件夾,然后建立一個ShareEntryActivity的類,繼承ShareCallbackActivity。易信是需要建立一個yxapi的文件夾,建立一個YXEntryActivity的類繼承YXCallbackActivity。如果不使用這兩個平臺可以不用建立。
同理新浪微博也需要一個回調的Activity,與微信不同的是它只需要在包名目錄下建立一個名為WBShareActivity類即可,不用建立文件夾,該類繼承WBShareCallBackActivity,如下圖所示(注意看目錄結構):
4)修改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.READ_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" />
然后加入sdk中需要的Activity:
新浪微博:
<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=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<!-- alipay callback-->
支付寶
<activity
android:name=".apshare.ShareEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
qq:
<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"
android:configChanges="orientation|keyboardHidden|screenSize"/>
分享編輯頁:
<activity
android:name="com.umeng.socialize.editorpage.ShareActivity"
android:theme="@style/Theme.UMDefault"
android:excludeFromRecents="true"
/>
其他平臺的回調activity請到附錄中查詢。
添加友盟appkey
<meta-data
android:name="UMENG_APPKEY"
android:value="561cae6ae0f55abd990035bf" >
</meta-data>
5)引入簽名文件
在eclipse的工程設置中設置簽名,將Custom debug keystore設置成你應用的簽名文件(有些工程已經默認設置好了,可以跳過)例如我的簽名文件是debug.keystore
6)配置各個平臺的appkey
建立一個application文件,隨便起一個名字,比如叫App,別忘了在AndroidManifest文件中配置(如果本身已有,不需要重新建立):
<application
android:allowBackup="true"
android:icon="@mipmap/ic_launcher"
android:label="@string/app_name"
android:supportsRtl="true"
android:name=".App"
android:theme="@style/AppTheme">
在application文件中配置三方平臺的appkey:
public class App extends Application{
{
PlatformConfig.setWeixin("wx967daebe835fbeac", "5bb696d9ccd75a38c8a0bfe0675559b3");
PlatformConfig.setSinaWeibo("3921700954", "04b48b094faeb16683c32669824ebdad");
PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
}
}
7)增加代碼
例如我有三個按鈕,分別進行qq平臺的分享,授權,和打開分享面板:
點擊分享按鈕:
findViewById(R.id.share).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new ShareAction(MainActivity.this).setPlatform(SHARE_MEDIA.QQ)
.withText("hello")
.setCallback(umShareListener)
.share();
}
});
其中umShareListener為回調監聽,構建如下:
private UMShareListener umShareListener = new UMShareListener() {
@Override
public void onResult(SHARE_MEDIA platform) {
Log.d("plat","platform"+platform);
if(platform.name().equals("WEIXIN_FAVORITE")){
Toast.makeText(MainActivity.this,platform + " 收藏成功啦",Toast.LENGTH_SHORT).show();
}else{
Toast.makeText(MainActivity.this, platform + " 分享成功啦", Toast.LENGTH_SHORT).show();
}
}
@Override
public void onError(SHARE_MEDIA platform, Throwable t) {
Toast.makeText(MainActivity.this,platform + " 分享失敗啦", Toast.LENGTH_SHORT).show();
if(t!=null){
Log.d("throw","throw:"+t.getMessage());
}
}
@Override
public void onCancel(SHARE_MEDIA platform) {
Toast.makeText(MainActivity.this,platform + " 分享取消了", Toast.LENGTH_SHORT).show();
}
};
更多分享類型請參見詳細集成文檔或參照demo。
點擊授權按鈕:
findViewById(R.id.auth).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
UMShareAPI mShareAPI = UMShareAPI.get( MainActivity.this );
mShareAPI.doOauthVerify(MainActivity.this, SHARE_MEDIA.QQ, umAuthListener);
}
});
其中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();
}
};
點擊打開面板:
findViewById(R.id.shareboard).setOnClickListener(new View.OnClickListener() {
@Override
public void onClick(View view) {
new ShareAction(MainActivity.this).withText("hello")
.setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.WEIXIN)
.setCallback(umShareListener).open();
}
});
打開面板的使用方式與分享類似,只是一個設置單一的使用平臺,一個設置一個平臺list,一個最后調用的是share方法,一個調用open的方法。關于分享面板還有許多拓展功能,可以參照詳細集成文檔。
最后在Activity的onActivityResult中加入我們的回調
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).onActivityResult(requestCode, resultCode, data);
}
詳細集成文檔
單平臺分享進階
新浪微博
對于新浪微博我們提供兩種jar,滿足不同的開發者要求
原生sdk
使用platform/sina下的jar和res即可
就如前面快速集成文檔中的方式集成,一定要保證簽名和包名的正確,同時回調地址一定要正確
在新浪應用的后臺,看下你們設置的回調地址:
如果是如圖所示的地址,則不需要什么,如是你們自己寫的地址,請在調用分享前,設置
Config.REDIRECT_URL = "yourpath"
為你的回調地址
原生sdk更加安全穩定適配性也更強,但是jar和so過大
umeng sina sdk
使用platform/umengsina下的jar和res即可
用這種方式集成,不需要添加WBShareActivity,也不需要前面所述的關于新浪的AndroidManifest配置
使用這種方式,jar包只有不到20k,需要在友盟后臺配置你的appkey和appsecret,這樣的配置更加安全。
微信
原生sdk
使用platform/weixin下的jar和res即可
就如前面快速集成文檔中的方式集成,一定要保證簽名和包名的正確。不然授權不能成功
如果使用微信支付的應用開發者可以使用這個包,將你們工程中原有的支付去掉即可(不然會出現jar重復的問題,我們SocialSDK_WeiXin_1就是原生微信jar)
umeng 微信 sdk
使用platform/umengwx下的jar和res即可
集成方式與前者一樣,不同的是jar中去掉了支付的相關功能,包更小。對于個人開發者而言,如果需要上傳百度市場等,會檢測支付相關sdk,所以推薦用這個包。
支付寶
如前面快速集成文檔所示需要像微信一樣添加一個回調的Activity,在包名目錄下建立一個文件夾apshare,在這個文件夾中新建一個類
public class ShareEntryActivity extends ShareCallbackActivity{
}
同時在AndroidManifest中添加對應的配置
<activity
android:name=".apshare.ShareEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
易信
如前面快速集成文檔所示需要像微信一樣添加一個回調的Activity,在包名目錄下建立一個文件夾yxapi,在這個文件夾中新建一個類
public class YXEntryActivity extends YXCallbackActivity {
}
同時在AndroidManifest中添加對應的配置
<activity
android:name=".yxapi.YXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
facebook需要像前面快速集成文檔中寫的一樣,配置appkey,同時在AndroidManifest中配置:
<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.FacebookContentProvider487692214752558"
android:exported="true" />
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />
其中487692214752558是facebook的appid
twitter需要像前面快速集成文檔中寫的一樣,配置appkey,同時在AndroidManifest中配置:
<activity
android:name="com.umeng.socialize.handler.TwitterWebActivity"
android:configChanges=
"keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:label="@string/app_name" />
豆瓣人人騰訊微博
這個三個平臺不需要在程序中設置appkey,jar包放進去就可以使用,但是需要將appkey設置在友盟的后臺。
分享內容進階
對于分享內容可以有如下設置
設置分享圖片
在使用shareaction的時候,調用withMedia可以設置一個UMImage,也就是分享圖片,分享圖片的構建有如下幾種形式
UMImage image = new UMImage(ShareActivity.this, "imageurl");//網絡圖片
UMImage image = new UMImage(ShareActivity.this, file);//本地文件
UMImage image = new UMImage(ShareActivity.this, R.drawable.xxx);//資源文件
UMImage image = new UMImage(ShareActivity.this, bitmap);//bitmap文件
UMImage image = new UMImage(ShareActivity.this, byte[]);//字節流
推薦使用網絡圖片和資源文件的方式,平臺兼容性更高。
創建好UMImage之后調用分享即可,如下所示:
new ShareAction(ShareActivity.this).withText("hello")
.withMedia(image).share();
設置分享鏈接
分享鏈接可以使用withTargetUrl("http://xxxx")
注意一定是http://或https://開頭的網址
new ShareAction(ShareActivity.this).withText("hello")
.withMedia(image)
.withTargetUrl(xxx)
.share();
對于有些平臺設置鏈接和圖片同時分享的時候,圖片會成為這個linkcard的縮略圖,所以這種情況圖片不要設置過大,一般縮略圖最好在24k左右,可以調用我們后面提供的壓縮接口進行壓縮。
設置標題
標題一般是用于網絡鏈接分享的標題,可以使用withTitle進行設置
new ShareAction(ShareActivity.this).withText("hello")
.withMedia(image)
.withTargetUrl(xxx)
.withTitle(xxxx)
.share();
設置分享音樂
音樂只能使用網絡音樂:
UMusic music = new UMusic(musicurl);
music.setTitle("This is music title");//音樂的標題
music.setThumb("http://www.umeng.com/images/pic/social/chart_1.png");//音樂的縮略圖
music.setDescription("my description");//音樂的描述
建立好之后可以進行分享:
new ShareAction(ShareActivity.this).withText("hello")
.withMedia(music).share();
設置分享視頻
音樂只能使用網絡視頻:
UMVideo video = new UMVideo(videourl);
video.setTitle("This is music title");//視頻的標題
video.setThumb("http://www.umeng.com/images/pic/social/chart_1.png");//視頻的縮略圖
video.setDescription("my description");//視頻的描述
建立好之后可以進行分享:
new ShareAction(ShareActivity.this).withText("hello")
.withMedia(video).share();
設置分享文件
分享文件是有微信收藏和郵件中可以使用,別的平臺無效,使用的文件不要超過10M
new ShareAction(ShareActivity.this).withText("hello")
.withFile(file).share();
各平臺可分享內容預覽
| 平臺 | 授權 | 可分享內容 | 用戶信息 |
| ------------- |:-------------:| -----:|
| qq |是 |文本 圖片 鏈接 視頻 音樂 |是|
| qq空間 | 同qq | 文字(說說) 圖片(說說) 鏈接 視頻 音樂 |同qq|
| 微信 | 是 | 文本 圖片 鏈接 視頻 音樂 |是|
| 微信朋友圈 | 同微信 | 文本 圖片 鏈接 視頻 音樂 |同微信|
| 微信收藏 | 同微信 | 文本 圖片 鏈接 視頻 音樂 文件 |同微信|
| 騰訊微博 | 是(網頁) | 文本 圖文 圖片 鏈接 視頻 音樂 |否|
| 新浪微博 | 是 | 文本 圖文 圖片 鏈接 視頻 音樂 |是|
| 支付寶 | 否 | 文本 圖片 |否|
| 易信聊天 | 否 | 文本 圖片 鏈接 視頻 音樂 |否|
| 易信朋友圈 | 否 | 文本 圖片 鏈接 視頻 音樂 |否|
| 人人 | 是 (網頁) | 文本 圖文 圖片 鏈接 視頻 音樂 |否|
| 豆瓣 | 是 (網頁) | 文本 圖文 圖片 鏈接 視頻 音樂 |否|
| 點點蟲聊天 | 否 | 文本 圖文 圖片 鏈接 視頻 音樂(點點蟲分享已經在最新版的軟件中不能使用,點點蟲改為了直播軟件) |否|
| 點點蟲動態 | 否 | 文本 圖文 圖片 鏈接 視頻 音樂 |否|
| Linkedin | 是 | 文本 圖文 圖片 鏈接 視頻 音樂 |否|
| 短信 | 否 | 文本 圖文 圖片 鏈接 |否|
| 郵件 | 否 | 文本 圖文 圖片 鏈接 文件 |否|
| facebook | 是 | 文本 圖文 圖片 鏈接 視頻 音樂 |是|
| twitter | 否 | 文本 圖文 圖片 |否|
| Instagram | 否 | 圖片 |否|
| Pinterest | 否 | 圖片 圖文 |否|
| Thumblr | 否 | 文字 圖片 圖文 |否|
| line | 否 | 文字 圖片 圖文 |否|
| whatsapp | 否 | 文字 圖片 圖文 |否|
| flickr | 否 | 圖片 |否|
| kakao | 否 | 文字 圖片 圖文 |否|
| googleplus | 否 | 文字 圖片 圖文 |否|
| 印象筆記 | 否 | 文字 圖片 圖文 |否|
| 有道筆記 | 否 | 文字 圖片 圖文 |否|
| pocket | 否 | 鏈接 |否|
| foursquare | 否 | 圖片 |否|
分享面板進階
普通分享面板
如快速集成文檔所示
自定義分享按鈕的分享面板
如果需要對分享面板增加自定義的按鈕,可以通過
new ShareAction(ShareMenuActivity.this).setDisplayList(SHARE_MEDIA.SINA,SHARE_MEDIA.QQ,SHARE_MEDIA.QZONE,SHARE_MEDIA.WEIXIN,SHARE_MEDIA.WEIXIN_CIRCLE)
.addButton("umeng_sharebutton_custom","umeng_sharebutton_custom","info_icon_1","info_icon_1")
.setShareboardclickCallback(shareBoardlistener).open();
進行設置其中第一個參數是顯示的名字,第二個參數是平臺名稱,第三個參數是按鈕圖標的圖片名字,第四個按鈕是置灰情況下按鈕圖標的圖片名字。
注意第一個參數和第二個參數是指字符串寫在string文件中的名字,如
<string name="umeng_sharebutton_custom">自定義分享按鈕</string>
第三個參數與第四個參數為圖片的名字
對于自定義平臺的監聽需要使用上面提到的分享面板點擊回調,如下:
private ShareBoardlistener shareBoardlistener = new ShareBoardlistener() {
@Override
public void onclick(SnsPlatform snsPlatform,SHARE_MEDIA share_media) {
if (share_media==null){
if (snsPlatform.mKeyword.equals("umeng_sharebutton_custom")){
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 = UMShareAPI.get(this);
初始化UMShareAPI,然后進行用戶信息獲取:
mShareAPI.getPlatformInfo(UserinfoActivity.this, SHARE_MEDIA.SINA, umAuthListener);
用戶資料基本信息解析如下
在返回的map中各個信息對應的key值如下
新浪微博: 用戶id:id 用戶名:screen_name 位置:location 頭像:profile_image_url 性別:gender 關注數:followers_count 好友數:friends_count qq: name:screenname 性別:gender 頭像:profile_image_url 是否黃鉆:is_yellow_year_vip 黃鉆等級:yellow_vip_level 城市:city 省份:province 微信: openid:openid name:screenname 城市:city 省份:prvinice 國家:country 性別:gender 頭像:profile_image_url
特殊功能進階
android6.0適配
因為分享授權中需要使用一些對應的權限,如果你的targetSdkVersion設置的是23或更高,需要提前獲取權限。(如果targetSdkVersion是22或以下,可以忽略該問題)
使用AppCompatActivity.checkSelfPermission(Manifest.permission.xxxx)可以判斷權限的授權情況。
使用
if(Build.VERSION.SDK_INT>=23){
String[] mPermissionList = new String[]{Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.ACCESS_FINE_LOCATION,Manifest.permission.CALL_PHONE,Manifest.permission.READ_LOGS,Manifest.permission.READ_PHONE_STATE, Manifest.permission.WRITE_EXTERNAL_STORAGE,Manifest.permission.SET_DEBUG_APP,Manifest.permission.SYSTEM_ALERT_WINDOW,Manifest.permission.GET_ACCOUNTS,Manifest.permission.WRITE_APN_SETTINGS};
ActivityCompat.requestPermissions(this,mPermissionList,123);
}
可以請求權限。
獲取客戶端安裝信息
使用如下接口
mShareAPI.isInstall(this, SHARE_MEDIA.WEIXIN)
獲取客戶端api是否支持的接口
mShareAPI.isSupport(this, SHARE_MEDIA.WEIXIN)
獲取當前使用sdk的版本號
mShareAPI.getversion(this, SHARE_MEDIA.WEIXIN)
qq微信授權防殺死
對于的低端手機可能會有如下問題,從開發者app調到qq或者微信的授權界面,后臺把開發者app殺死了,這樣,授權成功沒有回調了,可以用如下方式避免:(一般不需要添加,如有特殊需要,可以添加)
對于qq:
在onActivityResult中加入如下一段話:
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
UMShareAPI.get(this).HandleQQError(AuthActivity.this,requestCode,umAuthListener);
mShareAPI.onActivityResult(requestCode, resultCode, data);
}
對于微信:
在WXEntryActivity文件中加入下面代碼:
@Override
protected void handleIntent(Intent intent){
mWxHandler.setAuthListener(new UMAuthListener() {
@Override
public void onComplete(SHARE_MEDIA platform, int action, Map<String, String> data) {
Log.e("UMWXHandler fsdfsdfs");
}
@Override
public void onError(SHARE_MEDIA platform, int action, Throwable t) {
}
@Override
public void onCancel(SHARE_MEDIA platform, int action) {
}
});
super.handleIntent(intent);
}
關閉log和toast方法:
Log.LOG = false
Config.IsToastTip = false
file轉byte
SocializeUtils.File2byte()
bitmap轉byte
BitmapUtils.bitmap2Bytes(bitmap)
圖片壓縮到指定大小
BitmapUtils.compressBitmap(byte[],count)
第一個參數是圖片的字節流,Count為圖片最大的字節數
開發者調試工具
在demo中有一個自檢工具,可以幫助開發者迅速定位主流平臺的常見錯誤(集成工具為調試期間的工具,開發者上線自行去掉調用即可)
簽名問題
在程序中加入UmengTool.getSignature(activity);的調用,打出apk簽名包。會顯示當前簽名包的簽名,這是這個簽名與申請時的簽名作對比看是否一樣
檢查回調地址
對于新浪微博,有一個回調地址,調用UmengTool.getREDICRECT_URL(activity);可以打印出當前設置的回調地址,與申請時的作對比,看是否一樣
檢查回調Activity
對于微信新浪支付寶平臺,都需要一個回調的activity,調用對應的方法( UmengTool.checkSina(activity))可以檢查平臺配置是否正確
附錄
混淆文件
為了保證引用友盟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 UMMoreHandler{*;}
-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 *;
}
-keepclassmembers enum * {
public static **[] values();
public static ** valueOf(java.lang.String);
}
-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
QQ平臺錯誤碼對照
110201:未登陸
110405:登錄請求被限制
110404:請求參數缺少appid
110401:請求的應用不存在
110407:應用已經下架
110406:應用沒有通過審核
100044:未經過安全校驗的包名和簽名
110500:獲取用戶授權信息失敗
110501:獲取應用的授權信息失敗
110502:設置用戶授權失敗
110503:獲取token失敗
110504:系統內部錯誤
微信平臺錯誤碼對照
40001 invalid credential 不合法的調用憑證
40002 invalid grant_type 不合法的grant_type
40003 invalid openid 不合法的OpenID
40004 invalid media type 不合法的媒體文件類型
40007 invalid media_id 不合法的media_id
40008 invalid message type 不合法的message_type
40009 invalid image size 不合法的圖片大小
40010 invalid voice size 不合法的語音大小
40011 invalid video size 不合法的視頻大小
40012 invalid thumb size 不合法的縮略圖大小
40013 invalid appid 不合法的AppID
40014 invalid access_token 不合法的access_token
40015 invalid menu type 不合法的菜單類型
40016 invalid button size 不合法的菜單按鈕個數
40017 invalid button type 不合法的按鈕類型
40018 invalid button name size 不合法的按鈕名稱長度
40019 invalid button key size 不合法的按鈕KEY長度
40020 invalid button url size 不合法的url長度
40023 invalid sub button size 不合法的子菜單按鈕個數
40024 invalid sub button type 不合法的子菜單類型
40025 invalid sub button name size 不合法的子菜單按鈕名稱長度
40026 invalid sub button key size 不合法的子菜單按鈕KEY長度
40027 invalid sub button url size 不合法的子菜單按鈕url長度
40029 invalid code 不合法或已過期的code
40030 invalid refresh_token 不合法的refresh_token
40036 invalid template_id size 不合法的template_id長度
40037 invalid template_id 不合法的template_id
40039 invalid url size 不合法的url長度
40048 invalid url domain 不合法的url域名
40054 invalid sub button url domain 不合法的子菜單按鈕url域名
40055 invalid button url domain 不合法的菜單按鈕url域名
40066 invalid url 不合法的url
41001 access_token missing 缺失access_token參數
41002 appid missing 缺失appid參數
41003 refresh_token missing 缺失refresh_token參數
41004 appsecret missing 缺失secret參數
41005 media data missing 缺失二進制媒體文件
41006 media_id missing 缺失media_id參數
41007 sub_menu data missing 缺失子菜單數據
41008 missing code 缺失code參數
41009 missing openid 缺失openid參數
41010 missing url 缺失url參數
42001 access_token expired access_token超時
42002 refresh_token expired refresh_token超時
42003 code expired code超時
43001 require GET method 需要使用GET方法請求
43002 require POST method 需要使用POST方法請求
43003 require https 需要使用HTTPS
43004 require subscribe 需要訂閱關系
44001 empty media data 空白的二進制數據
44002 empty post data 空白的POST數據
44003 empty news data 空白的news數據
44004 empty content 空白的內容
44005 empty list size 空白的列表
45001 media size out of limit 二進制文件超過限制
45002 content size out of limit content參數超過限制
45003 title size out of limit title參數超過限制
45004 description size out of limit description參數超過限制
45005 url size out of limit url參數長度超過限制
45006 picurl size out of limit picurl參數超過限制
45007 playtime out of limit 播放時間超過限制(語音為60s最大)
45008 article size out of limit article參數超過限制
45009 api freq out of limit 接口調動頻率超過限制
45010 create menu limit 建立菜單被限制
45011 api limit 頻率限制
45012 template size out of limit 模板大小超過限制
45016 can't modify sys group 不能修改默認組
45017 can't set group name too long sys group 修改組名過長
45018 too many group now, no need to add new 組數量過多
50001 api unauthorized 接口未授權