diff --git a/Docs/Integration.md b/Docs/Integration.md index ff3cf19..39c6ba6 100644 --- a/Docs/Integration.md +++ b/Docs/Integration.md @@ -36,3 +36,10 @@ With the `Share` feature selected, start `AndroidFacebookInterop.ExtraShareImagePath`. Read `ExtraStatus` and `ExtraErrorCode` from the activity result. The wrapper uses `SharePhotoContent` and never injects a message. + +The wrapper records the ShareDialog mode availability in Android logs. When no +supported dialog mode is available, `ExtraStatus` is `failed` and +`ExtraErrorCode` reports +`share_dialog_unavailable_native_<0|1>_web_<0|1>`. Consumers may use that +diagnostic to offer an explicit Android image-intent fallback. The wrapper does +not silently change transport. diff --git a/src/Kapusch.FacebookApisForAndroidComponents/Native/Android/facebookinterop/src/main/java/com/kapusch/facebook/androidinterop/FacebookShareActivity.java b/src/Kapusch.FacebookApisForAndroidComponents/Native/Android/facebookinterop/src/main/java/com/kapusch/facebook/androidinterop/FacebookShareActivity.java index aefdc27..fa1e0d6 100644 --- a/src/Kapusch.FacebookApisForAndroidComponents/Native/Android/facebookinterop/src/main/java/com/kapusch/facebook/androidinterop/FacebookShareActivity.java +++ b/src/Kapusch.FacebookApisForAndroidComponents/Native/Android/facebookinterop/src/main/java/com/kapusch/facebook/androidinterop/FacebookShareActivity.java @@ -5,16 +5,20 @@ import android.graphics.Bitmap; import android.graphics.BitmapFactory; import android.os.Bundle; +import android.util.Log; +import com.facebook.AccessToken; import com.facebook.CallbackManager; import com.facebook.FacebookCallback; import com.facebook.FacebookException; +import com.facebook.FacebookSdk; import com.facebook.share.Sharer; import com.facebook.share.model.SharePhoto; import com.facebook.share.model.SharePhotoContent; import com.facebook.share.widget.ShareDialog; public final class FacebookShareActivity extends Activity { + private static final String LOG_TAG = "KapuschFacebookShare"; private CallbackManager callbackManager; private Bitmap bitmap; @@ -55,8 +59,31 @@ public void onError(FacebookException error) { SharePhoto photo = new SharePhoto.Builder().setBitmap(bitmap).build(); SharePhotoContent content = new SharePhotoContent.Builder().addPhoto(photo).build(); - if (!dialog.canShow(content, ShareDialog.Mode.AUTOMATIC)) { - completeFailed("share_dialog_unavailable"); + boolean automaticAvailable = dialog.canShow(content, ShareDialog.Mode.AUTOMATIC); + boolean nativeAvailable = dialog.canShow(content, ShareDialog.Mode.NATIVE); + boolean webAvailable = dialog.canShow(content, ShareDialog.Mode.WEB); + boolean feedAvailable = dialog.canShow(content, ShareDialog.Mode.FEED); + boolean nativePhotoCapabilityAvailable = ShareDialog.canShow(SharePhotoContent.class); + boolean accessTokenActive = AccessToken.isCurrentAccessTokenActive(); + + Log.i( + LOG_TAG, + "ShareDialog availability" + + " sdkInitialized=" + FacebookSdk.isInitialized() + + " accessTokenActive=" + accessTokenActive + + " automatic=" + automaticAvailable + + " native=" + nativeAvailable + + " nativePhotoCapability=" + nativePhotoCapabilityAvailable + + " web=" + webAvailable + + " feed=" + feedAvailable + ); + + if (!automaticAvailable) { + completeFailed( + "share_dialog_unavailable" + + "_native_" + availabilityFlag(nativeAvailable) + + "_web_" + availabilityFlag(webAvailable) + ); return; } dialog.show(content, ShareDialog.Mode.AUTOMATIC); @@ -70,6 +97,10 @@ protected void onActivityResult(int requestCode, int resultCode, Intent data) { } } + private static String availabilityFlag(boolean available) { + return available ? "1" : "0"; + } + private void completeFailed(String errorCode) { complete("failed", RESULT_OK, errorCode); } diff --git a/src/Kapusch.FacebookApisForAndroidComponents/nuget-readme.md b/src/Kapusch.FacebookApisForAndroidComponents/nuget-readme.md index d4f83c9..7c9eb6c 100644 --- a/src/Kapusch.FacebookApisForAndroidComponents/nuget-readme.md +++ b/src/Kapusch.FacebookApisForAndroidComponents/nuget-readme.md @@ -7,3 +7,6 @@ Set `KapuschFacebookFeatures` to `Login` (default), `Share`, or `Login;Share`. ## Notes - No secrets are included. - You must configure your AndroidManifest / resources as required by the Facebook Android SDK. +- Photo sharing reports native and web ShareDialog availability through a + stable `share_dialog_unavailable_native_<0|1>_web_<0|1>` error code when the + SDK cannot open a supported composer.