不使用Facebook sdk,在Facebook上通过Intent分享文本

33

由于Facebook不允许通过Intent分享文本,除非我们使用Facebook SDK,我正在寻找解决此问题的方法。

我可以想到三种方法:

1)由于Facebook允许图片共享,因此我可以生成一个Bitmap,将共享文本绘制到上面,并使用Intent共享图像。

2)Facebook允许共享URL,对于这些URL,它还会在共享时显示页面的Head。 我可以在我的服务器上托管专用页面并将值作为参数传递到URL中,并使用它来生成Head。(我没有php经验,但我认为这是可能的)

3)将文本复制到剪贴板并通知用户。

或者

使用所有3种方法的组合。

是否有人可以建议我更好的解决方案,以在Facebook上分享我的内容而不使用Facebook SDK?

提前致谢。


当我遇到这个问题时,我的解决方案是将文本字符串复制到剪贴板中,并通过Toast通知用户需要粘贴它。这是一个不太好的解决方案,但它能够工作。 - durbnpoisn
您不得为用户预填文本。您应该阅读Facebook平台政策。 - WizKid
@WizKid:我完全理解这一点。这就是为什么我正在寻找另外的方法。例如:我可以分享带有分享文本的图片,这不会违反政策。 - Hemanth
没有违反政策的情况下分享文本的方法。 - WizKid
但在这种情况下,我将分享一张图片,而不是文本。 - Hemanth
显示剩余7条评论
7个回答

61

在使用 Android 的 shareIntent 分享文本时,无法仅分享文本到 Facebook。

只能通过 Facebook SDK 中的共享链接函数实现。

如果有图片,Facebook 将忽略意图中的额外文本。您可以分享图片,但不能分享文本内容。

不幸的是,Facebook 分享意图只能接受带有预设 http:// 前缀的单个 URL,无法添加其他文本消息。事实上,Facebook 剥离文本内容,只允许 URL/链接。这是设计决定,我们无法控制。

以下方法可行:

Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
sharingIntent.setType("text/plain");
sharingIntent.putExtra(Intent.EXTRA_TEXT, "http://www.google.com");
startActivity(Intent.createChooser(sharingIntent, "Share via"));

这样做不会起作用。

Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND);
sharingIntent.setType("text/plain");
sharingIntent.putExtra(Intent.EXTRA_TEXT, "Share Text from App");
startActivity(Intent.createChooser(sharingIntent, "Share via"));

在Facebook上分享文本的唯一途径是使用Facebook SDK。

参考链接:

Android分享意图-分享文本和链接

无法通过Android分享意图分享带链接的文本

Android和Facebook分享意图


1
有没有什么方法可以在Facebook上分享我的内容?比如分享一个带有文本绘制的图像,或者分享一个URL并在运行时生成其标题。 - Hemanth
1
我只想在FB上分享一些信息。我可以考虑通过图像或URL进行分享,或者将文本复制到剪贴板并通知用户,以便当FB应用打开时用户可以粘贴它。还有其他什么技巧可以使用吗? - Hemanth
2
只是分享一段文字,我不会在我的应用程序中实现fb sdk。而且,这是一项管理决策。 - Hemanth
@RaguSwaminathan 有没有不使用 fb sdk 也能分享文本的方法? - Karan Khurana
据我所知,根据Facebook的政策,应用程序在分享时不能预先填写文本。只有用户可以在他们自己的墙上填写文本。 - RRTW
显示剩余7条评论

5
首先,要分享文本到FB,您需要使用FB SDK。
如果没有FB SDK,则最好选择具有“OG”数据的专用网站,这将自动解析。通过这种方式,您可以随时更改您的OG数据。
我建议您选择第二个选项。但是,使用这种方法,FB允许用户单击链接并将其重定向到网站,您可以根据需要进行处理。
希望您已经明确了这一点。
有关OG的详细信息,请查看此Open Graph详情

4

请使用此函数,我希望它能够提供帮助。

