web-dev-qa-db-ja.com

Android:インテントを介してFacebookのテキストと画像を共有する方法は?

Facebookの共有インテントを介して、アプリから事前に入力されたキャプション付きの写真を共有したいと思います。

サンプルコード

Intent intent = new Intent();
intent.setAction(Intent.ACTION_SEND);
intent.setType("image/*");      

intent.putExtra(Intent.EXTRA_TEXT, "eample");
intent.putExtra(Intent.EXTRA_TITLE, "example");
intent.putExtra(Intent.EXTRA_SUBJECT, "example");
intent.putExtra(Intent.EXTRA_STREAM, imageUri);

Intent openInChooser = new Intent(intent);
openInChooser.putExtra(Intent.EXTRA_INITIAL_INTENTS, extraIntents);
startActivity(openInChooser);

これがスクリーンショットです

Text is not display

タイプをimage/*に設定すると、テキストが事前に入力されずに写真がアップロードされます。 text/plain写真への設定が表示されない場合.....

44
Mansi

最新のFacebookバージョンでは、インテントを使用してテキストを共有することはできません。 Facebook SDKを使用してそれを行う必要があります-それを簡単にするには、Facebook SDK + Android Simple Facebook( https://github.com/sromku/Android-simple-facebook )。ライブラリを使用すると、コードは次のようになります(Simple Facebookサイトから抽出)。

フィードを公開

OnPublishListenerを設定し、以下を呼び出します。

  • publish(Feed, OnPublishListener)ダイアログなし。
  • publish(Feed, true, OnPublishListener)ダイアログ付き。

基本的なプロパティ

  • message-ユーザーのメッセージ
  • name-リンク添付の名前
  • caption-リンクのキャプション(リンク名の下に表示されます)
  • description-リンクの説明(リンクキャプションの下に表示されます)
  • picture-この投稿に添付されている写真のURL。画像は少なくとも200x200ピクセルである必要があります
  • link-この投稿に添付されたリンク

コールバックリスナーの初期化:

OnPublishListener onPublishListener = new OnPublishListener() {
    @Override
        public void onComplete(String postId) {
            Log.i(TAG, "Published successfully. The new post id = " + postId);
        }

     /* 
      * You can override other methods here: 
      * onThinking(), onFail(String reason), onException(Throwable throwable)
      */
};

ビルドフィード:

Feed feed = new Feed.Builder()
    .setMessage("Clone it out...")
    .setName("Simple Facebook for Android")
    .setCaption("Code less, do the same.")
    .setDescription("The Simple Facebook library project makes the life much easier by coding less code for being able to login, publish feeds and open graph stories, invite friends and more.")
    .setPicture("https://raw.github.com/sromku/Android-simple-facebook/master/Refs/Android_facebook_sdk_logo.png")
    .setLink("https://github.com/sromku/Android-simple-facebook")
    .build();

フィードを公開 なしで ダイアログ:

mSimpleFacebook.publish(feed, onPublishListener);

フィードを公開  ダイアログ:

mSimpleFacebook.publish(feed, true, onPublishListener);


2015年12月14日に更新


新しいFacebook SDKによる。

facebook-Android-sdk:4.6.0

とても簡単です。
1. Android.manifest.xmlにプロバイダーを作成します

<provider
            Android:authorities="com.facebook.app.FacebookContentProvider{APP_ID}"
            Android:name="com.facebook.FacebookContentProvider"
            Android:exported="true" />

2.データを使用して共有インテントを作成します。

ShareHashtag shareHashTag = new ShareHashtag.Builder().setHashtag("#YOUR_HASHTAG").build();
ShareLinkContent shareLinkContent = new ShareLinkContent.Builder()
                .setShareHashtag(shareHashTag)
                .setQuote("Your Description")
                .setContentUrl(Uri.parse("image or logo [if playstore or app store url then no need of this image url]"))
                .build();


3.共有ダイアログを表示する

ShareDialog.show(ShowNavigationActivity.this,shareLinkContent);


それでおしまい。

45

これで試してください

 private void initShareIntent(String type、String _text){
 File filePath = getFileStreamPath( "shareimage.jpg"); //オプション//内部ストレージ
 Intent shareIntent = new Intent(); 
 shareIntent.setAction(Intent.ACTION_SEND); 
 shareIntent.putExtra(Intent.EXTRA_TEXT、_text); 
 shareIntent.putExtra(Intent.EXTRA_STREAM、Uri.fromFile(new File(filePath))); //オプション//画像を送信するときにこれを使用する
 shareIntent.setType( "image/jpeg"); 
 shareIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION); 
 startActivity (Intent.createChooser(shareIntent、 "send")); 
} 
13

