友盟官方文檔
http://dev.umeng.com/social/android/quick-integration?spm=0.0.0.0.pG0caE
1. 產品概述
關于分享和授權的sdk接口,我們在v5.0做出了巨大的改變,精簡了接口調用的代碼。并將分享授權,與評論等功能做出了隔離,使結構更加清晰。所以本版本的功能也只有分享與授權并無其他功能,請開發者注意。
注意:本文示例代碼只有分享與授權功能,并對接口進行了調整,如需要原功能的開發者,請繼續使用v4.3.0版本。
2. 獲取友盟Appkey
如果你之前已經在友盟注冊了應用,并獲取到了Appkey,可以繼續使用它.
如果你尚未在友盟注冊開發者賬號,需要先注冊,注冊之后登錄你的賬號,點擊添加新應用,填寫完應用基本信息后,將進入"下載SDK并添加代碼"頁面,此頁面即可得到Appkey。
3. 下載官方SDK
關于這一步,自行到官網下載即可,無非就是把下載好的jar包拷貝到項目中(按友盟官方文檔來即可)
4、AndroidManifest配置
在AndroidManifest.xml中的 <application></<application>中設置
(1)友盟Appkey(注意value需要設置成你自己的值,否則會失敗)
<meta-data
android:name="UMENG_APPKEY"
android:value="561cae6ae0f55abd990035bf">
</meta-data>
(2)增加權限
<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" />
(3)針對不平臺所需要添加的數據,按照自己需要的平臺添加對應的配置
微信:
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
qq精簡版:
<activity
android:name="com.umeng.qq.tencent.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.umeng.qq.tencent.AssistActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:configChanges="orientation|keyboardHidden|screenSize"/>
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"/>
5、建立一個application文件,隨便起一個名字,比如叫App,別忘了在AndroidManifest文件中配置(如果本身已有,不需要重新建立):
在application類中配置第三方分享平臺的appkey以及友盟的初始化:
public class MyApplication extends Application {
{
PlatformConfig.setWeixin("wx7db093453016ae52", "d0d9e6d67b85b128261d4131515d3a97");
PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
}
@Override
public void onCreate() {
super.onCreate();
//初始化友盟sdk
UMShareAPI.get(this);
}
關于各個平臺的配置,各個平臺的配置,建議放在全局Application或者程序入口(需要到各個平臺去注冊申請)
PlatformConfig.setWeixin("wx967daebe835fbeac", "5bb696d9ccd75a38c8a0bfe0675559b3");
//微信 appid appsecret
PlatformConfig.setSinaWeibo("3921700954","04b48b094faeb16683c32669824ebdad");
//新浪微博 appkey appsecret
PlatformConfig.setQQZone("100424468", "c7394704798a158208a74ab60104f0ba");
// QQ和Qzone appid appkey
PlatformConfig.setAlipay("2015111700822536");
//支付寶 appid
PlatformConfig.setYixin("yxc0614e80c9304c11b0391514d09f13bf");
//易信 appkey
PlatformConfig.setTwitter("3aIN7fuF685MuZ7jtXkQxalyi", "MK6FEYG63eWcpDFgRYw4w9puJhzDl0tyuqWjZ3M7XJuuG7mMbO");
//Twitter appid appkey
PlatformConfig.setPinterest("1439206");
//Pinterest appid
PlatformConfig.setLaiwang("laiwangd497e70d4", "d497e70d4c3e4efeab1381476bac4c5e");
//來往 appid appkey
---------------------至此友盟分享的配置已經完成---------------------------------
接下來就是分享的完整代碼了
public class ShareUtils {
private Activity activity;
private String targetUrl; //分享的鏈接
public ShareUtils(Activity activity, String targetUrl){
this.activity = activity;
this.targetUrl = targetUrl;
}
//多平臺分享(qq、qq空間、微信、微信朋友圈)
public void shareMorePlatform() {
new ShareAction(activity).setDisplayList(
SHARE_MEDIA.QQ, SHARE_MEDIA.QZONE, SHARE_MEDIA.WEIXIN,
SHARE_MEDIA.WEIXIN_CIRCLE)
.setShareboardclickCallback(shareBoardlistener).open();
}
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(activity, "add button success", Toast.LENGTH_SHORT).show();
}
} else {
new ShareAction(activity)
.setPlatform(share_media)
.setCallback(umShareListener)
.withText("來自知么網絡的分享")
//分享圖片
.withMedia(new UMImage(activity, R.drawable.applogo120))
//分享網絡鏈接
.withTargetUrl(targetUrl)
.share();
}
}
};
private UMShareListener umShareListener = new UMShareListener() {
@Override
public void onResult(SHARE_MEDIA platform) {
Log.i("plat", "---->分享成功了");
Log.i("plat", "platform" + platform);
Toast.makeText(activity, "分享成功啦", Toast.LENGTH_SHORT).show();
}
@Override
public void onError(SHARE_MEDIA platform, Throwable t) {
Toast.makeText(activity, "分享失敗啦", Toast.LENGTH_SHORT).show();
if (t != null) {
Log.i("plat", "---->分享失敗了");
Log.i("throw", "throw:" + t.getMessage() + t.getCause());
}
}
@Override
public void onCancel(SHARE_MEDIA platform) {
Toast.makeText(activity, "分享取消了", Toast.LENGTH_SHORT).show();
}
};
}
6、關于微信分享
在你的項目的包名目錄下創建wxapi文件夾,新建一個名為WXEntryActivity的activity繼承WXCallbackActivity。這里注意一定是包名路徑下,例如我的包名是com.umeng.soexample,則配置如下:(需要注意,如果使用精簡版WXCallbackActivity的路徑為com.umeng.weixin.callback.WXCallbackActivity,如果使用完整版路徑是com.umeng.socialize.weixin.view.WXCallbackActivity)
關于微信平臺申請對應的appkey需要的注意事項,(我的項目一開始就是沒有在微信平臺設置好這個簽名,就一直打不開微信分享)
1)簽名
2)包名(必須是你的項目的包名)
簽名的獲取可以參考這篇博客
<a > 微信開放平臺中android 應用簽名的獲取</a>
微信簽名說明
由于微信的簽名過程跟驗證流程較多,出錯的可能性較大,這里將對微信的簽名過程跟驗證做詳細的說明。
首先必須確保正確設置微信AppID及secret 工程的包名必須同申請應用的包名一致。 在微信開放平臺填寫你App的的簽名,測試、發布時要保證App的簽名跟微信開放平臺的簽名一致。 開發者的應用需要通過審核。開發者在申請應用必須要通過微信官網的審核才能進行調試,可以使用簽名工具自行檢查比對
8.3.1 獲取簽名
獲取應用簽名方式有兩種
8.3.1.1 方式一:
用eclipse導出 帶簽名 的apk文件,注意此時選擇的簽名文件是你發布app時的簽名文件。在導出的最后一步,eclipse會顯示一個Certificate fingerprints(證書指紋),如下圖。此時找到MD5值,將該MD5值復制出來,按照“ 去掉冒號(:),大寫轉小寫 ”的規則裝換,此時字符串就是簽名。
8.3.1.2 方式二:
導出 帶簽名 的apk文件,將該apk文件安裝至手機中。安裝微信的簽名工具,打開應用程序,即可得到簽名。
將獲取到的簽名和下圖進行比對
注意如果修改了微信平臺的包名和簽名,需要重裝微信客戶端后才可以測試,否則本地會保留之前的簽名緩存
7、QQ及Qzone登錄
實現方法同樣如上,注意下面幾點:
QQ及Qzone登錄都必須安裝QQ客戶端,并且只能跳轉QQ客戶端實現登錄,無法跳轉到Qzone客戶端
QQ及Qzone登錄需要確保在騰訊平臺通過審核或添加測試賬號,否則會報錯110406
QQ及Qzone登錄必須確保apk簽名與騰訊平臺上傳的apk簽名匹配,否則會報錯100044,出現此錯誤請聯系騰訊平臺人員(QQ:800013811 )修改apk簽名
注意將Android manifest xml里的 騰訊平臺APPID替換為自己申請的APPID,注意tencent前綴不要修改,否則無法正常實現QQ及Qzone登錄
平臺授權,是需要安裝對應的客戶端的。新浪微博,豆瓣網,人人網除外,新浪和人人如果本地安裝了對應平臺是走本地授權,如果沒有安裝,需要走網絡授權