Android 如何使用Facebook请求发布权限';s安卓SDK?
在不使用任何UI/按钮的情况下,如何使用Facebook的Android SDK请求Facebook应用程序的发布权限?我目前正在使用这段代码,但它注册了两次回调,并给出了重复的结果。请求发布权限的正确方法是什么Android 如何使用Facebook请求发布权限';s安卓SDK?,android,facebook,facebook-graph-api,facebook-sdk-4.0,Android,Facebook,Facebook Graph Api,Facebook Sdk 4.0,在不使用任何UI/按钮的情况下,如何使用Facebook的Android SDK请求Facebook应用程序的发布权限?我目前正在使用这段代码,但它注册了两次回调,并给出了重复的结果。请求发布权限的正确方法是什么 List<String> basicPermissions = Arrays.asList("user_friends", "user_games_activity"); List<String> publishPermissions = Arr
List<String> basicPermissions = Arrays.asList("user_friends", "user_games_activity");
List<String> publishPermissions = Arrays.asList("publish_actions");
mCallbackManager = CallbackManager.Factory.create();
LoginManager.getInstance().logInWithReadPermissions(this, basicPermissions);
LoginManager.getInstance().logInWithPublishPermissions(this, publishPermissions);
LoginManager.getInstance().registerCallback(mCallbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResults) {
new GraphRequest(
AccessToken.getCurrentAccessToken(),
"/{my-app-id}/scores",
null,
HttpMethod.GET,
new GraphRequest.Callback() {
public void onCompleted(GraphResponse response) {
// my code
}
}
).executeAsync();
}
@Override
public void onCancel() {
Log.e("dd","facebook login canceled");
}
@Override
public void onError(FacebookException e) {
Log.e("dd", "facebook login failed error");
}
});
List basicPermissions=Arrays.asList(“用户朋友”、“用户游戏”活动);
List publishPermissions=Arrays.asList(“发布操作”);
mCallbackManager=CallbackManager.Factory.create();
LoginManager.getInstance().logInWithReadPermissions(这是基本权限);
LoginManager.getInstance().logInWithPublishPermissions(此为publishPermissions);
LoginManager.getInstance().registerCallback(mCallbackManager,
新建FacebookCallback(){
@凌驾
成功时公共无效(登录结果登录结果){
新格力探索(
AccessToken.getCurrentAccessToken(),
“/{my app id}/scores”,
无效的
HttpMethod.GET,
新建GraphRequest.Callback(){
未完成公共空白(图形响应){
//我的代码
}
}
).executeAsync();
}
@凌驾
公开作废{
Log.e(“dd”,“facebook登录已取消”);
}
@凌驾
公共无效onError(FaceBook例外e){
Log.e(“dd”,“facebook登录失败错误”);
}
});
根据FB,在用户成功从读取权限请求返回之前,您不应请求发布权限。所以你必须把它改成这样:
private boolean publishPermissionsRequested = false;
private LoginResult readResultSuccess;
private void loginWithFacebook(){
LoginManager.getInstance().registerCallback(mCallbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResults) {
if(!publishPermissionsRequested){
publishPermissionsRequested = true;
readResultSuccess = loginResults;
LoginManager.getInstance()
.logInWithPublishPermissions(this, publishPermissions);
return;
}
onFacebookLoginSuccessful(loginResults);
}
@Override
public void onCancel() {
if(publishPermissionsRequested && readResultSuccess != null)
onFacebookLoginSuccessful(readResultSuccess);
}
@Override
public void onError(FacebookException e) { {
if(publishPermissionsRequested && readResultSuccess != null)
onFacebookLoginSuccessful(readResultSuccess);
}
});
LoginManager.getInstance()
.logInWithReadPermissions(this, basicPermissions);
}
private void onFacebookLoginSuccessful(LoginResult loginResults){
new GraphRequest(
AccessToken.getCurrentAccessToken(),
"/{my-app-id}/scores",
null,
HttpMethod.GET,
new GraphRequest.Callback() {
public void onCompleted(GraphResponse response) {
// Your code
}
}
).executeAsync();
}
private boolean publishPermissionsRequested=false;
私人登录结果ReadResultAccess;
私有void loginWithFacebook(){
LoginManager.getInstance().registerCallback(mCallbackManager,
新建FacebookCallback(){
@凌驾
成功时公共无效(登录结果登录结果){
如果(!要求发布许可){
publishPermissionsRequested=真;
ReadResultAccess=loginResults;
LoginManager.getInstance()
.logInWithPublishPermissions(此为publishPermissions);
返回;
}
onFacebookLoginSuccessful(登录结果);
}
@凌驾
public void onCancel(){
if(publishPermissionsRequested&&ReadResultsAccess!=null)
OnFaceBookLoginSuccess(readResultSuccess);
}
@凌驾
公共无效onError(FacebookException e){
if(publishPermissionsRequested&&ReadResultsAccess!=null)
OnFaceBookLoginSuccess(readResultSuccess);
}
});
LoginManager.getInstance()
.logInWithReadPermissions(这是基本权限);
}
私有void onfacebook登录成功(LoginResult loginResults){
新格力探索(
AccessToken.getCurrentAccessToken(),
“/{my app id}/scores”,
无效的
HttpMethod.GET,
新建GraphRequest.Callback(){
未完成公共空白(图形响应){
//你的代码
}
}
).executeAsync();
}
这样,如果他们接受读取权限但拒绝(或失败)发布权限请求,则仍将继续成功
希望这将为您指明正确的方向。根据FB的说法,在用户成功从读取权限请求返回之前,您不应该请求发布权限。因此,您必须将其更改为类似以下内容:
private boolean publishPermissionsRequested = false;
private LoginResult readResultSuccess;
private void loginWithFacebook(){
LoginManager.getInstance().registerCallback(mCallbackManager,
new FacebookCallback<LoginResult>() {
@Override
public void onSuccess(LoginResult loginResults) {
if(!publishPermissionsRequested){
publishPermissionsRequested = true;
readResultSuccess = loginResults;
LoginManager.getInstance()
.logInWithPublishPermissions(this, publishPermissions);
return;
}
onFacebookLoginSuccessful(loginResults);
}
@Override
public void onCancel() {
if(publishPermissionsRequested && readResultSuccess != null)
onFacebookLoginSuccessful(readResultSuccess);
}
@Override
public void onError(FacebookException e) { {
if(publishPermissionsRequested && readResultSuccess != null)
onFacebookLoginSuccessful(readResultSuccess);
}
});
LoginManager.getInstance()
.logInWithReadPermissions(this, basicPermissions);
}
private void onFacebookLoginSuccessful(LoginResult loginResults){
new GraphRequest(
AccessToken.getCurrentAccessToken(),
"/{my-app-id}/scores",
null,
HttpMethod.GET,
new GraphRequest.Callback() {
public void onCompleted(GraphResponse response) {
// Your code
}
}
).executeAsync();
}
private boolean publishPermissionsRequested=false;
私人登录结果ReadResultAccess;
私有void loginWithFacebook(){
LoginManager.getInstance().registerCallback(mCallbackManager,
新建FacebookCallback(){
@凌驾
成功时公共无效(登录结果登录结果){
如果(!要求发布许可){
publishPermissionsRequested=真;
ReadResultAccess=loginResults;
LoginManager.getInstance()
.logInWithPublishPermissions(此为publishPermissions);
返回;
}
onFacebookLoginSuccessful(登录结果);
}
@凌驾
public void onCancel(){
if(publishPermissionsRequested&&ReadResultsAccess!=null)
OnFaceBookLoginSuccess(readResultSuccess);
}
@凌驾
公共无效onError(FacebookException e){
if(publishPermissionsRequested&&ReadResultsAccess!=null)
OnFaceBookLoginSuccess(readResultSuccess);
}
});
LoginManager.getInstance()
.logInWithReadPermissions(这是基本权限);
}
私有void onfacebook登录成功(LoginResult loginResults){
新格力探索(
AccessToken.getCurrentAccessToken(),
“/{my app id}/scores”,
无效的
HttpMethod.GET,
新建GraphRequest.Callback(){
未完成公共空白(图形响应){
//你的代码
}
}
).executeAsync();
}
这样,如果他们接受读取权限但拒绝(或失败)发布权限请求,则仍将继续成功
希望这能为你指明方向