0

在我的postToFacebook()方法中。我检查了用户是否已连接,如果它是我在墙上发布的链接。当用户未登录时,会弹出 facebook sdk 登录进度,我使用我的凭据成功登录。我的问题是登录后我需要postonWall直接但postOnWall没有发布到 Facebook。如果我已经登录并且我发布了,那么它就会被发布。请提供任何帮助。这是我完整的 postToFacebook 代码。

public void postToFacebook(){


        mAsyncRunner = new AsyncFacebookRunner(facebook);

        loginToFacebook();
    }



    /**
     * Function to login into facebook
     * */
    public void loginToFacebook() {

        mPrefs = getPreferences(MODE_PRIVATE);
        String access_token = mPrefs.getString("access_token", null);
        long expires = mPrefs.getLong("access_expires", 0);

        if (access_token != null) {
            facebook.setAccessToken(access_token);

            /*btnFbLogin.setVisibility(View.INVISIBLE);

            // Making get profile button visible
            btnFbGetProfile.setVisibility(View.VISIBLE);

            // Making post to wall visible
            btnPostToWall.setVisibility(View.VISIBLE);

            // Making show access tokens button visible
            btnShowAccessTokens.setVisibility(View.VISIBLE);*/

            new loadingTask().execute();

            System.out.println("one");
            Log.d("FB Sessions", "" + facebook.isSessionValid());
        }

        if (expires != 0) {
            facebook.setAccessExpires(expires);
        }

        if (!facebook.isSessionValid()) {
            facebook.authorize(this,
                    new String[] { "email", "publish_stream" },
                    new DialogListener() {

                        @Override
                        public void onCancel() {
                            // Function to handle cancel event
                        }

                        @Override
                        public void onComplete(Bundle values) {
                            // Function to handle complete event
                            // Edit Preferences and update facebook acess_token
                            SharedPreferences.Editor editor = mPrefs.edit();
                            editor.putString("access_token",
                                    facebook.getAccessToken());
                            editor.putLong("access_expires",
                                    facebook.getAccessExpires());
                            editor.commit();

                            // Making Login button invisible
                            /*btnFbLogin.setVisibility(View.INVISIBLE);

                            // Making logout Button visible
                            btnFbGetProfile.setVisibility(View.VISIBLE);

                            // Making post to wall visible
                            btnPostToWall.setVisibility(View.VISIBLE);

                            // Making show access tokens button visible
                            btnShowAccessTokens.setVisibility(View.VISIBLE);*/

                            new loadingTask().execute();



                            System.out.println("two");
                        }

                        @Override
                        public void onError(DialogError error) {
                            // Function to handle error

                        }

                        @Override
                        public void onFacebookError(FacebookError fberror) {
                            // Function to handle Facebook errors

                        }

                    });
        }
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
        facebook.authorizeCallback(requestCode, resultCode, data);
    }



    /**
     * Function to show Access Tokens
     * */
    public void showAccessTokens() {
        String access_token = facebook.getAccessToken();

        Toast.makeText(getApplicationContext(),
                "Access Token: " + access_token, Toast.LENGTH_LONG).show();
    }


    /**
     * Function to Logout user from Facebook
     * */
    public void logoutFromFacebook() {
        mAsyncRunner.logout(this, new RequestListener() {
            @Override
            public void onComplete(String response, Object state) {
                Log.d("Logout from Facebook", response);
                if (Boolean.parseBoolean(response) == true) {
                    runOnUiThread(new Runnable() {

                        @Override
                        public void run() {
                            // make Login button visible
                            /*btnFbLogin.setVisibility(View.VISIBLE);

                            // making all remaining buttons invisible
                            btnFbGetProfile.setVisibility(View.INVISIBLE);
                            btnPostToWall.setVisibility(View.INVISIBLE);
                            btnShowAccessTokens.setVisibility(View.INVISIBLE);*/
                        }

                    });

                }
            }

            @Override
            public void onIOException(IOException e, Object state) {
            }

            @Override
            public void onFileNotFoundException(FileNotFoundException e,
                    Object state) {
            }

            @Override
            public void onMalformedURLException(MalformedURLException e,
                    Object state) {
            }

            @Override
            public void onFacebookError(FacebookError e, Object state) {
            }
        });
    }

    @SuppressWarnings("deprecation")
    public void postOWall(String msg) {

         Bundle params = new Bundle();
         params.putString("link", "http://google.com");

         mAsyncRunner.request("me/feed", params, "POST", new RequestListener() {

            @Override
            public void onComplete(String response, Object state) {
                // TODO Auto-generated method stub
                Log.i("onComplete", "complete");
            }
            @Override
            public void onIOException(IOException e, Object state) {

                // TODO Auto-generated method stub
                e.printStackTrace();

                Log.i("onComplete", "onIOException");

            }
            @Override
            public void onFileNotFoundException(FileNotFoundException e,
                    Object state) {
                // TODO Auto-generated method stub
                e.printStackTrace();
                Log.i("onComplete", "onFileNotFoundException");
            }
            @Override
            public void onMalformedURLException(MalformedURLException e,
                    Object state) {
                // TODO Auto-generated method stub
                e.printStackTrace();
                Log.i("onComplete", "onMalformedURLException");

            }
            @Override
            public void onFacebookError(FacebookError e, Object state) {
                // TODO Auto-generated method stub
                e.printStackTrace();
                Log.i("onComplete", "onFacebookError");
            }

//        try {
//              // String response = facebook.request("me");
//               Bundle parameters = new Bundle();
//               //parameters.putString("caption", "Test Caption");   
//               parameters.putString("link", "http://www.google.com");
//              // parameters.putString("caption", "Test Caption: http://google.com/");
//              // parameters.putString("method", "stream.publish");
////               response = facebook.request("me/feed", parameters, 
////                       "POST");
//               //Utility.mAsyncRunner.request("me", params, new UserRequestListener());
//              // Util.mAsyncRunner.request("me", parameters, new UserRequestListener());
//               mAsyncRunner.request("me/feed", parameters, "POST", new UserRequestListener(),null);
////               Log.d("Tests", "got response: " + response);
////               if (response == null || response.equals("") || 
////                       response.equals("false")) {
////                  Log.v("Error", "Blank response");
////               }
//        } catch(Exception e) {
//            e.printStackTrace();
//        }

    }, params);

}

    public void postOnWall(String link) {
        try {
               String response = facebook.request("me");
               Bundle parameters = new Bundle();
               //parameters.putString("caption", "Test Caption");  
               System.out.println("response link: "+link);
               parameters.putString("link", link);
              // parameters.putString("caption", "Test Caption: http://google.com/");
              // parameters.putString("method", "stream.publish");
               response = facebook.request("me/feed", parameters, 
                       "POST");

                FacebookSuccessMessage.title="";
                FacebookSuccessMessage.mesg="Posté sur Facebook";
                FacebookSuccessMessage.button_text="OK";

                Log.d("Tests", "got response: " + response);

                if (response!=null){
                    Intent i = new Intent (getApplicationContext(), FacebookSuccessMessage.class);
                    startActivity(i);
                }

               if (response == null || response.equals("") || 
                       response.equals("false")) {
                  Log.v("Error", "Blank response");
               }
        } catch(Exception e) {
            e.printStackTrace();
        }
   }


     class loadingTask extends AsyncTask<Void, Void,Void> {

          @Override
        protected void onPreExecute() {
        // TODO Auto-generated method stub

          super.onPreExecute();

        }

        @Override
        protected void onPostExecute(Void result) {
        // TODO Auto-generated method stub


             super.onPostExecute(result);
        }

        @Override
        protected Void doInBackground(Void... params) {
        // TODO Auto-generated method stub
            System.out.println("response c : "+ constants);
             postOnWall(constants);

            return null;
        }


     }
