前段日子做了一個新聞類的應用,作爲一個新聞類的應用,分享是必不可少的一個功能,也就是我們經常看到的熟悉的頁面:
由於自己是初次接觸,很多的東西都不是很明白,如今回頭看看,真的沒有很多的東西!由於是基於第三方做的一些開發,所以我們需要做的也就是按照規範直接調用即可!說歸說,但是在實踐的過程中還是會遇到各種各樣的問題,接下來就將自己在過程中遇到的問題以及需要注意的點分享給大家,希望可以幫助到剛剛接觸到這一塊技術的親們!
一、各種平臺賬號的註冊
友盟官網註冊自己的賬號、微信開放平臺註冊自己的賬號、qq互聯註冊自己的賬號(這個可以和自己的PM要一下),這個在後邊的代碼中會使用得到,而且是你的應用的唯一標示,接下來就需要按照官方文檔上的提示一步步去實現了。
**注意:這裏註冊的賬號一定要根據自己的實際情況對應,如果自己做的是移動應用就註冊移動應用、如果是網站應用即註冊網站應用!
二、SDK導入和調用
友盟官方提供了三種導入SDK的方法,如果你是第一次接觸這個,推薦使用快速集成的方案,這樣可以減少不少的麻煩,想要實現什麼平臺的分享就對應勾選起來即可。例如只做qq和微信的分享,只需要勾選相應的平臺和自己需要的資料即可!(如果是初次接觸,建議將文檔及工程demo都下載下來,方便自己的學習)
再接下來就是配置文件中權限的配置,
<!-- QQ、QQ空間所需權限 -->
<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 -->
<activity
android:name=".wxapi.WXEntryActivity"
android:configChanges="keyboardHidden|orientation|screenSize"
android:exported="true"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" />
<activity
android:name="com.umeng.socialize.view.ShareActivity"
android:configChanges="orientation|keyboard"
android:launchMode="singleTask"
android:noHistory="true"
android:theme="@style/Theme.UMDialog"
android:windowSoftInputMode="stateVisible|adjustResize" />
<!-- ############ QQ空間和QQ SSO授權的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" />
<!-- 100424468,如果你使用的公用賬號,則不需要修改;否則修改成你在QQ開放平臺申請的 APP ID -->
<data android:scheme="tencent1104805317" />
</intent-filter>
</activity>
<activity
android:name="com.tencent.connect.common.AssistActivity"
android:screenOrientation="portrait"
android:theme="@android:style/Theme.Translucent.NoTitleBar" >
</activity>
<!-- 友盟APPID -->
<meta-data
android:name="UMENG_APPKEY"
android:value="55ecf150e0f55a537400042f" >
</meta-data>
</application>
<!-- ###################聲明SDK使用的相關權限###################### -->
<!-- 檢測網絡狀態 -->
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" />
<!-- 獲取mac地址作爲用戶的備用唯一標識 -->
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" />
<!-- 獲取用戶手機的IMEI,用來唯一的標識用戶 -->
<uses-permission android:name="android.permission.READ_PHONE_STATE" />
<!-- 緩存資源優先存入SDcard -->
<uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE" />
<!-- 允許應用程序聯網,以便向我們的服務器端發送數據 -->
<uses-permission android:name="android.permission.INTERNET" />
<!-- QQ、QQ空間所需權限 -->
<uses-permission android:name="android.permission.GET_TASKS" />
注:這裏的配置主要是對各個平臺的權限配置和友盟APPID的配置
<!-- 友盟APPID -->
<meta-data
android:name="UMENG_APPKEY"
android:value="55ecf150e0f55a537400042f" >
</meta-data>
最後就是在自己的activity中實現友盟控制器的使用。
1.聲明分享控制器
final UMSocialService mController = UMServiceFactory
.getUMSocialService("com.umeng.share");
2.在onCreate方法中添加各個分享平臺
// 添加微信平臺到SDK
UMWXHandler wxHandler = new UMWXHandler(PictureViewInfoActivity.this,
"wxd4d271556de359af", "55958b52d9760b0e9ae763ecc380d198");
wxHandler.addToSocialSDK();
// 添加微信朋友圈平臺到SDK
UMWXHandler wxCicleHandler = new UMWXHandler(
PictureViewInfoActivity.this, "wxd4d271556de359af",
"55958b52d9760b0e9ae763ecc380d198");
wxCicleHandler.setToCircle(true);
wxCicleHandler.addToSocialSDK();
// 添加qq到SDK,參數1爲當前Activity,參數2爲開發者在QQ互聯申請的APP ID,參數3爲開發者在QQ互聯申請的APP kEY.
UMQQSsoHandler qqSsoHandler = new UMQQSsoHandler(
PictureViewInfoActivity.this, "1104805317", "gvdED7aW06yaigv7");
qqSsoHandler.addToSocialSDK();
// 添加qq空間平臺到SDK
QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler(
PictureViewInfoActivity.this, "1104805317", "gvdED7aW06yaigv7");
qZoneSsoHandler.addToSocialSDK();
// 去除人人網、豆瓣網、騰訊微博、新浪微博的分享
mController.getConfig().removePlatform(SHARE_MEDIA.RENREN,
SHARE_MEDIA.DOUBAN, SHARE_MEDIA.SINA, SHARE_MEDIA.TENCENT);
3.打開分享面板;
share = (LinearLayout) findViewById(R.id.picView_Share);
share.setOnClickListener(new OnClickListener() {
@Override
public void onClick(View v) {
// TODO Auto-generated method stub
mController.openShare(PictureViewInfoActivity.this, false);
}
});
4.設置分享內容;
// 設置分享內容
try {
/*-------------------------設置微信好友分享內容-------------------*/
WeiXinShareContent weixinContent = new WeiXinShareContent();
// 設置分享文字
weixinContent.setShareContent(pictureViewInfo.get(0)
.getTitle());
// 設置title
weixinContent.setTitle("來自***的分享");
// 設置分享內容跳轉URL
weixinContent.setTargetUrl(URLs.SOCIAL_SHARE_HTTP
+ pictureViewInfo.get(0).getUid() + "");
// 設置分享圖片
weixinContent.setShareImage(new UMImage(
PictureViewInfoActivity.this, URLs.imgeUrl
+ pictureViewInfo.get(0).getPath()));
mController.setShareMedia(weixinContent);
/*-------------------------設置微信朋友圈分享內容----------------------------*/
CircleShareContent circleMedia = new CircleShareContent();
circleMedia.setShareContent("*******!");
circleMedia.setTitle("來自***的分享" + " | "
+ pictureViewInfo.get(0).getTitle());
circleMedia.setShareMedia(new UMImage(
PictureViewInfoActivity.this, URLs.imgeUrl
+ pictureViewInfo.get(0).getPath()));
circleMedia.setTargetUrl(URLs.SOCIAL_SHARE_HTTP
+ pictureViewInfo.get(0).getUid() + "");
mController.setShareMedia(circleMedia);
/*--------------------------------qq-----------------------------*/
QQShareContent qqShareContent = new QQShareContent();
// 設置分享文字
qqShareContent.setShareContent(pictureViewInfo.get(0)
.getTitle());
// 設置分享title
qqShareContent.setTitle("來自***的分享");
// 設置分享圖片
qqShareContent.setShareImage(new UMImage(
PictureViewInfoActivity.this, URLs.imgeUrl
+ pictureViewInfo.get(0).getPath()));
// 設置點擊分享內容的跳轉鏈接
qqShareContent.setTargetUrl(URLs.SOCIAL_SHARE_HTTP
+ pictureViewInfo.get(0).getUid() + "");
mController.setShareMedia(qqShareContent);
/*--------------------------------qq空間-----------------------------*/
QZoneShareContent qzone = new QZoneShareContent();
// 設置分享文字
qzone.setShareContent(pictureViewInfo.get(0).getTitle());
// 設置分享內容的標題
qzone.setTitle("來自***的分享");
// 設置分享圖片
qzone.setShareImage(new UMImage(
PictureViewInfoActivity.this, URLs.imgeUrl
+ pictureViewInfo.get(0).getPath()));
// 設置點擊消息的跳轉URL
qzone.setTargetUrl(URLs.SOCIAL_SHARE_HTTP
+ pictureViewInfo.get(0).getUid() + "");
mController.setShareMedia(qzone);
// mController
// .setShareContent(pictureViewInfo.get(0).getTitle()
// +
// "http://123.56.114.148:8082/CheDuanZi/api/json!share.do?articleId="
// + pictureViewInfo.get(0).getUid());
// // 設置分享圖片
// mController.setShareMedia(new UMImage(
// PictureViewInfoActivity.this,
// "http://123.56.114.148:8082/CheDuanZi/statics"
// + pictureViewInfo.get(0).getPath()));
// 設置點擊分享內容的跳轉鏈接
// qqShareContent
// .setTargetUrl("http://123.56.114.148:8082/CheDuanZi/api/json!share.do?articleId=100");
// mController.setShareMedia(qqShareContent);
} catch (Exception e) {
// TODO: handle exception
}
需要注意的是分享內容必須設置setTargetUrl()和setShareContent(),這裏只列出了qq好友、空間和微信好友、朋友圈的分享,其他平臺的分享內容的設置以此類推!
一切就緒之後,還需要提醒的是微信分享功能的測試是需要打包測試的,很多人就是因爲不知道這一點而發愁了半天也不能實現;如果需要調試qq分享的話可以在互聯平臺上填寫自己的調試qq號碼,供自己調試使用,和打包測試相比很是方便!
最後提示一下大家,儘可能在官網上找資料,網絡上查到的東西儘管很多,但是他的真實性無法保證!就拿自己在設置微信分享的APPID和APPSecret時,網上有資料說是用打包時的MD5碼和SH1碼,
但事實證明這個是不對的,正確的答案是微信開發平臺上得到的APPID和APPSecret;
克服自己內心的抵觸、恐懼心理,相信大家一定可以做到!