289 lines
9.3 KiB
C#
289 lines
9.3 KiB
C#
/**
|
|
* Copyright (c) 2014-present, Facebook, Inc. All rights reserved.
|
|
*
|
|
* You are hereby granted a non-exclusive, worldwide, royalty-free license to use,
|
|
* copy, modify, and distribute this software in source code or binary form for use
|
|
* in connection with the web services and APIs provided by Facebook.
|
|
*
|
|
* As with any software that integrates with the Facebook platform, your use of
|
|
* this software is subject to the Facebook Developer Principles and Policies
|
|
* [http://developers.facebook.com/policy/]. This copyright notice shall be
|
|
* included in all copies or substantial portions of the software.
|
|
*
|
|
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
|
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, FITNESS
|
|
* FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR
|
|
* COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER
|
|
* IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN
|
|
* CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
|
*/
|
|
|
|
namespace Facebook.Unity.Example
|
|
{
|
|
using System.Collections.Generic;
|
|
using System.Linq;
|
|
using UnityEngine;
|
|
|
|
|
|
|
|
internal sealed class MainMenu : MenuBase
|
|
{
|
|
|
|
enum Scope {
|
|
PublicProfile = 1,
|
|
UserFriends = 2,
|
|
UserBirthday = 3,
|
|
UserAgeRange = 4,
|
|
PublishActions = 5,
|
|
UserLocation = 6,
|
|
UserHometown = 7,
|
|
UserGender = 8,
|
|
};
|
|
|
|
protected override bool ShowBackButton()
|
|
{
|
|
return false;
|
|
}
|
|
|
|
protected override void GetGui()
|
|
{
|
|
GUILayout.BeginVertical();
|
|
|
|
|
|
bool enabled = GUI.enabled;
|
|
if (this.Button("FB.Init"))
|
|
{
|
|
FB.Init(this.OnInitComplete, this.OnHideUnity);
|
|
this.Status = "FB.Init() called with " + FB.AppId;
|
|
}
|
|
|
|
GUILayout.BeginHorizontal();
|
|
|
|
GUI.enabled = enabled && FB.IsInitialized;
|
|
if (this.Button("Classic login"))
|
|
{
|
|
this.CallFBLogin(LoginTracking.ENABLED, new HashSet<Scope> { Scope.PublicProfile });
|
|
this.Status = "Classic login called";
|
|
}
|
|
if (this.Button("Get publish_actions"))
|
|
{
|
|
this.CallFBLoginForPublish();
|
|
this.Status = "Login (for publish_actions) called";
|
|
}
|
|
|
|
GUILayout.EndHorizontal();
|
|
GUILayout.BeginHorizontal();
|
|
|
|
if (this.Button("Limited login"))
|
|
{
|
|
this.CallFBLogin(LoginTracking.LIMITED, new HashSet<Scope> { Scope.PublicProfile });
|
|
this.Status = "Limited login called";
|
|
|
|
}
|
|
if (this.Button("Limited login +friends"))
|
|
{
|
|
this.CallFBLogin(LoginTracking.LIMITED, new HashSet<Scope> { Scope.PublicProfile, Scope.UserFriends });
|
|
this.Status = "Limited login +friends called";
|
|
|
|
}
|
|
|
|
GUILayout.EndHorizontal();
|
|
GUILayout.BeginHorizontal();
|
|
|
|
if (this.Button("Limited Login+bday"))
|
|
{
|
|
this.CallFBLogin(LoginTracking.LIMITED, new HashSet<Scope> { Scope.PublicProfile, Scope.UserBirthday });
|
|
this.Status = "Limited login +bday called";
|
|
}
|
|
|
|
if (this.Button("Limited Login+agerange"))
|
|
{
|
|
this.CallFBLogin(LoginTracking.LIMITED, new HashSet<Scope> { Scope.PublicProfile, Scope.UserAgeRange });
|
|
this.Status = "Limited login +agerange called";
|
|
}
|
|
|
|
GUILayout.EndHorizontal();
|
|
GUILayout.BeginHorizontal();
|
|
|
|
if (this.Button("Limited Login + location"))
|
|
{
|
|
this.CallFBLogin(LoginTracking.LIMITED, new HashSet<Scope> { Scope.PublicProfile, Scope.UserLocation });
|
|
}
|
|
|
|
if (this.Button("Limited Login + Hometown"))
|
|
{
|
|
this.CallFBLogin(LoginTracking.LIMITED, new HashSet<Scope> { Scope.PublicProfile, Scope.UserHometown });
|
|
}
|
|
|
|
GUILayout.EndHorizontal();
|
|
GUILayout.BeginHorizontal();
|
|
|
|
if (this.Button("Limited Login + Gender"))
|
|
{
|
|
this.CallFBLogin(LoginTracking.LIMITED, new HashSet<Scope> { Scope.PublicProfile, Scope.UserGender });
|
|
}
|
|
|
|
|
|
GUI.enabled = FB.IsLoggedIn;
|
|
|
|
|
|
// Fix GUILayout margin issues
|
|
GUILayout.Label(GUIContent.none, GUILayout.MinWidth(ConsoleBase.MarginFix));
|
|
GUILayout.EndHorizontal();
|
|
|
|
|
|
GUILayout.BeginHorizontal();
|
|
|
|
// Fix GUILayout margin issues
|
|
GUILayout.Label(GUIContent.none, GUILayout.MinWidth(ConsoleBase.MarginFix));
|
|
GUILayout.EndHorizontal();
|
|
|
|
#if !UNITY_WEBGL
|
|
if (this.Button("Logout"))
|
|
{
|
|
CallFBLogout();
|
|
this.Status = "Logout called";
|
|
}
|
|
#endif
|
|
|
|
GUI.enabled = enabled && FB.IsInitialized;
|
|
if (this.Button("Share Dialog"))
|
|
{
|
|
this.SwitchMenu(typeof(DialogShare));
|
|
}
|
|
|
|
if (this.Button("App Requests"))
|
|
{
|
|
this.SwitchMenu(typeof(AppRequests));
|
|
}
|
|
|
|
if (this.Button("Graph Request"))
|
|
{
|
|
this.SwitchMenu(typeof(GraphRequest));
|
|
}
|
|
|
|
if (Constants.IsWeb && this.Button("Pay"))
|
|
{
|
|
this.SwitchMenu(typeof(Pay));
|
|
}
|
|
|
|
if (this.Button("App Events"))
|
|
{
|
|
this.SwitchMenu(typeof(AppEvents));
|
|
}
|
|
|
|
if (this.Button("App Links"))
|
|
{
|
|
this.SwitchMenu(typeof(AppLinks));
|
|
}
|
|
|
|
if (this.Button("Tournaments"))
|
|
{
|
|
this.SwitchMenu(typeof(TournamentsMenu));
|
|
}
|
|
|
|
if (Constants.IsMobile && this.Button("Access Token"))
|
|
{
|
|
this.SwitchMenu(typeof(AccessTokenMenu));
|
|
}
|
|
|
|
if (this.Button("UploadToMediaLibrary"))
|
|
{
|
|
this.SwitchMenu(typeof(UploadToMediaLibrary));
|
|
}
|
|
|
|
GUILayout.EndVertical();
|
|
|
|
GUI.enabled = enabled;
|
|
}
|
|
|
|
private void CallFBLogin(LoginTracking mode, HashSet<Scope> scope)
|
|
{
|
|
List<string> scopes = new List<string>();
|
|
|
|
if(scope.Contains(Scope.PublicProfile)) {
|
|
scopes.Add("public_profile");
|
|
}
|
|
if(scope.Contains(Scope.UserFriends))
|
|
{
|
|
scopes.Add("user_friends");
|
|
}
|
|
if(scope.Contains(Scope.UserBirthday))
|
|
{
|
|
scopes.Add("user_birthday");
|
|
}
|
|
if(scope.Contains(Scope.UserAgeRange))
|
|
{
|
|
scopes.Add("user_age_range");
|
|
}
|
|
|
|
if(scope.Contains(Scope.UserLocation))
|
|
{
|
|
scopes.Add("user_location");
|
|
}
|
|
|
|
if(scope.Contains(Scope.UserHometown))
|
|
{
|
|
scopes.Add("user_hometown");
|
|
}
|
|
|
|
if(scope.Contains(Scope.UserGender))
|
|
{
|
|
scopes.Add("user_gender");
|
|
}
|
|
|
|
|
|
if (mode == LoginTracking.ENABLED)
|
|
{
|
|
if (Constants.CurrentPlatform == FacebookUnityPlatform.IOS) {
|
|
FB.Mobile.LoginWithTrackingPreference(LoginTracking.ENABLED, scopes, "classic_nonce123", this.HandleResult);
|
|
} else {
|
|
FB.LogInWithReadPermissions(scopes, this.HandleResult);
|
|
}
|
|
}
|
|
else // mode == loginTracking.LIMITED
|
|
{
|
|
FB.Mobile.LoginWithTrackingPreference(LoginTracking.LIMITED, scopes, "limited_nonce123", this.HandleLimitedLoginResult);
|
|
}
|
|
|
|
}
|
|
|
|
private void CallFBLoginForPublish()
|
|
{
|
|
// It is generally good behavior to split asking for read and publish
|
|
// permissions rather than ask for them all at once.
|
|
//
|
|
// In your own game, consider postponing this call until the moment
|
|
// you actually need it.
|
|
FB.LogInWithPublishPermissions(new List<string>() { "publish_actions" }, this.HandleResult);
|
|
}
|
|
|
|
private void CallFBLogout()
|
|
{
|
|
FB.LogOut();
|
|
}
|
|
|
|
private void OnInitComplete()
|
|
{
|
|
this.Status = "Success - Check log for details";
|
|
this.LastResponse = "Success Response: OnInitComplete Called\n";
|
|
string logMessage = string.Format(
|
|
"OnInitCompleteCalled IsLoggedIn='{0}' IsInitialized='{1}'",
|
|
FB.IsLoggedIn,
|
|
FB.IsInitialized);
|
|
LogView.AddLog(logMessage);
|
|
if (AccessToken.CurrentAccessToken != null)
|
|
{
|
|
LogView.AddLog(AccessToken.CurrentAccessToken.ToString());
|
|
}
|
|
}
|
|
|
|
private void OnHideUnity(bool isGameShown)
|
|
{
|
|
this.Status = "Success - Check log for details";
|
|
this.LastResponse = string.Format("Success Response: OnHideUnity Called {0}\n", isGameShown);
|
|
LogView.AddLog("Is game shown: " + isGameShown);
|
|
}
|
|
}
|
|
}
|