Android 取消个人权限后更新会话
我试图给用户一个通过复选框(Facebook SDK for Android)设置/撤销发布权限的选项。代码如下所示。一切正常,只是在撤销负责检查发布权限的代码后失败得很惨 我知道会话无法知道用户在登录后是否已撤销任何权限。处理这种情况的正确方法是什么?我是否必须手动查询可用的权限,或者是否有方法使用基本权限无缝地重新创建会话Android 取消个人权限后更新会话,android,session,facebook-android-sdk,Android,Session,Facebook Android Sdk,我试图给用户一个通过复选框(Facebook SDK for Android)设置/撤销发布权限的选项。代码如下所示。一切正常,只是在撤销负责检查发布权限的代码后失败得很惨 我知道会话无法知道用户在登录后是否已撤销任何权限。处理这种情况的正确方法是什么?我是否必须手动查询可用的权限,或者是否有方法使用基本权限无缝地重新创建会话 public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedIn
public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
...
publishCheckbox = (CheckBox) view.findViewById(R.id.publishCheckbox);
publishCheckbox.setOnClickListener(new View.OnClickListener(){
@Override
public void onClick(View v) {
CheckBox chb = (CheckBox) v;
if (chb.isChecked() && checkForPublishPermission() == false){
requestPublishPermissions();
}
else{
removePublishPermissions();
}
}
});
...
}
private void requestPublishPermissions() {
Session session = Session.getActiveSession();
if ( session!= null && session.isOpened()){
Session.NewPermissionsRequest newPermissionsRequest = new Session.NewPermissionsRequest(this, PERMISSIONS).setRequestCode(REAUTH_ACTIVITY_CODE);
newPermissionsRequest.setCallback(callback);
session.requestNewPublishPermissions(newPermissionsRequest);
}
}
private void removePublishPermissions() {
Request r = new Request(Session.getActiveSession(), PUBLISH_ACTIONS_PERMISSION_PATH, null, HttpMethod.DELETE);
r.setCallback(new Request.Callback() {
@Override
public void onCompleted(Response response) {
publishCheckbox.setEnabled(true);
}
});
r.executeAsync();
publishCheckbox.setEnabled(false);
}
private boolean checkForPublishPermission(){
boolean result = false;
Session session = Session.getActiveSession();
if (session == null || !session.isOpened()) {
result = false;
}
else{
List<String> permissions = session.getPermissions();
if (permissions.containsAll(PERMISSIONS)) {
result = true;
}
}
return(result);
}
private void onSessionStateChange(Session session, SessionState state, Exception exception) {
if (state.isOpened()) {
...
publishCheckbox.setChecked(checkForPublishPermission());
...
} else if (state.isClosed()) {
...
}
}
创建视图时的公共视图(布局、充气机、视图组容器、捆绑包保存状态){
...
publishCheckbox=(复选框)view.findViewById(R.id.publishCheckbox);
publishCheckbox.setOnClickListener(新视图.OnClickListener(){
@凌驾
公共void onClick(视图v){
复选框chb=(复选框)v;
if(chb.isChecked()&&checkForPublishPermission()==false){
requestPublishPermissions();
}
否则{
removePublishPermissions();
}
}
});
...
}
私有void requestPublishPermissions(){
Session=Session.getActiveSession();
if(session!=null&&session.isOpened()){
Session.NewPermissionsRequest NewPermissionsRequest=newsession.NewPermissionsRequest(这个,PERMISSIONS.setRequestCode)(重新授权活动代码);
newPermissionsRequest.setCallback(回调);
session.requestNewPublishPermissions(newPermissionsRequest);
}
}
私有void removePublishPermissions(){
请求r=新请求(Session.getActiveSession(),发布\操作\权限\路径,null,HttpMethod.DELETE);
r、 setCallback(newrequest.Callback(){
@凌驾
未完成公共无效(响应){
publishCheckbox.setEnabled(true);
}
});
r、 executeAsync();
publishCheckbox.setEnabled(false);
}
私有布尔值checkForPublishPermission(){
布尔结果=假;
Session=Session.getActiveSession();
if(session==null | |!session.isOpened()){
结果=假;
}
否则{
List permissions=session.getPermissions();
if(权限.containsAll(权限)){
结果=真;
}
}
返回(结果);
}
private void OnSessionState更改(会话、会话状态、异常){
如果(state.isOpened()){
...
setChecked(checkForPublishPermission());
...
}如果(state.isClosed()){
...
}
}
每次需要这样的检查时,我都会请求用户权限,大致如下:
private void checkForPublishPermission(){
mPublishCheckbox.setEnabled(false);
Request r = new Request(Session.getActiveSession(), PUBLISH_ACTIONS_PERMISSION_PATH, null, HttpMethod.GET);
r.setCallback(new Request.Callback() {
@Override
public void onCompleted(Response response) {
if (response != null) {
GraphObject o = response.getGraphObject();
if ( o != null){
JSONArray data = o.getInnerJSONObject().optJSONArray("data");
mCanPublish = (data.optJSONObject(0).has("publish_actions"))?true:false;
mPublishCheckbox.setChecked(mCanPublish);
}
}
mPublishCheckbox.setEnabled(true);
}
});
r.executeAsync();
}
我也在等待答复。如果用户从其在线帐户会话中删除整个应用程序,请识别它,然后您将注销。但是如果用户只是删除了一个权限,会话将不会更新他的权限。