2013-08-28 125 views
0

我想從我的Android應用程序發佈一些預定義的消息和圖像在Facebook牆上。在Facebook上發佈狀態消息而不打開Facebook牆狀態頁面

我做了什麼

我使用OpenSSL的創建哈希鍵,放在我的Facebook developer app(Native Android App)還設置包名稱和活動名稱。然後在我的應用程序中使用Facebook應用程序密鑰。
我做了所有的編碼和運行我的應用程序,它要求我登錄,然後我輸入用戶名和密碼,但是當我點擊發布消息按鈕,它顯示我Facebook狀態頁,我需要手動輸入狀態,我不想。我想直接在牆上發佈預定義的消息,而無需打開此頁面。

這是我的代碼供您參考。

private void postStatusUpdate() { 
     if (canPresentShareDialog) { 
      FacebookDialog shareDialog = createShareDialogBuilder().build(); 
      uiHelper.trackPendingDialogCall(shareDialog.present()); 
     } else if (user != null && hasPublishPermission()) { 
      Bundle postParams = new Bundle(); 
      GetSet gs = new GetSet();    
      postParams.putString("name", gs.getFacebook_menu_name()); 
      postParams.putString("caption", gs.getFacebook_hotel_name()); 
      postParams.putString("description", "My rating for this menu is "+gs.getFacebook_menu_rating()); 
      //postParams.putString("link", "https://developers.facebook.com/android"); 
      postParams.putString("picture", gs.getFacebook_url_address()); 


      Request.Callback callback= new Request.Callback() { 
       public void onCompleted(Response response) { 
        JSONObject graphResponse = response 
               .getGraphObject() 
               .getInnerJSONObject(); 
        String postId = null; 
        try { 
         postId = graphResponse.getString("id"); 
        } catch (JSONException e) { 
         Log.i("TAG", 
          "JSON error "+ e.getMessage()); 
        } 
        FacebookRequestError error = response.getError(); 
        if (error != null) { 
         Toast.makeText(FacebookActivity.this 
           .getApplicationContext(),error.getErrorMessage(),Toast.LENGTH_SHORT).show(); 

         } else { 
          Toast.makeText(FacebookActivity.this 
            .getApplicationContext(), 
            "Details suuccesfully post on your wall", 
            Toast.LENGTH_LONG).show(); 

        } 
       } 
      }; 

      Request request = new Request(Session.getActiveSession(), "me/feed", postParams, 
            HttpMethod.POST, callback); 

      RequestAsyncTask task = new RequestAsyncTask(request); 
      task.execute(); 

     } else { 
      pendingAction = PendingAction.POST_STATUS_UPDATE; 
     } 
    } 

這裏有兩個條件。
a。如果我的手機沒有Facebook應用程序,那麼它工作正常。它在Facebook牆上發佈消息而無需手動輸入

b。但是,如果我在我的手機上安裝了Facebook應用程序安裝,那麼它會打開狀態頁面,我已手動輸入消息,而我不想。

我不明白要做什麼。因爲我讀了Facebook的某個地方,不允許在沒有打開狀態頁的情況下發帖。

請給我任何參考或提示。

+1

無法通過共享對話框提供了一個預定義的消息。你也不應該(因爲沒有阻止你的編程方式,所以我只能使用should而不是在這裏)通過圖API提供一個預定義的消息,你需要爲最終用戶提供一個機制來輸入消息,並通過它到圖形API。使用預定義的消息違反策略。請參閱Facebook平臺政策第四部分#2 - https://developers.facebook.com/policy/ –

回答

-1

你需要使用單點登錄Facebook登錄 - SessionLoginBehavior.SSO_WITH_FALLBACK;

0

這個類可以幫助我在我的Facebook牆上發送郵件,而不對話框:

public class FBManager{ 

private static final String FB_ACCESS_TOKEN = "fb_access_token"; 
private static final String FB_EXPIRES = "fb_expires"; 

private Activity context; 
private Facebook facebookApi; 

private Runnable successRunnable=new Runnable(){ 
@Override 
public void run() { 
    Toast.makeText(context, "Success", Toast.LENGTH_LONG).show(); 
} 
};  

public FBManager(Activity context){ 

this.context = context; 

facebookApi = new Facebook(FB_API_ID); 

facebookApi.setAccessToken(restoreAccessToken()); 

} 

public void postOnWall(final String text, final String link){ 
new Thread(){ 
    @Override 
    public void run(){ 
     try { 
      Bundle parameters = new Bundle(); 
      parameters.putString("message", text); 
      if(link!=null){ 
       parameters.putString("link", link); 
      } 
      String response = facebookApi.request("me/feed", parameters, "POST"); 
      if(!response.equals("")){ 
       if(!response.contains("error")){ 
        context.runOnUiThread(successRunnable);      
       }else{ 
        Log.e("Facebook error:", response); 
       } 
      } 
     } catch (Exception e) { 
      e.printStackTrace(); 
     } 
    } 
}.start();  
} 


public void save(String access_token, long expires){ 
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 
Editor editor=prefs.edit(); 
editor.putString(FB_ACCESS_TOKEN, access_token); 
editor.putLong(FB_EXPIRES, expires); 
editor.commit(); 
} 

public String restoreAccessToken(){ 
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 
return prefs.getString(FB_ACCESS_TOKEN, null);  
} 

public long restoreExpires(){ 
SharedPreferences prefs = PreferenceManager.getDefaultSharedPreferences(context); 
return prefs.getLong(FB_EXPIRES, 0);   
} 
相關問題