在分享之前需要做一些准备工作,申请成为Facebook Developer,添加自己的应用等等。在这就不重复这些准备工作,可以直接上官网按照流程去申请。
需要注意的是关于填写的签名。分成测试签名和正式签名,两者不一样。并且在你测试的过程中有可能会提示你关于这个签名没有填写到你的开发者里面,需要将错误提示的签名填写进去就可以了。
清单文件的配置
<activity android:name="com.facebook.FacebookActivity"
android:configChanges="keyboard|keyboardHidden|screenLayout|screenSize|orientation"
android:theme="@android:style/Theme.Translucent.NoTitleBar"
android:label="@string/app_name"
>
</activity>
<provider
android:authorities="com.facebook.app.FacebookContentProvider917150658398254"
android:name="com.facebook.FacebookContentProvider"
android:exported="true"
/>
//关于你的appkey不可以直接写常量,需要用xml文件引用。否则会报异常
<meta-data android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebookAppKey">
- 初始化FacebookSDK。(直接将最新版本的sdk导入到AS)
//写在application
FacebookSdk.sdkInitialize(getApplicationContext());
- 初始化回调管理器
mCManager = CallbackManager.Factory.create();
- 进行分享
//初始化分享对话框
ShareDialog mFBShareDialog = new com.facebook.share.widget.ShareDialog(mActivity);
//注册回调
mFBShareDialog.registerCallback(mCallbackManager, new FacebookCallback<Sharer.Result>() {
@Override
public void onSuccess(Sharer.Result result) {
Log.i(TAG, "onSuccess");
Toast.makeText(mActivity, mActivity.getString(R.string.WEIBO_SHARE_SUCCESS),
Toast.LENGTH_SHORT).show();
}
@Override
public void onCancel() {
Log.i(TAG, "onCancel");
Toast.makeText(mActivity, mActivity.getString(R.string.WEIBO_SHARE_CANCELED),
Toast.LENGTH_SHORT).show();
}
@Override
public void onError(FacebookException error) {
error.printStackTrace();
}
});
if ( com.facebook.share.widget.ShareDialog.canShow(ShareLinkContent.class) ) {
//ShareLinkContent组件是分享链接的,无法单独分享图片。
/*ShareLinkContent.Builder mShareLinkBuilder = new ShareLinkContent.Builder();
*//*if( contetUrl != null ) {
mShareLinkBuilder.setContentUrl(Uri.parse(contetUrl));
}*//*
Log.i(TAG, "title = " + title + " contentUrl = " + contetUrl + " imgUrl = " + imgUrl);
mShareLinkBuilder.setContentUrl(Uri.parse(contetUrl));
mShareLinkBuilder.setContentTitle(title);
//mShareLinkBuilder.setContentDescription("sdasdasdasdasdsdsadasdsadasdasdsdasdsadsadasdsadsdasdasdasdasdasd");
mShareLinkBuilder.setImageUrl(Uri.parse(imgUrl));
ShareLinkContent mShareLink = mShareLinkBuilder.build();
mFBShareDialog.show(mShareLink);*/
//SharePhoto是用于分享图片,只能是本地图片
SharePhoto mSharePhoto = new SharePhoto.Builder()
.setCaption(title)
.setBitmap(bitmap)
.build();
SharePhotoContent mContent = new SharePhotoContent.Builder()
.addPhoto(mSharePhoto)
.build();
mFBShareDialog.show(mContent);
if ( bitmap != null && !bitmap.isRecycled() ) {
bitmap.recycle();
}
}
- 设置分享结果返回
@Override
protected void onActivityResult(int requestCode, int resultCode, Intent data) {
super.onActivityResult(requestCode, resultCode, data);
mCManager.onActivityResult(requestCode, resultCode, data);
}