Android: Share with Facebook
Facebook doesn't work well with normal sharing intents when sharing multiple content elements as
discussed in this bug. To share posts with facebook, we need to:
- Create a new Facebook app here (follow the instructions)
- Add the Facebook SDK to your Android project:
SetUp:
a. App/build.gradle (add below)
repositories { mavenCentral() }
dependencies {
compile 'com.facebook.android:facebook-android-sdk:4.7.0'
}
b. Add you Facebook app id to strings.xml
<string name="facebook_app_id">1698838388383</string>
c. Add Facebook activity to AndroidManifest.xml, also add <meta-data AppID />
Activity:
<!-- Share to Facebook -->
<activity android:name="com.facebook.FacebookActivity"></activity>
Meta-data:
<meta-data
android:name="com.facebook.sdk.ApplicationId"
android:value="@string/facebook_app_id" />
b. Add you Facebook Library to your AndroidStudio project.
1. Download SDK from here: Facebook SDK
2. unzip
3. On Android Studio go to:
- File -> New -> New Module
- Select "Import .JAR/.AAR package"
- Go to your unzip Facebook SDK, and select facebook-android-sdk-4.7.0.aar
Share from Menu bar:
ShareFB.java , menu_shareFB.xml
a. edit menu_shareFB.xml:
<menu xmlns:android="http://schemas.android.com/apk/res/android" xmlns:app="http://schemas.android.com/apk/res-auto">
<item android:id="@+id/action_share" android:icon="@android:drawable/ic_menu_share" android:title="Some title" app:showAsAction="always" >
<menu> <item android:id="@+id/action_share_Facebook" android:title="Share with Facebook"/> <item android:id="@+id/action_share_other_Apps" android:title="Share with other Apps"/>
</menu>
</item></menu>
b. Now edit ShareFB.java:
@Overridepublic boolean onCreateOptionsMenu(Menu menu) {
getMenuInflater().inflate(R.menu.menu_campaign_detail, menu); return true;}
@Overridepublic boolean onOptionsItemSelected(MenuItem item) {
switch(item.getItemId()) {
case R.id.action_share_Facebook:
{
setupFacebookShareIntent(); Toast.makeText(getApplicationContext(), "here facebok", Toast.LENGTH_LONG).show(); }
break; // case R.id.action_share: case R.id.action_share_other_Apps:
{
setupShareIntent(); Toast.makeText(getApplicationContext(), "here 2", Toast.LENGTH_LONG).show(); }
break; }
return super.onOptionsItemSelected(item);}
//Share with Facebookpublic void setupFacebookShareIntent() {
ShareDialog shareDialog; FacebookSdk.sdkInitialize(getApplicationContext()); shareDialog = new ShareDialog(this);
ShareLinkContent linkContent = new ShareLinkContent.Builder()
.setContentTitle("SumOfUs")
.setContentDescription(
"\"Title Of Test Post\"")
.setContentUrl(Uri.parse("http://www.sumofus.org"))
.build();
shareDialog.show(linkContent);
//MessageDialog.show(this, linkContent);}
// Gets the image URI and setup the associated share intent to hook into the provider
public void setupShareIntent() {
// Fetch Bitmap Uri locally ImageView ivImage = (ImageView)findViewById(R.id.ivCampaign); // Get access to the URI for the bitmap Uri bmpUri = getLocalBitmapUri(ivImage); if (bmpUri != null) {
// Construct a ShareIntent with link to image Intent shareIntent = new Intent(); shareIntent.setAction(Intent.ACTION_SEND); shareIntent.putExtra(Intent.EXTRA_STREAM, bmpUri); shareIntent.putExtra(Intent.EXTRA_SUBJECT, "Title Of Test Post"); shareIntent.putExtra(Intent.EXTRA_TEXT, "https://www.sumofus.org"); shareIntent.setType("image/*"); // Launch sharing dialog for image startActivity(Intent.createChooser(shareIntent, "send")); } else {
Toast.makeText(this, "Some error occured during sharing", Toast.LENGTH_LONG).show();
}
}
// Returns the URI path to the Bitmap displayed in specified ImageView
public Uri getLocalBitmapUri(ImageView imageView) {
// Extract Bitmap from ImageView drawable Drawable drawable = imageView.getDrawable(); Bitmap bmp = null; if (drawable instanceof BitmapDrawable){
bmp = ((BitmapDrawable) imageView.getDrawable()).getBitmap(); } else {
return null; }
// Store image to default external storage directory Uri bmpUri = null; try {
File file = new File(Environment.getExternalStoragePublicDirectory(
Environment.DIRECTORY_DOWNLOADS), "share_image_" + System.currentTimeMillis() + ".png"); file.getParentFile().mkdirs(); FileOutputStream out = new FileOutputStream(file); bmp.compress(Bitmap.CompressFormat.PNG, 90, out); out.close(); bmpUri = Uri.fromFile(file); } catch (IOException e) {
e.printStackTrace(); }
return bmpUri;
}
TODO:
add github repo here:
Reference:
Share using this code snippet:
public void setupFacebookShareIntent() {
ShareDialog shareDialog;
FacebookSdk.sdkInitialize(getApplicationContext());
shareDialog = new ShareDialog(this);
ShareLinkContent linkContent = new ShareLinkContent.Builder()
.setContentTitle("Title")
.setContentDescription(
"\"Body Of Test Post\"")
.setContentUrl(Uri.parse("http://someurl.com/here"))
.build();
shareDialog.show(linkContent);
}
http://guides.codepath.com/android/Sharing-Content-with-Intents#share-in-facebook