- Home /
Facebook SDK - Rerequest Permission
Hi there,
How do you rerequest a permission with Facebook SDK that the user has declined? Specifically I want to rerequest user_friends. publish_actions works if I follow the example described bellow.
example:
if I call
FB.Login("user_friends", LoginCallback);
And the user declines user_friends. How do I rerequest the permission at a later point?
If I call again
FB.Login("user_friends", LoginCallback);
Facebook tells me the user has already authorised the application and does not prompt them to authorise the declined permission.
My only solution at the moment is to remove all permissions, log the user out.; then the next time they sign in they will be re requested to authorise all of the permissions.
Here is the test script I'm using. It may be helpful for anyone wanting to test / help out.
using UnityEngine;
using System.Collections;
using System;
using System.Collections.Generic;
public class FBLoginTest : MonoBehaviour
{
bool isInit = false;
string hasPerm = "***";
void OnGUI()
{
if (GUI.Button (new Rect (10, 10, 300, 100), "InitInit: " + isInit))
CallFBInit ();
if (GUI.Button (new Rect (10, 110, 300, 100), "LogIn - Logged: " + FB.IsLoggedIn))
CallFBLogin ();
if (GUI.Button (new Rect (10, 210, 300, 100), "Permission - friends: " + hasPerm))
CallPermissionCheck();
}
private void CallFBInit()
{
FB.Init(OnInitComplete, OnHideUnity);
}
private void OnInitComplete()
{
Debug.Log("FB.Init completed: Is user logged in? " + FB.IsLoggedIn);
isInit = true;
}
private void OnHideUnity(bool isGameShown)
{
Debug.Log("Is game showing? " + isGameShown);
}
private void CallFBLogin()
{
FB.Login("publish_actions, user_friends", LoginCallback);
}
void LoginCallback(FBResult result)
{
string lastResponse;
if (result.Error != null)
lastResponse = "Error Response:\n" + result.Error;
else if (!FB.IsLoggedIn)
{
lastResponse = "Login cancelled by Player";
}
else
{
lastResponse = "Login was successful!";
}
Debug.Log("lastResponse: "+lastResponse);
}
void CallPermissionCheck()
{
FB.API("/me/permissions", Facebook.HttpMethod.GET, PermissionCallback);
}
void PermissionCallback(FBResult result)
{
if (!String.IsNullOrEmpty(result.Error))
{
Debug.Log("Error Response:\n" + result.Error);
}
else
{
Debug.Log("Get user's permissions was successful!");
Debug.Log ("Result: "+result.Text);
var permissionDict = Facebook.MiniJSON.Json.Deserialize(result.Text) as Dictionary<string, object>;
IDictionary persmissionData = permissionDict;
foreach(IDictionary perm in (List<object>)persmissionData["data"])
{
if((string)perm["permission"] == "user_friends")
{
hasPerm = (string)perm["status"];
// This will deauthorise the permissions for the user and then log them out
/*
if(hasPerm != "granted")
{
FB.API ("me/permissions", Facebook.HttpMethod.DELETE, RemovePermissionCallback);
FB.Logout();
}
*/
}
}
}
}
void RemovePermissionCallback(FBResult result)
{
if (!String.IsNullOrEmpty(result.Error))
{
Debug.Log("Error Response:\n" + result.Error);
}
else
{
Debug.Log("RemovePermissionCallback was successful!");
Debug.Log ("Result: "+result.Text);
}
}
}
Odd, I thought attempting to login again would work. Will do some digging when I get the time.
@Bored$$anonymous$$ormon thanks, I appreciate any help. I've been digging up the internet for a while on this one.
I feel your pain. The documentation for the SD$$anonymous$$ is pretty weak