Photon Facebook Authentication
Server Side
Facebook App Setup
First, we need to create a Facebook application if you don't have one already.
- Go to Facebook Developers website.
- Click Apps -> Create a New App , enter the name of your app and press Create App button.
- Choose Apps -> [your_app] and copy App ID and App Secret.
Photon Configuration
- Open "deploy\NameServer\bin\NameServer.xml.config".
- Make sure CustomAuth is enabled, Enabled needs to be true.
- Optionally set AllowAnonymous to true or false depending on your needs.
We recommend setting it to false. - Set AuthenticationType to "2" which is the code for Facebook authentication provider type.
- Choose any name you want, we used "Facebook" for this example but you can change it.
- Leave "AuthUrl" empty as it's required but we don't need it as the authentication endpoint is internal.
- Set AppId and Secret to the values you get from Facebook developers portal for your Facebook app.
XML
<CustomAuth Enabled="true" AllowAnonymous="false">
<AuthProviders>
<AuthProvider Name="Facebook"
AuthenticationType="2"
AuthUrl=""
Secret="Val1"
AppId="Val2" />
</AuthProviders>
</CustomAuth>
Client Code
The client needs to set the correct authentication type (Facebook, 2) and send a valid Facebook token as a query string parameter named "token".
PUN
- Open Unity.
- Import.
- Setup PUN.
- Import Facebook SDK for Unity.
- In Unity's main menu go to Facebook -> Edit Settings, enter the App Name and App Id for your Facebook Application.
Implementation
Create a new MonoBehaviour, attach it to an object on scene and then open.
Use the following code for Facebook initialization and login:
C#
// Include Facebook namespace
using Facebook.Unity;
// [..]
private void Awake()
{
if (!FB.IsInitialized)
{
// Initialize the Facebook SDK
FB.Init(InitCallback);
}
else
{
FacebookLogin();
}
}
private void InitCallback()
{
if (FB.IsInitialized)
{
FacebookLogin();
}
else
{
Debug.Log("Failed to initialize the Facebook SDK");
}
}
private void FacebookLogin()
{
if (FB.IsLoggedIn)
{
OnFacebookLoggedIn();
}
else
{
var perms = new List<string>(){"public_profile", "email", "user_friends"};
FB.LogInWithReadPermissions(perms, AuthCallback);
}
}
private void AuthCallback(ILoginResult result)
{
if (FB.IsLoggedIn)
{
OnFacebookLoggedIn();
}
else
{
Debug.LogErrorFormat("Error in Facebook login {0}", result.Error);
}
}
To use Facebook Authentication in PUN, add:
C#
private void OnFacebookLoggedIn()
{
// AccessToken class will have session details
string aToken = AccessToken.CurrentAccessToken.TokenString;
string facebookId = AccessToken.CurrentAccessToken.UserId;
PhotonNetwork.AuthValues = new AuthenticationValues();
PhotonNetwork.AuthValues.AuthType = CustomAuthenticationType.Facebook;
PhotonNetwork.AuthValues.UserId = facebookId; // alternatively set by server
PhotonNetwork.AuthValues.AddAuthParameter("token", aToken);
PhotonNetwork.ConnectUsingSettings("1.0");
}
The PUN callbacks for success and error that you can implement are:
C#
public class FacebookAuthTest : MonoBehaviourPunCallbacks
{
public override void OnConnectedToMaster()
{
Debug.Log("Successfully connected to Photon!");
}
// something went wrong
public override void OnCustomAuthenticationFailed(string debugMessage)
{
Debug.LogErrorFormat("Error authenticating to Photon using facebook: {0}", debugMessage);
}
}