本篇文章主要记录自己采用官方SDK方式实现Facebook、Twitter的分享功能,Facebook实现起来还是很简单的,主要是Twitter的实现走了一些弯路,在此做一个简单的记录。
官方文档的链接:
- 项目配置:https://dev.twitter.com/twitterkit/android/installation
- 发推文:https://dev.twitter.com/twitterkit/android/compose-tweets
Facebook分享
Facebook的官方文档还是很详细的,只要到开发者控制台创建应用,按照步骤一步一步就可以配置好,还是很简单的,就不赘述了。
这里简单将项目代码中的几个部分作简要总结:
- 添加项目依赖
compile 'com.facebook.android:facebook-android-sdk:[4,5)' //facebook分享
- 将facebook_app_id(开发者控制台创建应用即可获得,应用编号就是facebook_app_id)配置到values/string.xml
<!--替换自己的key-->
<string name="facebook_app_id">1964233977152758</string>
- 注册清单文件
<!--FACEBOOK分享-->
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />
//FacebookContentProvider后的数字替换成自己的facebook_app_id
<provider
android:name="com.facebook.FacebookContentProvider"
android:authorities="com.facebook.app.FacebookContentProvider1964233977152758"
android:exported="true" />
//浏览器分享卡片,未安装客户端时弹出
<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后的数字替换成自己的facebook_app_id
</intent-filter>
</activity>
- activity中初始化以及添加分享事件
/**
* facebook配置, 在oncreate()方法中调用
*/
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) {
//分享成功的回调,在这里做一些自己的逻辑处理
}
@Override
public void onCancel() {
}
@Override
public void onError(FacebookException error) {
}
});
}
/**
* 这是一个按钮的点击事件,分享到facebook
* 若未安装facebook客户端,则会跳转到浏览器
*
* @param view
*/
public void shareToFacebook(View view) {
//这里分享一个链接,更多分享配置参考官方介绍: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的界面回调
callbackManager.onActivityResult(requestCode, resultCode, data);
}
完整代码已上传至GitHub:https://github.com/and2long/ShareDemo
Twitter分享
相对于Facebook,完成Twitter的分享功能还是花费了不少时间的,在网上搜索Twitter分享功能实现,搜出来的文章都是说用fabric,相关的配置一大堆,看着就头疼(顿时懒癌症就犯了)。
最后经过仔细查阅官方文档,发现并不需要fabric即可实现。
这里将实现步骤做简要总结:
- 在Twitter开发者控制台创建应用,获得API Key和API Secret
- 添加项目依赖
compile 'com.twitter.sdk.android:twitter:3.0.0' //twitter分享
compile 'com.twitter.sdk.android:tweet-composer:3.0.0' //twitter分享,发布推文
- 将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客户端,则会跳转到浏览器
*
* @param view
*/
public void shareToTwitter(View view) {
//这里分享一个链接,更多分享配置参考官方介绍: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();
}
}
- 分享结果回调,这一点有所不同,Twitter的分享回调是用广播的方式接受的。所以需要自己写一个广播处理回调事件,并注册到清单文件。
public class MyResultReceiver extends BroadcastReceiver {
@Override
public void onReceive(Context context, Intent intent) {
if (TweetUploadService.UPLOAD_SUCCESS.equals(intent.getAction())) {
// success Twitter分享成功的回调
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的分享功能就完成了。
有小伙伴说分享后的回调么有走,还是再检查检查自己的代码吧,这里直接贴出官方的文档介绍以供参考:
完整代码已上传到GitHub:https://github.com/and2long/ShareDemo
这篇文章中的分享功能都是采用的标准分享方式,即点击分享按钮 --> 弹出分享对话框 --> 编辑分享内容 --> 确定分享。
但是有时候项目中的需求不是这样的,比如:不弹出分享对话框,点击分享按钮便直接将需要分享的内容直接分享出去。
这个需求官方文档貌似没有给出详细的实现方式,由于篇幅原因,这里就不再写出了,如果有小伙伴有同样的需求,可私信我。