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为开发者平台创建的应用编号

<!-- 网络 -->
<uses-permission android:name="android.permission.INTERNET"/>
<!-- 读外存(根据实际具体情况申请) -->
<uses-permission android:name="android.permission.READ_EXTERNAL_STORAGE" />
<meta-data android:name="com.facebook.sdk.ApplicationId" android:value="应用ID"/>
<activity android:name="com.facebook.FacebookActivity" />
<provider android:authorities="com.facebook.app.FacebookContentProvider应用ID"
     android:name="com.facebook.FacebookContentProvider"
     android:exported="true"/>

分享引文链接:ShareLinkContent

ShareLinkContent content = new ShareLinkContent.Builder()
                .setContentUrl(Uri.parse("https://www.baidu.com"))
                .build();
        // 对话框
        ShareDialog shareDialog = new ShareDialog(this);
        // 分享回调
        shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() {
            @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<Uri> 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));

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

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 217,734评论 6 505
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 92,931评论 3 394
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 164,133评论 0 354
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 58,532评论 1 293
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 67,585评论 6 392
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 51,462评论 1 302
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 40,262评论 3 418
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 39,153评论 0 276
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 45,587评论 1 314
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 37,792评论 3 336
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 39,919评论 1 348
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 35,635评论 5 345
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 41,237评论 3 329
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 31,855评论 0 22
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 32,983评论 1 269
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 48,048评论 3 370
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 44,864评论 2 354