本篇文章主要記錄自己采用官方SDK方式實(shí)現(xiàn)Facebook闲勺、Twitter的分享功能曾棕,F(xiàn)acebook實(shí)現(xiàn)起來(lái)還是很簡(jiǎn)單的,主要是Twitter的實(shí)現(xiàn)走了一些彎路菜循,在此做一個(gè)簡(jiǎn)單的記錄翘地。
官方文檔的鏈接:
- 項(xiàng)目配置:https://dev.twitter.com/twitterkit/android/installation
- 發(fā)推文:https://dev.twitter.com/twitterkit/android/compose-tweets
Facebook分享
Facebook的官方文檔還是很詳細(xì)的,只要到開(kāi)發(fā)者控制臺(tái)創(chuàng)建應(yīng)用债朵,按照步驟一步一步就可以配置好子眶,還是很簡(jiǎn)單的,就不贅述了序芦。
這里簡(jiǎn)單將項(xiàng)目代碼中的幾個(gè)部分作簡(jiǎn)要總結(jié):
- 添加項(xiàng)目依賴(lài)
compile 'com.facebook.android:facebook-android-sdk:[4,5)' //facebook分享
- 將facebook_app_id(開(kāi)發(fā)者控制臺(tái)創(chuàng)建應(yīng)用即可獲得臭杰,應(yīng)用編號(hào)就是facebook_app_id)配置到values/string.xml
<!--替換自己的key-->
<string name="facebook_app_id">1964233977152758</string>
- 注冊(cè)清單文件
<!--FACEBOOK分享-->
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />
//FacebookContentProvider后的數(shù)字替換成自己的facebook_app_id
<provider
android:name="com.facebook.FacebookContentProvider"
android:authorities="com.facebook.app.FacebookContentProvider1964233977152758"
android:exported="true" />
//瀏覽器分享卡片,未安裝客戶(hù)端時(shí)彈出
<activity
android:name="com.facebook.CustomTabActivity"
android:exported="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="fb1964233977152758" />//fb后的數(shù)字替換成自己的facebook_app_id
</intent-filter>
</activity>
- activity中初始化以及添加分享事件
/**
* facebook配置, 在oncreate()方法中調(diào)用
*/
private void initFacebook() {
//抽取成員變量
callbackManager = CallbackManager.Factory.create();
shareDialog = new ShareDialog(this);
// this part is optional
shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() {
@Override
public void onSuccess(Sharer.Result result) {
//分享成功的回調(diào),在這里做一些自己的邏輯處理
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException error) {
}
});
}
/**
* 這是一個(gè)按鈕的點(diǎn)擊事件谚中,分享到facebook
* 若未安裝facebook客戶(hù)端渴杆,則會(huì)跳轉(zhuǎn)到瀏覽器
*
* @param view
*/
public void shareToFacebook(View view) {
//這里分享一個(gè)鏈接,更多分享配置參考官方介紹:https://developers.facebook.com/docs/sharing/android
if (ShareDialog.canShow(ShareLinkContent.class)) {
ShareLinkContent linkContent = new ShareLinkContent.Builder()
.setContentUrl(Uri.parse("https://developers.facebook.com"))
.build();
shareDialog.show(linkContent);
}
}
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
//facebook的界面回調(diào)
callbackManager.onActivityResult(requestCode, resultCode, data);
}
完整代碼已上傳至GitHub:https://github.com/and2long/ShareDemo
Twitter分享
相對(duì)于Facebook宪塔,完成Twitter的分享功能還是花費(fèi)了不少時(shí)間的磁奖,在網(wǎng)上搜索Twitter分享功能實(shí)現(xiàn),搜出來(lái)的文章都是說(shuō)用fabric某筐,相關(guān)的配置一大堆比搭,看著就頭疼(頓時(shí)懶癌癥就犯了)。
最后經(jīng)過(guò)仔細(xì)查閱官方文檔南誊,發(fā)現(xiàn)并不需要fabric即可實(shí)現(xiàn)身诺。
這里將實(shí)現(xiàn)步驟做簡(jiǎn)要總結(jié):
- 在Twitter開(kāi)發(fā)者控制臺(tái)創(chuàng)建應(yīng)用蜜托,獲得API Key和API Secret
- 添加項(xiàng)目依賴(lài)
compile 'com.twitter.sdk.android:twitter:3.0.0' //twitter分享
compile 'com.twitter.sdk.android:tweet-composer:3.0.0' //twitter分享,發(fā)布推文
- 將API Key和API Secret配置到values/string.xml
<!--替換自己的key-->
<string name="com.twitter.sdk.android.CONSUMER_KEY">jFRczHoA7jym7X9DYOG6IMQab</string>
<string name="com.twitter.sdk.android.CONSUMER_SECRET">X3hYoUjklg5c3QpLi6MPx487nmGSGjlMm77kTAWMeRJPt9Xmlu</string>
- 在application中初始化
public class App extends Application {
@Override
public void onCreate() {
super.onCreate();
//初始化Twitter
Twitter.initialize(this);
}
}
- 添加分享事件
/**
* 分享到twitter
* 若未安裝twitter客戶(hù)端霉赡,則會(huì)跳轉(zhuǎn)到瀏覽器
*
* @param view
*/
public void shareToTwitter(View view) {
//這里分享一個(gè)鏈接橄务,更多分享配置參考官方介紹:https://dev.twitter.com/twitterkit/android/compose-tweets
try {
TweetComposer.Builder builder = new TweetComposer.Builder(MainActivity.this)
.url(new URL("https://www.google.com/"));
builder.show();
} catch (MalformedURLException e) {
e.printStackTrace();
}
}
- 分享結(jié)果回調(diào),這一點(diǎn)有所不同穴亏,Twitter的分享回調(diào)是用廣播的方式接受的蜂挪。所以需要自己寫(xiě)一個(gè)廣播處理回調(diào)事件,并注冊(cè)到清單文件嗓化。
public class MyResultReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (TweetUploadService.UPLOAD_SUCCESS.equals(intent.getAction())) {
// success Twitter分享成功的回調(diào)
final Long tweetId = intent.getExtras().getLong(TweetUploadService.EXTRA_TWEET_ID);
} else {
// failure
final Intent retryIntent = intent.getExtras().getParcelable(TweetUploadService.EXTRA_RETRY_INTENT);
}
}
}
<!--Twitter分享的接受廣播-->
<receiver
android:name=".MyResultReceiver"
android:exported="false">
<intent-filter>
<action android:name="com.twitter.sdk.android.tweetcomposer.UPLOAD_SUCCESS" />
<action android:name="com.twitter.sdk.android.tweetcomposer.UPLOAD_FAILURE" />
</intent-filter>
到這里棠涮,Twitter的分享功能就完成了。
有小伙伴說(shuō)分享后的回調(diào)么有走蟆湖,還是再檢查檢查自己的代碼吧故爵,這里直接貼出官方的文檔介紹以供參考:
完整代碼已上傳到GitHub:https://github.com/and2long/ShareDemo
這篇文章中的分享功能都是采用的標(biāo)準(zhǔn)分享方式,即點(diǎn)擊分享按鈕 --> 彈出分享對(duì)話框 --> 編輯分享內(nèi)容 --> 確定分享隅津。
但是有時(shí)候項(xiàng)目中的需求不是這樣的诬垂,比如:不彈出分享對(duì)話框,點(diǎn)擊分享按鈕便直接將需要分享的內(nèi)容直接分享出去伦仍。
這個(gè)需求官方文檔貌似沒(méi)有給出詳細(xì)的實(shí)現(xiàn)方式结窘,由于篇幅原因,這里就不再寫(xiě)出了充蓝,如果有小伙伴有同樣的需求隧枫,可私信我。