2013-06-05 7 views
5

sahip bir oturum için yeni izinler istemek için yapılmış ve aşağıda bir kod kullanmak edildi. Oturum: Oturum: bir girişim Ben Android uygulaması yoluyla hikaye yayınlamak istediğiniz bekleyen bir isteği

private static final List<String> PERMISSIONS = Arrays.asList("publish_actions"); 
    private static final String PENDING_PUBLISH_KEY = "pendingPublishReauthorization"; 
    private boolean pendingPublishReauthorization = false; 
    private UiLifecycleHelper uiHelper; 


    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     uiHelper = new UiLifecycleHelper(XXActivity.this, callback); 
     uiHelper.onCreate(savedInstanceState); 
     setContentView(R.layout.layoutAct); 
      ... 
      ... 
      ... 
     publishAddCardStory(); 
      ...   
    } 

    @Override 
    public void onResume() { 
     super.onResume(); 
     Session session = Session.getActiveSession(); 
     if (session != null && (session.isOpened() || session.isClosed())) { 
      onSessionStateChange(session, session.getState(), null); 
     } 
     uiHelper.onResume(); 
    } 

    @Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     uiHelper.onActivityResult(requestCode, resultCode, data); 
     Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data); 
    } 

    @Override 
    public void onPause() { 
     super.onPause(); 
     uiHelper.onPause(); 
    } 

    @Override 
    protected void onDestroy() { 
     super.onDestroy(); 
     uiHelper.onDestroy(); 
    } 

    @Override 
    public void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     outState.putBoolean(PENDING_PUBLISH_KEY, pendingPublishReauthorization); 
     uiHelper.onSaveInstanceState(outState); 
    } 



    private void publishAddCardStory() { 
     Session session = initFacebookSession(PopupAddCardSuccessActivity.this); 
     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 params = new Bundle(); 
      ... 
      params.putString("message", msg); 
      params.putString("description", desc); 
      params.putString("link", LINK); 
        ... 


      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("FB-Response", 
          "JSON error "+ e.getMessage()); 
        } 
        FacebookRequestError error = response.getError(); 
        if (error != null) { 
         Toast.makeText(XXActivity.this 
          .getApplicationContext(), 
          getString(R.string.fb_post_fail), 
          Toast.LENGTH_SHORT).show(); 
         } else { 
          Toast.makeText(XXActivity.this 
           .getApplicationContext(), 
           getString(R.string.fb_post_success), 
           Toast.LENGTH_LONG).show(); 
        } 
       } 
      }; 

      Request request = new Request(session, "me/feed", params, 
            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 onSessionStateChange(Session session, SessionState state, Exception exception) { 
     if (state.isOpened()) { 
      //shareButton.setVisibility(View.VISIBLE); 
     } else if (state.isClosed()) { 
      //shareButton.setVisibility(View.INVISIBLE); 
     } 
    } 


    private Session.StatusCallback callback = new Session.StatusCallback() { 
     @Override 
     public void call(Session session, SessionState state, 
       Exception exception) { 
      onSessionStateChange(session, state, exception); 
     } 
    }; 

    private static Session initFacebookSession(Context context) { 
     Session session = Session.getActiveSession(); 
     if (session != null) 
      return session; 

     if (session == null) 
      session = new Session(context); 
     return session; 
    } 

Bazen ben bu 2 hata ....

java.lang.UnsupportedOperationException var bir girişim bekleyen bir isteği var bir oturum için yeni izinler istemek için yapıldı.

veya bazen ...

java.lang.UnsupportedOperationException: Oturum: girişimi anda açık olmayan bir oturum için yeni izinler istemek için yapıldı.

herhangi bir öneri takdir edilecektir. Eğer sağ altında) Session.getActiveSession (call, böylece bu yöntemi silebileceğinden tüm

cevap

4

Öncelikle, initFacebookSession yöntemi işe yaramaz.

Ardından, onSessionStateChange yönteminde SessionState değişiklikleri ele olmalıdır.

  1. Eğer üzerinde requestNewPermissions çağrı yöntemini yayımlamak içinde onCreate
  2. yöntemini yayınlamak çağırır: değil ve publishAddCardStory yöntemi onCreate olduğunu diyoruz tek yer yapmak olsa da sizin hataları bu olduğunu olsun nedeni varsayalım Oturum, bu nedenle etkinlik imha edilecek ve iletişim ile facebook etkinlik kullanıcıdan yeni izinler izin istekleri görünür ve Oturum etkinlik tekrar oluşturulur
  3. iletişim
  4. yoluyla yeni izinler sağlayacak devleti
  5. kullanıcıyı bekleyen içine almak (veya değil), bu nedenle Sessio ise yine Oturum üzerinde newPermissionsRequest çağrı https://developers.facebook.com/docs/android/scrumptious/ nasıl SessionState değişiklikleri işlemek için: onSessionStateChange henüz

deneyin Facebook Dev Tutorials bakmak için çağrılmadı iken n bekleme durumunda hala. Facebook SDK aynı zamanda yararlı olabilecek bazı örnek uygulamalar sağlar. İyi şanslar! :)

İlgili konular