Utilisation de la boîte de dialogue de partage dans Android Facebook SDK. Comment savoir si l'utilisateur est effectivement partagé ou annulé l'activité de partage?

J'ai ajouté la fonctionnalité de partage à l'application Android comme décrit ici https://developers.facebook.com/docs/android/share-dialog/#setup

Mais j'ai remarqué que si l'utilisateur annule l'activité de partage onComplete s'appelle de toute façon

  • Comment obtenir l'ID utilisateur FB à l'aide du bouton de connexion Facebook dans l'application Android
  • Comment récupérer l'authentification et le jeton de Twitter et de Facebook à travers les cours du gestionnaire de compte d'Android
  • If (session.isOpen ()), connexion Facebook sur Android toujours en retour false
  • L'ouverture de l'API Facebook échoue avec l'application FB installée sur le téléphone
  • Inscription d'Android Inscription sans utiliser la vision du Web
  • Facebook - Solution «Ne peut pas interroger les utilisateurs par leur nom d'utilisateur»
  • @Override protected void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); uiHelper.onActivityResult(requestCode, resultCode, data, new FacebookDialog.Callback() { @Override public void onError(FacebookDialog.PendingCall pendingCall, Exception error, Bundle data) { Log.e("Activity", String.format("Error: %s", error.toString())); } @Override public void onComplete(FacebookDialog.PendingCall pendingCall, Bundle data) { Log.e("Activity", "Success!"); } }); } 

    J'ai également regardé vers Bundle qui est retourné. Même si j'annonce le dialogue de partage, je reçois

     com.facebook.platform.extra.DID_COMPLETE=true 

    Comment puis-je obtenir un résultat que l'utilisateur a vraiment partagé des données sur facebook? (Sans faire une connexion séparée avec le bouton Facebook. Peut-être que certaines autorisations doivent être ajoutées?)

    6 Solutions collect form web for “Utilisation de la boîte de dialogue de partage dans Android Facebook SDK. Comment savoir si l'utilisateur est effectivement partagé ou annulé l'activité de partage?”

    Voir https://developers.facebook.com/docs/android/share-dialog/#handling-responses

    Vous pouvez indiquer si l'utilisateur a annulé en appelant

     String gesture = FacebookDialog.getNativeDialogCompletionGesture(data); if (gesture != null) { if ("post".equals(gesture)) { // the user hit Post } else if ("cancel".equals(gesture)) { // the user hit cancel } else { // unknown value } } else { // either an error occurred, or your app has never been authorized } 

    Où les données sont le lot de résultats. Cependant, il ne renverra qu'une valeur non nulle si l'utilisateur a ouvert une session via votre application (c'est-à-dire que vous avez au moins des autorisations basic_info). Si l'utilisateur ne s'est jamais connecté ou autorisé votre application, la seule chose que vous verrez est le DID_COMPLETE, et il sera toujours vrai à moins qu'une erreur ne se produise. C'est par conception.

    Pour obtenir le résultat du partage, votre application doit avoir au moins l'autorisation basic_info.

    Pour résoudre cela, ouvrez simplement une session (cela demandera automatiquement l'autorisation basic_info):

     Session.openActiveSession(this /*your activity*/, true /*allows the UI login to show up if needed*/, new Session.StatusCallback() { @Override public void call(Session session, SessionState state, Exception exception) { Log.i("[Facebook]", "Session: " + state.toString()); if (session.isOpened()) { /// now you are good to get the sharing results } } }); 

    Vous pouvez trouver plus d'informations ici: https://developers.facebook.com/docs/android/getting-started/

      @Override public void onComplete(FacebookDialog.PendingCall pendingCall, Bundle data) { if (data.getString("com.facebook.platform.extra.COMPLETION_GESTURE").equals("cancel")) return; } 

    La valeur de data.getString ("com.facebook.platform.exple.COMPLETION_GESTURE") est "publier" lorsque l'utilisateur a posté sur Facebook.

    FacebookCallback<Sharer.Result> pour savoir si le partage a été réussi ou annulé ou s'il y a eu une erreur.

    Vous pouvez également utiliser le code ci-dessous dans Activity and in Fragment. Lorsque vous utilisez Fragment, assurez-vous de passer this dans ShareDialog constructor. Si vous passez getActivity() méthode onActivityResult ne sera pas déclenchée dans Fragment.

     private CallbackManager callbackManager; private void shareYourContentOnFacebook() { callbackManager = CallbackManager.Factory.create(); ShareDialog shareDialog = new ShareDialog(this); shareDialog.registerCallback(callbackManager, new FacebookCallback<Sharer.Result>() { @Override public void onSuccess(Sharer.Result result) { Log.d(this.getClass().getSimpleName(), "shared successfully"); //add your code to handle successful sharing } @Override public void onCancel() { Log.d(this.getClass().getSimpleName(), "sharing cancelled"); //add your code to handle cancelled sharing } @Override public void onError(FacebookException error) { Log.d(this.getClass().getSimpleName(), "sharing error"); //add your code to handle sharing error } }); if (ShareDialog.canShow(ShareLinkContent.class)) { ShareLinkContent shareLinkContent = new ShareLinkContent.Builder() .setContentTitle("Your content title") .setContentDescription("Your content description") .setContentUrl(Uri.parse(""http://your-content-url.com"")) .build(); shareDialog.show(shareLinkContent); } } @Override public void onActivityResult(int requestCode, int resultCode, Intent data) { super.onActivityResult(requestCode, resultCode, data); callbackManager.onActivityResult(requestCode, resultCode, data); } 

    Utilisez ce code: –

     /** * Facebook Dialog Callback * * Called up when come back from Share Dialog * */ private class FacebookDialogCallBack implements FacebookDialog.Callback { @Override public void onComplete(PendingCall pendingCall, Bundle data) { //Show Toast Message showToastMessage(data); } @Override public void onError(PendingCall pendingCall, Exception error, Bundle data) { //Show Toast Message showToastMessage(data); } } //Show Toast Message private void showToastMessage(Bundle data) { //Get Native Dialog Did Complete boolean didComplete = FacebookDialog.getNativeDialogDidComplete(data); if(didComplete) { //Get Native Dialog Completion Gesture String nativeDialogCompletionGesture = FacebookDialog.getNativeDialogCompletionGesture(data); if (nativeDialogCompletionGesture == null || FacebookDialog.COMPLETION_GESTURE_CANCEL.equals(nativeDialogCompletionGesture)) { //Show Publish Cancel Toast UIUtil.showToast(R.string.toast_message_share_publish_cancelled); } else { //Show Success Post Toast UIUtil.showToast(R.string.toast_message_share_success_post); } } else { //Show Publish Cancel Toast UIUtil.showToast(R.string.toast_message_share_publish_cancelled); } } 

    Titre ## private static ShareDialog shareDialog;

      private static FacebookCallback<Sharer.Result> shareCallback = new FacebookCallback<Sharer.Result>() { @Override public void onCancel() { Log.d("HelloFacebook", "Canceled"); } @Override public void onError(FacebookException error) { Log.d("HelloFacebook", String.format("Error: %s", error.toString())); String title = this.getActivty().getString(R.string.error); String alertMessage = error.getMessage(); showResult(title, alertMessage); } @Override public void onSuccess(Sharer.Result result) { Log.d("HelloFacebook", "Success!"); // 不为空,才分享成功if (result.getPostId() != null) { String title = this.getActivty().getString(R.string.success); String id = result.getPostId(); String alertMessage = this.getActivty().getString(R.string.successfully_posted_post, id); showResult(title, alertMessage); } } private void showResult(String title, String alertMessage) { new AlertDialog.Builder(this.getActivty()) .setTitle(title) .setMessage(alertMessage) .setPositiveButton(R.string.ok, null) .show(); } }; protected void onCreate (Bundle savedInstanceState) { shareDialog = new ShareDialog(this. getActivty()); shareDialog.registerCallback( callbackManager, shareCallback); } 
    coAndroid est un fan Android de Google, tout sur les téléphones Android, Android Wear, Android Dev et Android Games Apps.