友盟的分享,每次都單獨(dú)配置,有點(diǎn)麻煩,整了個(gè)庫(kù)
Android的分享功能友盟用的蠻多的,一般情況下自帶的分享面板就滿足需求了,但是也有一些情況下需要在自己的項(xiàng)目里點(diǎn)擊按鈕直接跳轉(zhuǎn)分享,所以自帶的就不太給力了。這里記錄一下項(xiàng)目里自定義分享功能,官方文檔里也說(shuō)明了需要怎么處理,但是對(duì)于剛接觸的人來(lái)說(shuō)可能就不是那么明了了。這里記錄一下下,看看文檔,然后開(kāi)搞!
注:由于騰訊開(kāi)放平臺(tái)增加包名、簽名校驗(yàn),因此使用QQ、Qzone的分享、授權(quán)功能的開(kāi)發(fā)者
必須使用自己在騰訊開(kāi)放平臺(tái)申請(qǐng)獲取的QQ APPID,否則將無(wú)法正常使用。
一、配置 由于我把整個(gè)分享部分弄成依賴(lài)庫(kù)了,所以除開(kāi)QQ微信必須的東西,只需要依賴(lài)就行了
- 1.注冊(cè)下載SDK,準(zhǔn)備QQ微信的ID啊什么的。
- 2.配置SDK。
在項(xiàng)目的build.gradle加入代碼
allprojects {
repositories {
...
maven { url "https://jitpack.io" }
}
}
在module的build.gradle加入
dependencies {
compile 'com.github.paradoxie:UmengSocialLibrary:0.2'//0.2版本V7版本為23.3.0
//正在用22的朋友依賴(lài)0.3版本,v7為22.0.+,源碼里面是新開(kāi)了一個(gè)分支
}
- 3.配置manifest.xml的權(quán)限和必要的activity
這樣就能調(diào)用到友盟的方法了
二、友盟集成的分享
添加友盟分享Controller成員變量
private final UMSocialService mSocialService =
UMServiceFactory.getUMSocialService("com.umeng.share");
在喚起分享的點(diǎn)擊事件中加入:
mSocialService.setShareContent("分享內(nèi)容");
mSocialService.setShareMedia(new UMImage(SettingActivity.this, 圖標(biāo)));
mSocialService.getConfig().removePlatform(SHARE_MEDIA.SINA, SHARE_MEDIA.TENCENT);
// 添加微信平臺(tái)
UMWXHandler wxHandler = new UMWXHandler(SettingActivity.this, appId, appSecret);
wxHandler.addToSocialSDK();
wxHandler.setTitle(getString(R.string.app_name));
wxHandler.setTargetUrl(getString(R.string.sms_spread_url));
// 添加微信朋友圈
UMWXHandler wxCircleHandler = new UMWXHandler(SettingActivity.this, appId, appSecret);
wxCircleHandler.setToCircle(true);
wxCircleHandler.addToSocialSDK();
wxCircleHandler.setTitle(getString(R.string.app_name));
wxCircleHandler.setTargetUrl(getString(R.string.sms_spread_url));
//參數(shù)1為當(dāng)前Activity,參數(shù)2為開(kāi)發(fā)者在QQ互聯(lián)申請(qǐng)的APP ID,參數(shù)3為開(kāi)發(fā)者在QQ互聯(lián)申請(qǐng)的APP kEY
UMQQSsoHandler qqSsoHandler = new UMQQSsoHandler(SettingActivity.this, "APP ID", "APP KEY");
qqSsoHandler.addToSocialSDK();
qqSsoHandler.setTitle(getString(R.string.app_name));
qqSsoHandler.setTargetUrl(getString(R.string.sms_spread_url));
//參數(shù)1為當(dāng)前Activity,參數(shù)2為開(kāi)發(fā)者在QQ互聯(lián)申請(qǐng)的APP ID,參數(shù)3為開(kāi)發(fā)者在QQ互聯(lián)申請(qǐng)的APP kEY.
QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler(SettingActivity.this, "APP ID","APP KEY");
qZoneSsoHandler.addToSocialSDK();
qZoneSsoHandler.setTargetUrl(getString(R.string.sms_spread_url));
最后
mSocialService.openShare(SettingActivity.this, false);
三、自定義分享面板
首先看官方文檔的做法
new ShareAction(this)
.setPlatform(SHARE_MEDIA.SINA)
.setCallback(umShareListener)
.withText("hello umeng video")
.withTargetUrl("http://www.baidu.com")
.withMedia(image).share();
傳入了umShareListener,需要重寫(xiě)回調(diào)接口:
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_SHOR T).show();
}
@Override
public void onCancel(SHARE_MEDIA platform) {
Toast.makeText(ShareActivity.this,platform + " 分享取消了", Toast.LENGTH_SHORT).show();
}
};
講真,第一次看有點(diǎn)蒙逼。。。
*假裝有條分割線。。。。。。。。
開(kāi)始搞自己的:
首先,自己的面板也就是沒(méi)有面板。。。也就是隨便來(lái)個(gè)按鈕都能喚起分享,所以需要來(lái)個(gè)方法響應(yīng)點(diǎn)擊事件。在此之前,需要將支持的平臺(tái)初始化加入到SocialSDK,初始化控件之前:
private void prepareShare(){
// 添加微信平臺(tái)
UMWXHandler wxHandler = new UMWXHandler(this, Common.APP_ID, Common.APP_SECRET);
wxHandler.addToSocialSDK();
// 支持微信朋友圈
UMWXHandler wxCircleHandler = new UMWXHandler(this, Common.APP_ID, Common.APP_SECRET);
wxCircleHandler.setToCircle(true);
wxCircleHandler.addToSocialSDK();
//支持QQ
UMQQSsoHandler qqSsoHandler = new UMQQSsoHandler(this, "APP ID","APP KEY");
qqSsoHandler.addToSocialSDK();
//QQ空間分享
QZoneSsoHandler qZoneSsoHandler = new QZoneSsoHandler(this, "APP ID","APP KEY");
qZoneSsoHandler.addToSocialSDK();
//新浪微博不用這么干
//SinaSsoHandler sinaSsoHandler = new SinaSsoHandler(this);
//sinaSsoHandler.addToSocialSDK();
}
類(lèi)成員變量mController:
private final UMSocialService mController =
UMServiceFactory.getUMSocialService("com.umeng.share", RequestType.SOCIAL);
然后仿造官方的開(kāi)始封裝自定義分享方法,回調(diào)監(jiān)聽(tīng),抽象出了很多參數(shù),這樣在點(diǎn)擊事件中可以直接傳值。
/**
* 友盟社會(huì)化分享自定義 *
* @param context 上下文
* @param mController 分享服務(wù)
* @param var 平臺(tái)類(lèi)型
* @param content 平臺(tái)
*/
public static void shareToFriend(Context context, final UMSocialService mController, SHARE_MEDIA var, BaseShareContent content) {
// WeiXinShareContent weixinContent = new WeiXinShareContent();
//設(shè)置分享文字
content.setShareContent("內(nèi)容");
//設(shè)置title
content.setTitle("標(biāo)題");
//設(shè)置分享內(nèi)容跳轉(zhuǎn)URL
content.setTargetUrl("WWW.BAIDU.COM" );
//設(shè)置分享圖片
UMImage img = new UMImage(context, R.drawable.ic_launcher);
content.setShareImage(img);
mController.setShareMedia(content);
setShareBtn(context, mController, var);
}
/**
* 設(shè)置自定義監(jiān)聽(tīng) *
* @param context 上下文
* @param mController 分享服務(wù)
* @param var 平開(kāi)類(lèi)型
*/
private static void setShareBtn(final Context context, final UMSocialService mController, SHARE_MEDIA var) {
mController.postShare(context, var, new SocializeListeners.SnsPostListener() {
@Override
public void onStart() {
}
@Override
public void onComplete(SHARE_MEDIA arg0, int eCode,SocializeEntity arg2) {
if (eCode == 200) {
} else {
String eMsg = "";
if (eCode == -101) {
eMsg = "沒(méi)有授權(quán)";
}
}
}
});
}
比如上面的SHARE_MEDIA參數(shù),即可傳入SHARE_MEDIA.WEIXIN,微博QQ類(lèi)推。
而最后的參數(shù)為BaseShareContent類(lèi)型,實(shí)際傳參是new出平臺(tái)對(duì)象就可以了,如:new QZoneShareContent()作為參數(shù)傳入方法。
封裝后的點(diǎn)擊事件
//新浪微博
shareToFriend(this, mController, SHARE_MEDIA.SINA, new SinaShareContent());
//QQ空間
shareToFriend(this, mController, SHARE_MEDIA.QZONE, new QZoneShareContent());
//QQ
shareToFriend(this, mController, SHARE_MEDIA.QQ, new QQShareContent());
//微信
shareToFriend(this, mController, SHARE_MEDIA.WEIXIN, new WeiXinShareContent());
//微信朋友圈
shareToFriend(this, mController, SHARE_MEDIA.WEIXIN_CIRCLE, new CircleShareContent());
到這里就OK啦(__)
更加直觀系統(tǒng)的使用參看項(xiàng)目?jī)?nèi)Demo
本文作者:paradoxie
個(gè)人主頁(yè):謝盒盒的小黑屋,不止說(shuō)技術(shù)
簡(jiǎn)書(shū)地址:簡(jiǎn)書(shū)主頁(yè),專(zhuān)注說(shuō)技術(shù)
github地址:paradoxie
轉(zhuǎn)載請(qǐng)注明出處,蟹蟹!
-------我的夢(mèng)想真的是做一條咸魚(yú)!