4

1 回答 1

1

我已经测试了此代码以使用 Facebook SDK 3.0 发布,并且可以正常工作。

在您当前的项目中引用 Facebook SDK 3.0 Library 项目。在 String.xml 文件中设置 AppId:

<string name="app_id">123456789012345</string>

之后在清单文件中添加一个 MetaTag:

        <meta-data
        android:name="com.facebook.sdk.ApplicationId"
        android:value="@string/app_id" />

对于登录和注销,您可以简单地使用 Facebook 登录按钮小部件"com.facebook.widget.LoginButton"

此小部件自动管理会话,因此您不必担心。
只需将此按钮放在 Layout.xml 文件中的正确位置即可。
像任何其他按钮一样初始化此按钮:

LoginButton authButton = (LoginButton) findViewById(R.id.YOUR_ID);

初始化后,在 LoginButton 上设置权限

authButton.setPublishPermissions(Arrays.asList("publish_stream","read_stream"));

并实现登录按钮小部件的 setSessionStatusCallback 方法:

authButton.setSessionStatusCallback(new Session.StatusCallback() 
{
 public void call(Session session, SessionState state,Exception exception) 
{
// TODO Auto-generated method stub
if (session.isOpened()) 
    {
    Log.i(TAG, "Access Token" + session.getAccessToken());
    Request.executeMeRequestAsync(session,new Request.GraphUserCallback() {

    public void onCompleted(GraphUser user,Response response) 
        {
        // TODO Auto-generated method stub
        if (user != null) 
            {
            Log.i(TAG, "User ID " + user.getId());
            Log.i(TAG,"Email "+ user.asMap().get("email"));
            }
        }});
    } 
    else 
    {
    //This else condition will be executed when logout will be clicked.
    }
}
});

以下是在 Facebook 上发布的方法。

private void publishStory(String status)
{       
Session session = Session.getActiveSession();

if (session != null) 
    {
    Bundle postParams = new Bundle();
    postParams.putString("message", status);
    Request.Callback callback = new Request.Callback() 
        {
        public void onMalformedURLException(MalformedURLException e)
              {

              } 

        public void onIOException(IOException e) 
              {

              } 
        public void onFileNotFoundException(FileNotFoundExceptione) 
              {

              } 
        public void onFacebookError(FacebookError e) 
              {

              }


    public void onCompleted(Response response) 
    {
        JSONObject graphResponse = response.getGraphObject().getInnerJSONObject();
        String postId = null;
        try 
        {
            postId = graphResponse.getString("id");
        } 
        catch (JSONException e) 
        {
            Log.i("JSON", "JSON error " + e.getMessage());
        }
        FacebookRequestError error = response.getError();
        Log.e("post response", response.toString());
        if (error != null) 
        {
        } 
        else 
        {
        }
    }
};
Request request = new Request(session, "me/feed", postParams, HttpMethod.POST, callback);
RequestAsyncTask task = new RequestAsyncTask(request);
task.execute();
}
}
于 2013-07-16T18:45:36.980 回答