public static void share(Context context, String text, String subject, String title, String dialogHeaderText) {
    Intent intent = new Intent(android.content.Intent.ACTION_SEND);
    intent.setType("text/plain");
    intent.putExtra(android.content.Intent.EXTRA_SUBJECT, subject);
    intent.putExtra(android.content.Intent.EXTRA_TEXT, text);
    intent.putExtra(Intent.EXTRA_TITLE, title);
    context.startActivity(Intent.createChooser(intent, dialogHeaderText));
}

4

这段代码让你只能在Facebook上粘贴你的内容。它会获取你手机中所有应用的列表,找到打开的应用,如果Facebook已经存在,则打开它。

        Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
        shareIntent.setType("text/plain");
        shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "text to be shared");
        PackageManager pm = getPackageManager();
        List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
        for (final ResolveInfo app : activityList) {
            if ((app.activityInfo.name).contains("facebook")) {
                final ActivityInfo activity = app.activityInfo;
                final ComponentName name = new ComponentName(activity.applicationInfo.packageName, activity.name);
                shareIntent.addCategory(Intent.CATEGORY_LAUNCHER);
                shareIntent.setFlags(Intent.FLAG_ACTIVITY_NEW_TASK | Intent.FLAG_ACTIVITY_RESET_TASK_IF_NEEDED);
                shareIntent.setComponent(name);
                startActivity(shareIntent);
                break;
           }
        }

如果我正确地遵循代码,它将打开 FB 应用程序,但不会在其中共享文本。用户需要负责输入或粘贴文本,对吗? - Hemanth
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "text to be shared"); 这行代码的作用是将指定的文本添加到共享意图中,以便您可以与其他应用程序共享该文本。 - Harsh Dev Chandel
4
当打开 Facebook 应用时,EXTRA_TEXT 中的 text to be shared 将不会显示。 - Hemanth
打开Facebook应用程序并不理想。你的代码走在了正确的轨道上。一旦if条件得到满足,不要打开Facebook应用程序,而是使用Facebook SDK打开其自己的共享对话框,这样你就可以同时包含文本和图像。 - chitgoks

3

请查看以下内容:

Intent share=new Intent(Intent.ACTION_SEND);
share.setType("text/plain");
share.putExtra(Intent.EXTRA_TEXT, "Some text you would like to share...");
share.setPackage("com.facebook.katana"); //Facebook App package
startActivity(Intent.createChooser(share, "Title of the dialog the system will open"));

使用这段代码时,您无需使用Facebook SDK......

为了提升用户体验,您可以检查 Facebook 应用程序(或 Facebook Lite 应用程序)是否已安装......


这适用于Facebook Lite,但不适用于Facebook.katana包。 - Hamza
我在Android 7/8/9上使用了这个FB包名,一切都正常。你有遇到过异常吗? - RRTW

1

我完全理解这一点。这就是为什么我正在寻找一个解决办法的原因。例如:我可以分享一张带有分享文本的图片,而不会违反政策。还有更好的建议吗? - Hemanth
我可能没有理解你的问题。在图像上使用文本或将文本复制到剪贴板并显示提示以进行粘贴可能是可行的解决方法。 该死,被踩了 :( - bpr10

-1

如果您不介意其他共享选项的呈现,您可以使用带有选择器的常规共享意图,因为如果启用了Facebook,则它将是共享选项之一。

Intent shareIntent = new Intent();
shareIntent.setAction(Intent.ACTION_SEND);
shareIntent.putExtra(Intent.EXTRA_TEXT, "This is my text to send.");
shareIntent.setType("text/plain");
startActivity(Intent.createChooser(shareIntent, "Choose sharing method"));

这并没有回答问题。 - Hemanth
你询问了在Facebook上分享文本内容的替代方法,我认为这种方法有效,它回答了你的问题。 - chosendeath
2
当从选择器中选择后,"This is my text to send." 在 Facebook 应用程序中不会出现。 - Hemanth

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接