ACTION_SENDを介してAndroidアプリからFacebookでテキストを共有


91

私はAndroidアプリを持っていますが、他のアプリを介したテキストの送信をサポートしています。したがって、ACTION_SEND意図とEXTRA_TEXTフィールドを使用します。セレクターは、そのような意図を処理できるすべてのアプリを提示します。それらはツイッター、メール、...、そしてフェイスブックです。しかし、Facebookを選択すると、ブラウザーが開き、次のページに移動します。

http://m.facebook.com/sharer.php?u=mytext

テキストと送信ボタンが表示されます。しかし、送信ボタンを押しても何も起こりません。ページが再び読み込まれるだけです。Facebookアプリ経由でしかURLを送信できないのではないかと思います。あれ?

ACTION_SENDFacebook Androidアプリを介してテキストを送信できた人はいますか?


4
このSO投稿にアクセスし、facebookアプリがACTION_SENDを適切にサポートしていないことに不満を感じている場合は、時間をかけて投稿を次のトピックに追加してください:forum.developers.facebook.net/viewtopic.php?id
エラー454

7
21-3-2012がまだ解決されていないと思いますか?私はそれを機能させることができないので..
ディエゴ

1
developers.facebook.com/bugs/332619626816423-メッセージの事前入力はポリシーに反するため、facebook設計チームがこれをクローズしたようです:(
Brett

1
@ブレットそれはとんでもないことです。彼らはあなたに彼らのSDKをあなたのプロジェクトに追加させたいだけです。
theblang 2014

2
2015年5月17日-Facebookでまだ機能しません。
ファイサルアシフ、

回答:


11

編集:Androidの公式Facebookアプリの新しいリリース(2011年7月14日)で動作します!!!

OLD:上記の例は、ユーザーが共有するFacebookアプリを選択した場合は機能しませんが、ユーザーがSeesmicアプリを選択してFacebookに投稿した場合は機能します。SeesmicはFacebookよりもFacebook APIの実装が優れていると思います!


Facebookバージョン1.6.1では機能せず、送信中にいくつかのバグが存在するようです。
2011

動き始めました!何が問題だったかわからない。FB v 1.6.1でも動作します。
2011

8
facebookアプリのバージョン1.6.2のリリース以来、この答えは間違っています:developer.facebook.com/bugs/363863587019268
alaeri

51

Facebookアプリで共有を機能させるには、少なくとも1つのリンクが必要です。

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "Wonderful search engine http://www.google.fr/");
startActivity(Intent.createChooser(intent, "Share with"));

正しい共有ウィンドウが表示されますが、共有をクリックしても何も起こりません(公式のTwitterアプリでも試しましたが、機能しません)。

Facebookアプリの共有を機能させる唯一の方法は、テキストのないリンクのみを共有することです。

Intent intent = new Intent(Intent.ACTION_SEND);
intent.setType("text/plain");
intent.putExtra(Intent.EXTRA_TEXT, "http://www.google.fr/");
startActivity(Intent.createChooser(intent, "Share with"));

次のウィンドウが表示され、[共有]ボタンが機能します。

Facebookでシェア

どうやら、リンクから画像とテキストを自動的に取得して、共有に入力します。

テキストのみを共有する場合は、facebook apiを使用する必要があります:https : //github.com/facebook/facebook-android-sdk


4
「素晴らしい検索エンジン」というテキストはどこにありますか?それは、人々が上記で報告しているのと同じバグです、そうですか?
カイルクレッグ

3
彼はあなたがリンクを投稿することしかできないと言っています。テキストなし。「素晴らしい検索エンジン」というテキストを機能させるには、テキストを削除する必要がありました。
chubbsondubs 2012

答えを更新したら+1します。現在のところ、Facebookアプリはのような文字列からリンクを正しく取得しますWonderful search engine http://www.google.fr/リンクをプルすると言ったことに注意してください。テキストはまだ何もしません。また、Twitterテキストとリンクの両方で機能します。
theblang 2014年

45

2013年6月:

  • これはFacebookのバグであり、コードではありません
  • Facebookはこのバグは修正されません、彼らは言う、それは「設計による」である彼らはAndroidのシェアシステムを壊した:https://developers.facebook.com/bugs/332619626816423
  • SDKを使用するか、URLのみを共有します。
  • ヒント:投稿のテキストとしてWebページのタイトルを使用すると、少しカンニングすることができます。

28
Faceobookに感謝します。</
sarcasm

おかげで、私たちの注意を描画するための@Loda
Jigar

28

最初に、共有オプションを処理するクエリインテントが必要です。次に、パッケージ名を使用してインテントをフィルターし、ハンドラー共有オプションが1つだけあるようにします!

Facebookで共有

Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Content to share");
PackageManager pm = v.getContext().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);
        v.getContext().startActivity(shareIntent);
        break;
   }
}

ボーナス-Twitterで共有

Intent shareIntent = new Intent(android.content.Intent.ACTION_SEND);
shareIntent.setType("text/plain");
shareIntent.putExtra(android.content.Intent.EXTRA_TEXT, "Content to share");
PackageManager pm = v.getContext().getPackageManager();
List<ResolveInfo> activityList = pm.queryIntentActivities(shareIntent, 0);
for (final ResolveInfo app : activityList) {
    if ("com.twitter.android.PostActivity".equals(app.activityInfo.name)) {
        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);
        v.getContext().startActivity(shareIntent);
        break;
   }
}

また、別の共有アプリケーションを介して共有する方法を見つけたい場合は、そこにありますTépBlog-Androidを介した事前共有