2017年現在、facebookでは、アプリから直接画像とテキストを共有することはできません。

Workaround

Facebookは、タイトルと画像データのURLをスクレイピングし、共有投稿で使用します。

回避策として、共有したいテキスト/画像(URLで指定)を動的に読み込む単一ページのアプリケーション*を作成し、そのURLをFacebookで共有できます。

ノート:

  • 単一ページアプリケーションが、facebookのページスクレイピングの前にタイトル、オープングラフメタタグ、および画像セットを含む静的ページを生成することを確認します。これらのWebページタグがJavascriptを介して動的に変更されると、facebookはこれらの値を取得して共有投稿で使用できなくなります。
  • オープングラフメタプロパティタグog:image:heightおよびog:image:widthを使用して、 facebookが共有ポスト内で画像プレビュー を作成できるようにします

手順

0) 最新のfacebook-sdkライブラリ をbuild.gradleファイルに追加します

compile group: 'com.facebook.Android', name: 'facebook-Android-sdk', version: '4.25.0'

1)AndroidManifest.xmlで、<application>セクション内にメタデータタグを追加します。

<application Android:label="@string/app_name" ...>
...
    <meta-data Android:name="com.facebook.sdk.ApplicationId" Android:value="@string/facebook_app_id"/>
...
</application>

(book IDと)facebook_app_id文字列を、strings.xmlファイルに追加します。

<string name="facebook_app_id">12341234</string>

YOURFBAPPIDは、 https://developers.facebook.com/apps/ にあるFacebookアプリID番号です。

2)AndroidManifest.xmlの<provider>タグの外側に<application>タグも追加します

<provider Android:authorities="com.facebook.app.FacebookContentProviderYOURFBAPPID"
          Android:name="com.facebook.FacebookContentProvider"
          Android:exported="true"/>

3)ビルダーを使用してShareLinkContentオブジェクトを作成します。

ShareLinkContent fbShare = new ShareLinkContent.Builder()
            .setContentUrl(Uri.parse("http://yourdomain.com/your-title-here/someimagefilename"))
            .build();

4)フラグメント(またはアクティビティなど)から共有します。

ShareDialog.show(getActivity(), fbShare);

Facebookドキュメント

https://developers.facebook.com/docs/Android/getting-started

3
Baker

FBでは、共有メッセージを事前入力できなくなりました。

これを回避するには、SDKを使用してGraphリクエストを介して公開する必要があります。これには、publish_actions権限が必要です。先月以来、publish_actionsにアクセスするには レビュープロセスにアプリを送信 する必要があります。アプリが共有テキストを事前入力する場合、これは失敗します。私を信じてください-チャッツッパを試してみました。

従わなければならないようです。

B.t.w. iOSでは、FB SDKを使用してテキストを事前入力できます。誰がどれくらい知っていますか。

2
Vaiden

このフォーミュラでは、「AndroidManifest」のプロバイダーを使用せずに、メッセンジャーとInstagram(com.instagram.Android)の両方の画像を共有できます。

public void shareMessenger(View v) {
    // showToast("checking");

    File dir = new File(Environment.getExternalStorageDirectory(), "MyFolder");

    File imgFile = new File(dir, "Image.png");

    Intent sendIntent = new Intent(Intent.ACTION_VIEW);
    sendIntent.setType("image/*");
    sendIntent.setAction(Intent.ACTION_SEND);
    sendIntent.putExtra(Intent.EXTRA_STREAM, Uri.parse("file://" + imgFile));
    sendIntent.putExtra(Intent.EXTRA_TEXT, "<---MY TEXT--->.");
    sendIntent.setPackage("com.facebook.orca");
    sendIntent.addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION);
    try {
        startActivity(Intent.createChooser(sendIntent, "Share images..."));
    } catch (Android.content.ActivityNotFoundException ex) {
        Toast.makeText(SaveAndShareActivity.this, "Please Install Facebook Messenger", Toast.LENGTH_LONG).show();
    }

}

** onCreateメソッドにこの2行を追加します**

 StrictMode.VmPolicy.Builder builder = new StrictMode.VmPolicy.Builder();
    StrictMode.setVmPolicy(builder.build());
0
DEVSHK