2013-12-16 7 views
6

Hi Ho problemi con Facebook:WebDialog share su Facebook quando l'utente rimuove un'applicazione da impostazioni

Caso:

1.User non ha alcuna applicazione Facebook.

login in Facebook 2.User via WebDialog

3.User dà tutte le autorizzazioni per la condivisione e azioni inviare

4.User entra account Facebook, che in applicazioni, e rimuove la mia app.

5.Utente tenta di rendere nuovamente la condivisione.

6. "Errore sconosciuto, riprovare più tardi" Viene visualizzato in WebDialog.

C'è un modo per risolvere questo caso? Ho scoperto che usando ShareDialog posso evitare questo problema quando l'utente ha installato l'app di Facebook, ma non so come risolverlo se l'utente non ha un'app fb sul suo telefono.

Per mostrare dialogo verifico:

private boolean checkFacebookLogin(){ 
    Session session = Session.getActiveSession(); 
    if(session!=null && session.isOpened()){ 
     return true; 
    } 
    return false; 
} 

quanto ti chiedo per le autorizzazioni se sono necessari:

private void performPublish() { 

    Session session = Session.getActiveSession(); 
    pendingAction = PendingAction.POST_STATUS_UPDATE; 

    if (session != null && mCurrentActivity!=null) { 
     if (hasPublishPermission()) { 
      // We can do the action right away. 
      handlePendingAction(); 
     } else { 
      // We need to get new permissions, then complete the action when we get called back. 
      session.requestNewPublishPermissions(new Session.NewPermissionsRequest(mCurrentActivity, PERMISSIONS)); 
     } 
    } 
} 

Alla fine mostro WebDialog:

WebDialog feedDialog = (
       new WebDialog.FeedDialogBuilder(mCurrentActivity, 
         Session.getActiveSession(), 
         postParams)) 
       .setOnCompleteListener(new OnCompleteListener() { 

        @Override 
        public void onComplete(Bundle values, 
              FacebookException error) { 

        } 

       }) 
       .build(); 
     feedDialog.show(); 

Dopo aver mostrato WebDialog, reindirizza alla pagina di errore con il testo "Unknow error [...]", non ho trovato alcuna informazione di errore, quindi non ho nemmeno sapere che qualcosa va storto.

Ho provato HelloFacebookSample, ma se l'utente non ha un'app di Facebook, non può modificare il post nella finestra di dialogo di Facebook. Voglio vedere la finestra di dialogo di Facebook in entrambi i casi (con/senza l'app fb installata).

risposta

1
if (FacebookDialog.canPresentShareDialog(this, 
       FacebookDialog.ShareDialogFeature.SHARE_DIALOG)) { 
      FacebookDialog shareDialog = new FacebookDialog.ShareDialogBuilder(
        this) 
        .setLink(// what ever you want to share use here 
        .build(); 
      uiHelper.trackPendingDialogCall(shareDialog.present()); 

     } else { 
      Session session = Session.getActiveSession(); 
      if (session != null && session.isOpened()) { 
       Log.d("Tag", "Success!"); 
       publishFeedDialog(); 
      } else { 
      //ask the user to login . 
      //authButton.performClick(); 
      share = true; 
      // } 
     } 

Quindi, dal codice di cui sopra, se l'applicazione è già installata fb si aprirà che app altrimenti si deve chiedere all'utente di accedere eseguendo Fb LoginButton. performClick(). quindi l'utente verrà reindirizzato alla finestra di dialogo web di login fb. la chiamata successo onLogin indietro u può condividere utilizzando,

private void publishFeedDialog() { 
    Bundle params = new Bundle(); 
    params.putString("link", 
      ""); 
    WebDialog feedDialog = (new WebDialog.FeedDialogBuilder(
      MenuActivity.this, Session.getActiveSession(), params)) 
      .setOnCompleteListener(new OnCompleteListener() { 

       @Override 
       public void onComplete(Bundle values, 
         FacebookException error) { 
        if (error == null) { 
         // When the story is posted, echo the success 
         // and the post Id. 
         final String postId = values.getString("post_id"); 
         if (postId != null) { 
          Toast.makeText(MenuActivity.this, "Posted", 
            Toast.LENGTH_SHORT).show(); 
         } else { 
          // User clicked the Cancel button 
          Toast.makeText(
            MenuActivity.this 
              .getApplicationContext(), 
            "Publish cancelled", Toast.LENGTH_SHORT) 
            .show(); 
         } 
        } else if (error instanceof FacebookOperationCanceledException) { 
         // User clicked the "x" button 
         Toast.makeText(
           MenuActivity.this.getApplicationContext(), 
           "Publish cancelled", Toast.LENGTH_SHORT) 
           .show(); 
        } else { 
         // Generic, ex: network error 
         Toast.makeText(
           MenuActivity.this.getApplicationContext(), 
           "Error posting story", Toast.LENGTH_SHORT) 
           .show(); 
        } 
       } 

      }).build(); 
    feedDialog.show(); 
} 
+1

Purtroppo questo è un ingannevole:. Questa linea è passato quando l'utente rimuove la nostra applicazione in contesti di Facebook, ti ​​visualizzare la finestra di avanzamento con il messaggio che ho citato in questione . if (session! = Null && session.isOpened()) – Drake29a

Problemi correlati