Android不应向发布或管理授权请求传递读取权限(电子邮件)
我正在为我的android应用程序使用Facebook SDK。它已成功登录,但在此之后,当我想要访问graph api时,它显示不应向发布或管理授权请求传递读取权限(电子邮件),并导致我的apk崩溃,出现空指针异常。 当我使用SessionLoginBehavior.SUPPRESS\u SSO时,它可以正常工作,但当使用SessionLoginBehavior.SSO\u和\u FALLBACK时,它会显示此错误 下面是我的FacebookService课程 公共类FacebookService{Android不应向发布或管理授权请求传递读取权限(电子邮件),android,facebook,facebook-graph-api,Android,Facebook,Facebook Graph Api,我正在为我的android应用程序使用Facebook SDK。它已成功登录,但在此之后,当我想要访问graph api时,它显示不应向发布或管理授权请求传递读取权限(电子邮件),并导致我的apk崩溃,出现空指针异常。 当我使用SessionLoginBehavior.SUPPRESS\u SSO时,它可以正常工作,但当使用SessionLoginBehavior.SSO\u和\u FALLBACK时,它会显示此错误 下面是我的FacebookService课程 公共类FacebookServi
private Context context;
private Session session;
private Session.StatusCallback statusCallback;
private List<String> permissions = Arrays.asList("email", "user_checkins", "user_birthday", "user_hometown",
"user_location");
private FacebookRequestListener facebookRequestListener;
private String profile_url;
public interface FacebookRequestListener {
void signedInFacebookUser(RamblerUser user);
void errorOccuredOnFacebook();
}
public FacebookService(Context context) {
this.context = context;
statusCallback = new SessionStatusCallback();
}
public void login() {
if (session == null) {
session = new Session(context);
Session.setActiveSession(session);
}
setupRequest();
}
public void logOut() {
session = Session.getActiveSession();
if (!session.isClosed()) {
session.closeAndClearTokenInformation();
}
}
public Boolean isSessionAvailable() {
if (session == null)
return false;
else
return session.isOpened();
}
private void setupRequest() {
OpenRequest request = new Session.OpenRequest(((Activity) context));
request.setLoginBehavior(SessionLoginBehavior.SSO_WITH_FALLBACK);
request.setCallback(statusCallback);
request.setPermissions(permissions);
session.openForPublish(request);
}
private class SessionStatusCallback implements Session.StatusCallback {
@Override
public void call(Session session, SessionState state, Exception exception) {
if (session.isOpened()) {
callProfilePictureApi();
}
}
}
public void addCallback() {
if (session != null) {
if (statusCallback != null)
Session.getActiveSession().addCallback(statusCallback);
}
}
public void removeCallback() {
if (session != null) {
if (statusCallback != null)
Session.getActiveSession().removeCallback(statusCallback);
}
}
public void activityResult(int requestCode, int resultCode, Intent data) {
Session.getActiveSession().onActivityResult(((Activity) context), requestCode, resultCode, data);
}
public void setFacebookRequestListener(FacebookRequestListener facebookRequestListener) {
this.facebookRequestListener = facebookRequestListener;
}
private void callProfilePictureApi() {
Bundle params = new Bundle();
params.putBoolean("redirect", false);
params.putString("height", "200");
params.putString("type", "normal");
params.putString("width", "200");
/* make the API call */
new Request(session, "/me/picture", params, HttpMethod.GET, new Request.Callback() {
public void onCompleted(Response response) {
/* handle the result */
GraphObject go = response.getGraphObject();
// go.getProperty("url");
JSONObject obj = go.getInnerJSONObject();
try {
profile_url = obj.getJSONObject("data").get("url").toString();
callProfileApi();
} catch (JSONException e) {
// TODO Auto-generated catch block
e.printStackTrace();
facebookRequestListener.errorOccuredOnFacebook();
}
}
}).executeAsync();
}
private void callProfileApi() {
Request.newMeRequest(session, new Request.GraphUserCallback() {
@Override
public void onCompleted(GraphUser user, Response response) {
// TODO Auto-generated method stub
if (user != null) {
String email = user.asMap().get("email").toString();
// Log.i("profile url", ""+
RamblerUser rambleUser = new RamblerUser();
rambleUser.socialId = user.getId();
rambleUser.address = user.getLocation() != null ? user.getLocation().getName() : "NA";
rambleUser.email = user.asMap().get("email").toString();
rambleUser.socialType = com.rambler.Rambler.LoginType.GPlus;
rambleUser.gender = "NA";
rambleUser.socilaProfileImageUrl = "NA";
rambleUser.socilaProfileImageUrl = profile_url;
rambleUser.name = user.getName();
rambleUser.screenName = user.getUsername();
Log.i("email address", email);
facebookRequestListener.signedInFacebookUser(rambleUser);
} else {
facebookRequestListener.errorOccuredOnFacebook();
}
}
}).executeAsync();
}
私有上下文;
非公开会议;
private Session.StatusCallback StatusCallback;
私有列表权限=Arrays.asList(“电子邮件”、“用户\签入”、“用户\生日”、“用户\家乡”,
“用户位置”);
专用FacebookRequestListener FacebookRequestListener;
私有字符串配置文件\u url;
公共接口FacebookRequestListener{
作废SignedFaceBookUser(RamblerUser用户);
void errorOccurrendFacebook();
}
公共FacebookService(上下文){
this.context=上下文;
statusCallback=新会话statusCallback();
}
公共无效登录(){
if(会话==null){
会话=新会话(上下文);
Session.setActiveSession(Session);
}
setupRequest();
}
公开作废注销(){
session=session.getActiveSession();
如果(!session.isClosed()){
session.closeAndClearTokenInformation();
}
}
公共布尔值isSessionAvailable(){
if(会话==null)
返回false;
其他的
return session.isopend();
}
私有void setupRequest(){
OpenRequest=newsession.OpenRequest(((活动)上下文));
request.setLoginBehavior(SessionLoginBehavior.SSO_和_回退);
request.setCallback(statusCallback);
request.setPermissions(权限);
openForPublish(请求);
}
私有类SessionStatusCallback实现Session.StatusCallback{
@凌驾
公共无效调用(会话、会话状态、异常){
if(session.isOpened()){
callProfilePictureApi();
}
}
}
公共void addCallback(){
if(会话!=null){
if(statusCallback!=null)
Session.getActiveSession().addCallback(statusCallback);
}
}
public void removeCallback(){
if(会话!=null){
if(statusCallback!=null)
Session.getActiveSession().removeCallback(statusCallback);
}
}
public void activityResult(int请求代码、int结果代码、意图数据){
Session.getActiveSession().onActivityResult(((活动)上下文)、请求代码、结果代码、数据);
}
公共void setFacebookRequestListener(FacebookRequestListener FacebookRequestListener){
this.facebookRequestListener=facebookRequestListener;
}
私有void callProfilePictureApi(){
Bundle params=新Bundle();
参数putBoolean(“重定向”,false);
参数putString(“高度”、“200”);
参数putString(“类型”、“正常”);
参数putString(“宽度”,“200”);
/*进行API调用*/
新请求(会话“/me/picture”、参数、HttpMethod.GET、新请求.Callback(){
未完成公共无效(响应){
/*处理结果*/
GraphObject go=response.getGraphObject();
//go.getProperty(“url”);
JSONObject obj=go.getInnerJSONObject();
试一试{
profile_url=obj.getJSONObject(“数据”).get(“url”).toString();
callProfileApi();
}捕获(JSONException e){
//TODO自动生成的捕捉块
e、 printStackTrace();
facebookRequestListener.ErrorOccurrendFacebook();
}
}
}).executeAsync();
}
私有void callProfileApi(){
Request.newMeRequest(会话,new Request.GraphUserCallback(){
@凌驾
未完成公共无效(GraphUser用户,响应){
//TODO自动生成的方法存根
如果(用户!=null){
字符串email=user.asMap().get(“email”).toString();
//Log.i(“配置文件url”)+
RamblerUser rambleUser=新的RamblerUser();
ramblueser.socialId=user.getId();
rambleUser.address=user.getLocation()!=null?user.getLocation().getName():“NA”;
ramblueser.email=user.asMap().get(“email”).toString();
ramblueser.socialType=com.rambler.rambler.LoginType.GPlus;
rambleUser.gender=“NA”;
ramblueser.socilaProfileImageUrl=“NA”;
rambleUser.socilaProfileImageUrl=配置文件url;
ramblueser.name=user.getName();
ramblueser.screenName=user.getUsername();
Log.i(“电子邮件地址”,电子邮件);
facebookRequestListener.SignedFaceBookUser(rambleUser);
}否则{
facebookRequestListener.ErrorOccurrendFacebook();
}
}
}).executeAsync();
}
}使用读取权限而不是发布权限。您正试图使用用于发布权限的函数请求读取权限。检查是否可以发布异常?