2013-04-28 59 views
0

讀取FB發佈tutorialFacebook的sdk3發佈

我想實現一個簡單的發佈之後,但在我的應用程序的用戶沒有通過FB來登錄。 如果需要的話,我想打開登錄,如果分享。

而且我得到了一個異常:

04-28 12:15:57.350: E/AndroidRuntime(32241): FATAL EXCEPTION: main 
04-28 12:15:57.350: E/AndroidRuntime(32241): java.lang.UnsupportedOperationException: Session: an attempt was made to request new permissions for a session that has a pending request. 
04-28 12:15:57.350: E/AndroidRuntime(32241): at com.facebook.Session.requestNewPermissions(Session.java:968) 
04-28 12:15:57.350: E/AndroidRuntime(32241): at com.facebook.Session.requestNewPublishPermissions(Session.java:501) 

我的代碼:

@Override 
     public void onActivityResult(int requestCode, int resultCode, Intent data) { 
      super.onActivityResult(requestCode, resultCode, data); 
      boolean isFacebookResponse = 
        Session.getActiveSession().onActivityResult(getActivity(), requestCode, resultCode, data); 
      if (isFacebookResponse) { 
       shareViaFacebook(); 
      } 
     } 

private void CheckFacebookLogin(){ 
     if(Session.getActiveSession() == null){ 
      logInToFacebook(); 
     }else{ 
      shareViaFacebook(); 
     } 
    } 

    private void shareViaFacebook() { 
     Session session = Session.getActiveSession(); 

     if (session != null){ 

      // Check for publish permissions  
      List<String> permissions = session.getPermissions(); 
      if (!isSubsetOf(PERMISSIONS, permissions)) { 
       pendingPublishReauthorization = true; 
       Session.NewPermissionsRequest newPermissionsRequest = new Session 
         .NewPermissionsRequest(this, PERMISSIONS); 
      session.requestNewPublishPermissions(newPermissionsRequest); 
       return; 
      } 

      Bundle postParams = new Bundle(); 
      postParams.putString("name", "Facebook SDK for Android"); 
      postParams.putString("caption", "Build great social apps and get more installs."); 
      postParams.putString("description", "The Facebook SDK for Android makes it easier and faster to develop Facebook integrated Android apps."); 
      postParams.putString("link", "https://developers.facebook.com/android"); 
      postParams.putString("picture", "https://raw.github.com/fbsamples/ios-3.x-howtos/master/Images/iossdk_logo.png"); 

      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(GA_CATEGORY, 
          "JSON error "+ e.getMessage()); 
        } 
        FacebookRequestError error = response.getError(); 
        if (error != null) { 
         Toast.makeText(getActivity() 
          .getApplicationContext(), 
          error.getErrorMessage(), 
          Toast.LENGTH_SHORT).show(); 
         } else { 
          Toast.makeText(getActivity() 
           .getApplicationContext(), 
           postId, 
           Toast.LENGTH_LONG).show(); 
        } 
       } 
      }; 

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

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

    private boolean isSubsetOf(Collection<String> subset, Collection<String> superset) { 
     for (String string : subset) { 
      if (!superset.contains(string)) { 
       return false; 
      } 
     } 
     return true; 
    } 

    private void logInToFacebook() { 
     String app_id = getString(R.string.app_id); 

     Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS); 

     Session session = new Session.Builder(getActivity()) 
       .setApplicationId(app_id) 
       .build(); 
     session.addCallback(this); 
     Session.setActiveSession(session); 

     // Login 
     if (!session.isOpened() && !session.isClosed()) { 
      session.openForRead(new Session.OpenRequest(this) 
        .setCallback(this)); 
     } else { 
      Session.openActiveSession(getActivity(), true, this); 
     } 
    } 

登錄代碼工作。 我做錯了什麼?

回答

1

我認爲你正在嘗試登錄和共享操作在同一時間。您應該等到登錄操作完成所需的權限。然後你可以通過你的應用程序分享你的內容。希望這可以幫助。

+0

我該怎麼做? – NickF 2013-04-28 11:18:02

+0

你應該在onCompleted()方法中調用shareOnFacebook()方法。 – ACengiz 2013-04-28 13:46:46