2013-02-04 113 views
3

我要求的電子郵件,user_birthday和名稱。每次登錄Web視圖出現時,它只會列出基本信息。Facebook的Android SDK 3.0授權對話框不顯示請求的權限

這似乎與onClickLogin偵聽器中對openActiveSession的調用有關。

該類是「SessionLoginSample」Facebook示例項目的「LoginUsingActivityActivity.java」文件的複製/粘貼。我添加的唯一東西是權限,關閉會話onStart和onStop,並添加請求以檢索SessionStatusCallback中的用戶信息。

我一直未能找到授權對話框中沒有顯示權限的原因。非常感謝任何幫助,代碼粘貼在下面。

package com.mydomain.test.login; 

import java.util.ArrayList; 
import java.util.List; 

import android.app.Activity; 
import android.content.Intent; 
import android.os.Bundle; 
import android.util.Log; 
import android.view.View; 
import android.view.View.OnClickListener; 
import android.widget.Button; 
import android.widget.TextView; 
import com.facebook.LoggingBehavior; 
import com.facebook.Request; 
import com.facebook.Response; 
import com.facebook.Session; 
import com.facebook.SessionState; 
import com.facebook.Settings; 
import com.facebook.model.GraphUser; 

public class LoginTest extends Activity { 
    private static final String URL_PREFIX_FRIENDS = "https://graph.facebook.com/me/friends?access_token="; 
    private List<String> perms; 

    private TextView textInstructionsOrLink; 
    private Button buttonLoginLogout; 
    private Session.StatusCallback statusCallback = new SessionStatusCallback(); 

    @Override 
    public void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_login_test); 
     buttonLoginLogout = (Button)findViewById(R.id.fbLogin); 
     textInstructionsOrLink = (TextView)findViewById(R.id.textView1); 
     perms = new ArrayList<String>(); 
     perms.add("email"); 
     perms.add("name"); 
     perms.add("user_birthday"); 

     Settings.addLoggingBehavior(LoggingBehavior.INCLUDE_ACCESS_TOKENS); 

     Session session = Session.getActiveSession(); 
     if (session == null) { 
      if (savedInstanceState != null) { 
       session = Session.restoreSession(this, null, statusCallback, savedInstanceState); 
      } 
      if (session == null) { 
       session = new Session(this); 
      } 
      Session.setActiveSession(session); 
      if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED)) { 
       session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback).setPermissions(perms)); 
      } 
     } 

     updateView(); 
    } 

    @Override 
    public void onStart() { 
     super.onStart(); 
     Session.getActiveSession().addCallback(statusCallback); 
     if(Session.getActiveSession() != null) 
      Session.getActiveSession().close(); 
    } 

    @Override 
    public void onStop() { 
     super.onStop(); 
     Session.getActiveSession().removeCallback(statusCallback); 
     if(Session.getActiveSession() != null) 
      Session.getActiveSession().close(); 
    } 

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

    @Override 
    protected void onSaveInstanceState(Bundle outState) { 
     super.onSaveInstanceState(outState); 
     Session session = Session.getActiveSession(); 
     Session.saveSession(session, outState); 
    } 

    private void updateView() { 
     Session session = Session.getActiveSession(); 
     if (session.isOpened()) { 
      textInstructionsOrLink.setText(URL_PREFIX_FRIENDS + session.getAccessToken()); 
      buttonLoginLogout.setText(R.string.fbLogout); 
      buttonLoginLogout.setOnClickListener(new OnClickListener() { 
       public void onClick(View view) { onClickLogout(); } 
      }); 
     } else { 
      textInstructionsOrLink.setText(R.string.hello_world); 
      buttonLoginLogout.setText(R.string.fbLogin); 
      buttonLoginLogout.setOnClickListener(new OnClickListener() { 
       public void onClick(View view) { onClickLogin(); } 
      }); 
     } 
    } 

    private void onClickLogin() { 
     Session session = Session.getActiveSession(); 
     if (!session.isOpened() && !session.isClosed()) { 
      session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback).setPermissions(perms)); 
     } else { 
      Session.openActiveSession(this, true, statusCallback); 
     } 
    } 

    private void onClickLogout() { 
     Session session = Session.getActiveSession(); 
     if (!session.isClosed()) { 
      session.closeAndClearTokenInformation(); 
     } 
    } 

    private class SessionStatusCallback implements Session.StatusCallback { 
     @Override 
     public void call(Session session, SessionState state, Exception exception) { 
      if(session.isOpened()){ 
       Request.executeMeRequestAsync(session, new Request.GraphUserCallback() { 

        @Override 
        public void onCompleted(GraphUser user, Response response) { 
         Log.i("FB_TEST", response.toString()); 
         Log.i("FB_TEST", user.getName() + " -- " + "DOB: " + user.getBirthday() + " EMAIL: " + user.getProperty("email")); 
        } 
       }); 
      } 
      updateView(); 
     } 
    } 
} 

回答

3

您可以使用下面的代碼添加所需的權限

session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback).setPermissions(Arrays.asList("email", "user_status"))); 
相關問題