2012-06-19 70 views
0

我已經做了樣品使用在developer.facebook.com提供了基本的Facebook的庫在Facebook上張貼和它的作品只是罰款SSO,Facebook的SSO,差異化的登錄名和牆發佈消息

btnPostOnFb.setOnClickListener(new OnClickListener() { 
     @Override 
     public void onClick(View v) { 
     { 
       facebook.authorize(FBIntegrationSampleActivity.this, new String[]{ "user_photos,publish_checkins,publish_actions,publish_stream"}, new DialogListener() { 
        @Override 
        public void onComplete(Bundle values) { 
         if(values!=null && values.containsKey("access_token")){ 
          postOnWall("NEW POST from" +count+"Android -Anuj"); 
          Log.e("post on wall", "WALLPOST"); 
          Toast.makeText(getApplicationContext(), "SUCCESSFULLY POSTED MSG ON WALL", Toast.LENGTH_SHORT).show(); 
         }else if(values!=null) 
          Log.e("LOGINE SUCCESS", "LOGIN SUCCESS"); 
          Toast.makeText(getApplicationContext(), "SUCCESSFULLY LOGGED IN", Toast.LENGTH_SHORT).show(); 
        } 
        @Override 
        public void onFacebookError(FacebookError error) { 
         Log.e("onFBERROR", "ONFBERROR"); 
        } 
        @Override 
        public void onError(DialogError e) { 
         Log.e("on DESI ERROR", "ON_ERROR"); 
        } 
        @Override 
        public void onCancel() { 
         Log.e("onCANCEL", "ONCANCEL"); 
        } 
       }); 
      } 
     } 
    }); 

哪成功發佈在Facebook牆上,我想要的是,我需要向用戶顯示他已成功登錄,並且之後會發布一條消息。

我面對的問題是onComplete(Bundle values)方法被稱爲既成功登錄和成功後,我怎麼能區分它們兩個,是否有一個key在Bundle值,可以幫助找到差異?

歡迎任何建議。

+1

實現另一個聽衆張貼在牆壁上的任何狀態一樣的,你在登錄時做的。 –

+0

爲什麼你需要在onComplete()中做些什麼,只需在你的postToWall()方法中用wallpost做你想做的任何事情。 –

+0

檢查我的編輯將解決你的問題 – Akram

回答

1

問題是,你正在使用的身份驗證和發佈。沒有必要做這樣的:

進行身份驗證使用

facebook.authorize(a, PERMISSIONS,-1,new LoginListener()); 

和用於發佈:

1)在不對話框facebook.request(parameters)

2)隨着對話

facebook.dialog(this,"stream.publish",parameters,new TestUiServerListener()); 


    public class TestUiServerListener implements DialogListener { 
    public void onComplete(Bundle values) { 
     final String postId = values.getString("post_id"); 
     if (postId != null) { 
      new AsyncFacebookRunner(ZValues.authenticatedFacebook).request(postId,new TestPostRequestListener()); 
     } else { 
      Post_Message_Title.this.runOnUiThread(new Runnable() { 
       public void run() { 
       } 
      }); 
     } 
    } 

    public void onCancel() { 
    } 

    public void onError(DialogError e) { 
     e.printStackTrace(); 
    } 

    public void onFacebookError(FacebookError e) { 
     e.printStackTrace(); 
    } 
} 

public class TestPostRequestListener implements RequestListener { 
    public void onComplete(final String response, final Object state) { 
     try { 
      JSONObject json = Util.parseJson(response); 
      String postId = json.getString("id"); 
      this.runOnUiThread(new Runnable() { 
       public void run() { 
         successLoginShowDialog(); // Dialog after Login succeeds 
       } 
      }); 
     } catch (Throwable e) { 
     } 
    } 

    public void onFacebookError(FacebookError e, final Object state) { 
     e.printStackTrace(); 
    } 

    public void onFileNotFoundException(FileNotFoundException e, 
      final Object state) { 
     e.printStackTrace(); 
    } 

    public void onIOException(IOException e, final Object state) { 
     e.printStackTrace(); 
    } 

    public void onMalformedURLException(MalformedURLException e, 
      final Object state) { 
     e.printStackTrace(); 
    } 
} 

剛創建一個方法successLoginShowDialog()並顯示你想要的,

如果帖子是成功的,在下面TestPostRequestListener線程將被調用,這樣做的所有的東西在此主題:

this.runOnUiThread(new Runnable() { 
     public void run() { 
      successLoginShowDialog(); // Dialog after Login succeeds 
     } 
}); 
+0

+1對於很好和完美的答案 –

+0

@venky,我只想顯示一條彈出消息「您已成功登錄」,您認爲我可以在哪裏實現該目標? –

+0

@SomeoneSomewhere編輯,檢查我的帖子 – Venky

0

到postOnWall()你可以得到它的迴應:

public void postToWall(String message) { 
     Bundle parameters = new Bundle(); 
     parameters.putString("message", message); 
     parameters.putString("description", "topic share"); 
     try { 
      fbObj.request("me"); 
      String response = fbObj.request("me/feed", parameters, "POST"); 
      Log.d("Tests", "got response: " + response); 
      if (response == null || response.equals("") 
        || response.equals("false")) { 
       // showToast("Blank response."); 
       Toast.makeText(context, "blank response", Toast.LENGTH_SHORT) 
         .show(); 
      } else { 
       // showToast("Message posted to your facebook wall!"); 
       Toast.makeText(context, 
         "Message posted to your facebook wall!", 
         Toast.LENGTH_SHORT).show(); 
      } 

     } catch (Exception e) { 
      // showToast("Failed to post to wall!"); 
      e.printStackTrace(); 

     } 
    } 
+0

我還沒弄明白,我如何得到兩個不同的登錄通知和張貼在牆上,是否有一些像「access_token」,可以幫助我找到onComplete()是用於登錄/牆上發佈成功的關鍵。 –

+0

首先做登錄,然後在onComplete方法中獲得它的響應,然後調用我寫的方法和你在哪裏做的一樣,你也會得到在牆上張貼的響應.. –

+0

'先做登錄然後在onComplete方法中得到它的響應。你是否認爲我可以在成功登錄時獲得「登錄成功」信息,我是否需要一些密鑰從Bundle對象中獲取它,你知道它是哪個密鑰嗎?我能夠讓自己清楚嗎? –