13
FacebookやTwitterでテキスト(リンクのみ)を共有できない方法を使用します。AndroidにはSDK Facebook(Twitter)を使用する必要があります。
-secretlm

こんにちは、試してみましたが、Facebookで共有したいというメッセージが表示されませんでした。ログインを求められ、「何を考えているの?」と表示されます。ヒントテキストは、実際に共有したいテキストではありません
Ramesh Sangili

これは機能しません。通常の(ダイアログ)インテントと同じ空の入力が表示されます。
からIxx

3
Twitterのテキストは簡単に投稿できます
Trikaldarshi 2013

1
Facebookでは機能せず、Twitterでの共有を有効にするために、インテントコンポーネントを設定する必要はありません。
Juozas Kontvainis、2014

11

だから私は回避策を持っていますが、それはあなたが共有しているページを制御できることを前提としています...

EXTRA_TEXTを次のようにフォーマットすると...

String myText = "Hey!\nThis is a neat pic!";
String extraText = "http://www.example.com/myPicPage.html?extraText=\n\n" + myText;

... Facebook以外のアプリでは、テキストは次のようになります。

http://www.example.com/myPicPage.html?extraText=

Hey!
これはきちんとした写真です!

ここで、extraTextクエリパラメーターを使用したリクエストがページのメタデータでextraTextのコンテンツを返すようにWebサイトを更新するとします。

<!-- Make sure to sanitize your inputs! e.g. http://xkcd.com/327/ -->
<meta name="title" content="Hey! this is a neat pic!">

次に、FacebookがそのURLをエスケープしてダイアログを生成すると、タイトルのメタデータが読み取られ、共有ダイアログに埋め込まれます。

私はこれがかなりおかしい解決策であることを理解しているので、一粒の塩を服用してください...


(プラス1)xkcd参照用。
アーミルアブロ14

2

Facebookアプリがこの意図を正しく処理していないようです。最も信頼できる方法は、Android用のFacebook APIを使用することです。

SDKは次のリンクにあります:http : //github.com/facebook/facebook-android-sdk

「使用法」の下には、これがあります:

Facebookダイアログを表示します。

SDKは、壁の支柱の作成など、ユーザー操作のためのいくつかのWebView htmlダイアログをサポートしています。これは、ネイティブのAndroid UIを実装して、APIを介してFacebookにデータを直接渡すことなく、簡単なFacebook機能を提供することを目的としています。

これはそれを行うための最良の方法のようです-壁に投稿するダイアログを表示します。唯一の問題は、最初にログインする必要がある場合があることです


まあそれは正確に私が求めていたものではありません。しかし、とにかくヒントをありがとう。これを機能させるには、Facebookの共有用に別のメニュー項目を追加する必要があります...
Goddchen

ええ、私はあなたの意味を理解しました、そしてそれは雌犬ですが、私は私のアプリケーションのACTION_SENDインテントで同じ問題を抱えていました、そしてFacebookは彼らのアプリを修正しなかったので、これが最良の代替案であるようです
HXCaine

3
もう少し検索したところ、インターネット全体にこの問題を抱えている人々がいて、Facebookはまったく役に立っていないことがわかりました。forum.developers.facebook.net/viewtopic.php?pid=255227
HXCaine

1
Check this out : By this we can check activity results also....
// Open all sharing option for user
                    Intent sharingIntent = new Intent(android.content.Intent.ACTION_SEND); 
                    sharingIntent.setType("text/plain");                    
                    sharingIntent.putExtra(android.content.Intent.EXTRA_SUBJECT, ShortDesc+" from "+BusinessName);
                    sharingIntent.putExtra(android.content.Intent.EXTRA_TEXT, ShortDesc+" "+ShareURL);
                    sharingIntent.putExtra(Intent.EXTRA_TITLE, ShortDesc+" "+ShareURL);
                    startActivityForResult(Intent.createChooser(sharingIntent, "Share via"),1000);
/**
     * Get the result when we share any data to another activity 
     * */
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        switch(requestCode) {
        case 1000:
            if(resultCode == RESULT_OK)
                Toast.makeText(getApplicationContext(), "Activity 1 returned OK", Toast.LENGTH_LONG).show();
            else
                Toast.makeText(getApplicationContext(), "Activity 1 returned NOT OK", Toast.LENGTH_LONG).show();
            break;
        case 1002:
            if(resultCode == RESULT_OK)
                Toast.makeText(getApplicationContext(), "Activity 2 returned OK", Toast.LENGTH_LONG).show();
            break;
        }// end switch



    }// end onActivityResult

1
ShareDialog shareDialog = new ShareDialog(this);
if(ShareDialog.canShow(ShareLinkContent.class)) {

    ShareLinkContent linkContent = new ShareLinkContent.Builder().setContentTitle(strTitle).setContentDescription(strDescription)
                            .setContentUrl(Uri.parse(strNewsHtmlUrl))
                            .build();
    shareDialog.show(linkContent);

}

0

これは、2011年4月に報告されたFacebookアプリのバグであり、Android Facebook開発者によってまだ修正されていないようです。

当面の回避策は、SDKを使用することだけです。


2
Webアプリを使って共有可能なコンテンツを友達と共有してほしいと思っているので、広告を見ることができます...私も同じ問題で、facebook apiを介してFacebbok共有を実装します。
Igor

0

テキストを表示したい場合は、メッセージの先頭にを付けて、メッセージをハッシュタグとして共有します。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.