Android开发FaceBook图文分享方法

方式一:集成方法ShareSDK(搬运于 官方文档):

准备工作:

1、获取正确配置并链接到 Android 应用的 Facebook 应用编号。请参阅 Android 新手入门,添加 Facebook 应用编号

2、生成 Android 密钥散列并将其添加到开发者资料页

代码中获取当前apk打包签名密钥散列,将调试签名和发布签名的密钥散列都配置到FaceBook开发者平台的应用当中。也可以使用官方文档的提供获取方式。

        PackageInfo info = null;
        try {
            info = getPackageManager().getPackageInfo("你APP包名",
                    PackageManager.GET_SIGNATURES);
            for (Signature signature : info.signatures) {
                MessageDigest md = MessageDigest.getInstance("SHA");
                md.update(signature.toByteArray());
                Log.d("KeyHash: ", Base64.encodeToString(md.digest(), Base64.DEFAULT));
            }
        } catch (Exception e) {
            e.printStackTrace();
        }

代码工作:

项目build.gradle添加mavenCentral仓库

repositories {
     // ...
     mavenCentral()
}

app build.gradle添加依赖

dependencies {
     // ...
     implementation 'com.facebook.android:facebook-share:5.15.3'
}

AndroidManifest.xml中添加相关权限、meta-data、FacebookActivity、FacebookContentProvider:

Note:应用ID为开发者平台创建的应用编号








分享引文链接:ShareLinkContent

ShareLinkContent content = new ShareLinkContent.Builder()
                .setContentUrl(Uri.parse("https://www.baidu.com"))
                .build();
        // 对话框
        ShareDialog shareDialog = new ShareDialog(this);
        // 分享回调
        shareDialog.registerCallback(callbackManager, new FacebookCallback() {
            @Override
            public void onSuccess(Sharer.Result result) {
                Log.e(TAG, "onSuccess");
            }

            @Override
            public void onCancel() {
                Log.e(TAG, "onCancel");
            }

            @Override
            public void onError(FacebookException error) {
                Log.e(TAG, "onError" + error.toString());
            }
        });
        shareDialog.show(content);

分享图片:SharePhotoContent

String filePath = Environment.getExternalStorageDirectory() + "/image.jpg";
Bitmap image = BitmapFactory.decodeFile(filePath);
SharePhoto photo = new SharePhoto.Builder()
        .setBitmap(image)
        .build();
SharePhotoContent content = new SharePhotoContent.Builder()
        .addPhoto(photo)
        .build();

分享视频:ShareVideoContent

Uri videoFileUri = ...
ShareVideo = new ShareVideo.Builder()
        .setLocalUrl(videoUrl)
        .build();
ShareVideoContent content = new ShareVideoContent.Builder()
        .setVideo(video)
        .build();

多媒体:ShareMediaContent

(1)用户需要安装 71 或更高版本的原生 Android 版 Facebook 应用。

(2)用户每次可以分享最多包含 6 个照片和视频元素的内容。

SharePhoto sharePhoto1 = new SharePhoto.Builder()
    .setBitmap(...)
    .build();
SharePhoto sharePhoto2 = new SharePhoto.Builder()
    .setBitmap(...)
    .build();
ShareVideo shareVideo1 = new ShareVideo.Builder()
    .setLocalUrl(...)
    .build();
ShareVideo shareVideo2 = new ShareVideo.Builder()
    .setLocalUrl(...)
    .build();

ShareContent shareContent = new ShareMediaContent.Builder()
    .addMedium(sharePhoto1)
    .addMedium(sharePhoto2)
    .addMedium(shareVideo1)
    .addMedium(shareVideo2)
    .build();

ShareDialog shareDialog = new ShareDialog(...);
shareDialog.show(shareContent, Mode.AUTOMATIC);

在旧版本的 Android 版 SDK 中,您的应用必须先检查设备是否安装了原生 Facebook 应用,然后才可打开分享对话框。若未安装 Facebook 应用,则您必须自行提供代码,才能调用回退对话框。

现在,SDK 将自动检查设备上是否安装了原生 Facebook 应用。如果未安装,SDK 会将用户切换到默认浏览器并打开动态发布对话框。

总结:

使用官方ShareDialog分享,部分手机无法调起分享功能,直接回调了onError方法,而且分享跳转貌似依赖*墙网络。推荐使用方式二。

方式二:隐式意图(同样也适用其他APP,如Instagram,Twitter等)

Intent.ACTION_SEND

Intent.ACTION_SEND_MULTIPLE(Facebook支持,其他应用不一定支持)

// 上下文实例
        Context context = ...;
        // Uri数组列表
        ArrayList uriArrayList = ...;
        // 意图
        Intent intent;
        // 单张图片
        if (uriArrayList.size() == 1) {
            intent = new Intent(Intent.ACTION_SEND);
            intent.putExtra(Intent.EXTRA_STREAM, uriArrayList.get(0));
        } else {
            // 多张图片
            intent = new Intent(Intent.ACTION_SEND_MULTIPLE);
            intent.putParcelableArrayListExtra(Intent.EXTRA_STREAM, uriArrayList);
        }

        // 图片
        intent.setType("image/*");
        // 视频
//        intent.setType("video/*");
        // 多媒体
//        intent.setType("video/;image/");

        // Facebook包名
        intent.setPackage("com.facebook.katana");
        context.startActivity(Intent.createChooser(intent, title));

调用前,务必需要检查分享目标应用是否安装。

你可能感兴趣的:(Android开发FaceBook图文分享方法)