Skip to content

Instantly share code, notes, and snippets.

@jmcguirk
Created March 19, 2013 20:50
Show Gist options
  • Select an option

  • Save jmcguirk/5200019 to your computer and use it in GitHub Desktop.

Select an option

Save jmcguirk/5200019 to your computer and use it in GitHub Desktop.
Wrappers for Prime 31 IOS and Android FB Integration Uses 3.18 version of these plugins http://prime31.com/docs#androidSocial http://prime31.com/docs#iosSocial
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
#if UNITY_ANDROID
public class AndroidFacebookManager : IFacebookManager
{
public event LoginSuccessHandler OnLoginSuccess;
public event LoginFailedHandler OnLoginFailed;
public bool supported {
get {
return true;
}
}
public void init() {
FacebookManager.sessionOpenedEvent += onInternalSessionOpened;
FacebookManager.loginFailedEvent += onLoginFailedEvent;
FacebookAndroid.init();
}
protected void onLoginFailedEvent(string obj) {
if(OnLoginFailed != null){
OnLoginFailed(obj);
}
}
protected void onInternalSessionOpened() {
if(OnLoginSuccess != null){
OnLoginSuccess();
}
}
public string getAppLaunchUrl() { // JSM - not supported via android bindings
return null;
}
public bool isSessionValid() {
return FacebookAndroid.isSessionValid();
}
public string getAccessToken() {
return FacebookAndroid.getAccessToken();
}
public void graphRequest(string path, GraphResponseHandler complete){
Facebook.instance.graphRequest(path, delegate(string respath, object result){complete(respath, result);});
}
public void login() {
GameLog.debug("Facebook login");
FacebookAndroid.login();
}
public void loginWithReadPermissions(string[] permissions) {
GameLog.debug("Facebook login");
FacebookAndroid.loginWithReadPermissions(permissions);
}
}
#else
public class AndroidFacebookManager : MockFacebookManager
{
}
#endif
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
public delegate void LoginSuccessHandler();
public delegate void LoginFailedHandler(string result);
public delegate void GraphResponseHandler(string path, object result);
/// <summary>
/// Interface for a platform specific facebook manager
/// </summary>
public interface IFacebookManager
{
/// <summary>
/// Occurs when player logs into facebook
/// </summary>
event LoginSuccessHandler OnLoginSuccess;
/// <summary>
/// Occurs when a login fails, likely due to cancelling
/// </summary>
event LoginFailedHandler OnLoginFailed;
/// <summary>
/// Gets a value indicating whether this <see cref="IFacebookManager"/> is supported on the current platform
/// </summary>
/// <value>
/// <c>true</c> if supported; otherwise, <c>false</c>.
/// </value>
bool supported { get; }
/// <summary>
/// Inits the underlying implementation
/// </summary>
void init();
/// <summary>
/// Fetches the url which caused our runtime to launch, only available on certain platforms
/// </summary>
/// <returns></returns>
string getAppLaunchUrl();
/// <summary>
/// Determines whether the current session is valid
/// </summary>
/// <returns>
/// <c>true</c> if [is session valid]; otherwise, <c>false</c>.
/// </returns>
bool isSessionValid();
/// <summary>
/// Gets the current access token.
/// </summary>
/// <returns></returns>
string getAccessToken();
/// <summary>
/// Issues a graph request
/// </summary>
/// <param name="path">The path to request.</param>
/// <param name="complete">Completion callback.</param>
void graphRequest(string path, GraphResponseHandler complete);
/// <summary>
/// Attempts to log the current player in
/// </summary>
void login();
/// <summary>
/// Attempts to log the current player in the given permissions requested
/// </summary>
/// <param name="permissions">The permissions.</param>
void loginWithReadPermissions(string[] permissions);
}
if (Application.platform == RuntimePlatform.IPhonePlayer) {
ServiceLocator.facebook = new IOSFacebookManager();
}
else if (Application.platform == RuntimePlatform.Android) {
ServiceLocator.facebook = new AndroidFacebookManager();
} else{
ServiceLocator.facebook = new MockFacebookManager();
}
ServiceLocator.facebook.init();
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
#if UNITY_IPHONE
public class IOSFacebookManager : IFacebookManager
{
public event LoginSuccessHandler OnLoginSuccess;
public event LoginFailedHandler OnLoginFailed;
public bool supported {
get {
return true;
}
}
public void init() {
FacebookManager.sessionOpenedEvent += onInternalSessionOpened;
FacebookManager.loginFailedEvent += onLoginFailedEvent;
FacebookBinding.init();
}
protected void onLoginFailedEvent(string obj) {
if(OnLoginFailed != null){
OnLoginFailed(obj);
}
}
protected void onInternalSessionOpened() {
if(OnLoginSuccess != null){
OnLoginSuccess();
}
}
public string getAppLaunchUrl() {
return FacebookBinding.getAppLaunchUrl();
}
public bool isSessionValid() {
return FacebookBinding.isSessionValid();
}
public string getAccessToken() {
return FacebookBinding.getAccessToken();
}
public void graphRequest(string path, GraphResponseHandler complete){
Facebook.instance.graphRequest(path, delegate(string respath, object result){complete(respath, result);});
}
public void login() {
GameLog.debug("Facebook login");
FacebookBinding.login();
}
public void loginWithReadPermissions(string[] permissions) {
GameLog.debug("Facebook login");
FacebookBinding.loginWithReadPermissions(permissions);
}
}
#else
public class IOSFacebookManager : MockFacebookManager
{
}
#endif
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using Prime31;
public class MockFacebookManager : IFacebookManager
{
public event LoginSuccessHandler OnLoginSuccess;
public event LoginFailedHandler OnLoginFailed;
public bool supported {
get {
return false;
}
}
public void graphRequest(string path, GraphResponseHandler complete) {
GameLog.debug("Graph request for " + path);
}
public void init() {
GameLog.debug("Facebook init");
}
public string getAppLaunchUrl() {
return null;
}
public bool isSessionValid() {
return true;
}
public string getAccessToken() {
return null;
}
public void login() {
GameLog.debug("Facebook login");
}
public void loginWithReadPermissions(string[] permissions) {
GameLog.debug("Facebook login with read perms");
}
}
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
/// <summary>
/// Data bean for a social network user
/// </summary>
public class SocialNetworkUser
{
/// <summary>
/// Gets or sets the platform ID for this user
/// </summary>
/// <value>
/// The platform ID.
/// </value>
public int PlatformID { get; set; }
/// <summary>
/// Gets or sets the platform user ID.
/// </summary>
/// <value>
/// The platform user ID.
/// </value>
public string PlatformUserID { get; set; }
/// <summary>
/// Gets or sets the first name.
/// </summary>
/// <value>
/// The first name.
/// </value>
public string FirstName { get; set; }
/// <summary>
/// Gets or sets the last name.
/// </summary>
/// <value>
/// The last name.
/// </value>
public string LastName { get; set; }
/// <summary>
/// Gets or sets the full name.
/// </summary>
/// <value>
/// The full name.
/// </value>
public string FullName { get; set; }
/// <summary>
/// Gets or sets the profile URL.
/// </summary>
/// <value>
/// The profile URL.
/// </value>
public string ProfileUrl { get; set; }
/// <summary>
/// Gets or sets a value indicating whether this <see cref="SocialNetworkUser"/> is installed.
/// </summary>
/// <value>
/// <c>true</c> if installed; otherwise, <c>false</c>.
/// </value>
public bool Installed { get; set; }
/// <summary>
/// Gets or sets the gender.
/// </summary>
/// <value>
/// The gender.
/// </value>
public string Gender { get; set; }
/// <summary>
/// Gets or sets the locale.
/// </summary>
/// <value>
/// The locale.
/// </value>
public string Locale { get; set; }
/// <summary>
/// Gets or sets the cache date.
/// </summary>
/// <value>
/// The cache date.
/// </value>
public double CacheDate { get; set; }
/// <summary>
/// Gets or sets the account id.
/// </summary>
/// <value>
/// The account id.
/// </value>
public string AccountId { get; set; }
/// <summary>
/// Gets the high res profile pic for this user
/// </summary>
/// <value>
/// The pic URL high rez.
/// </value>
public string PicUrlHighRez {
get {
return "http://graph.facebook.com/" + this.PlatformUserID + "/picture?width=200&height=200";
}
}
/// <summary>
/// Gets the low res profile pic for this user
/// </summary>
/// <value>
/// The pic URL low rez.
/// </value>
public string PicUrlLowRez {
get {
return "http://graph.facebook.com/" + this.PlatformUserID + "/picture?width=100&height=100";
}
}
/// <summary>
/// Creates a new social network user from a given hashtable
/// </summary>
/// <param name="data">The data.</param>
/// <returns></returns>
public static SocialNetworkUser newFromIOSHashTable(Hashtable data) {
SocialNetworkUser result = new SocialNetworkUser();
if (data.ContainsKey("last_name")) {
result.LastName = (string)data["last_name"];
}
if (data.ContainsKey("first_name")) {
result.FirstName = (string)data["first_name"];
}
if (data.ContainsKey("name")) {
result.FullName = (string)data["name"];
}
if (data.ContainsKey("link")) {
result.ProfileUrl = (string)data["link"];
}
if (data.ContainsKey("locale")) {
result.Locale = (string)data["locale"];
}
if (data.ContainsKey("gender")) {
result.Gender = (string)data["gender"];
}
if (data.ContainsKey("id")) {
result.PlatformUserID = (string)data["id"];
}
return result;
}
/// <summary>
/// Generates a string representation of this user
/// </summary>
/// <returns></returns>
public override string ToString() {
var result = "[SocialNetwork User " + this.PlatformID + ":" + this.PlatformUserID + "] " + this.FullName + " " + this.PicUrlHighRez;
return result;
}
}
// Use this for initialization
public override void OnStart() {
loginButton.GetComponent<tk2dButton>().ButtonPressedEvent += attemptLogin;
ServiceLocator.facebook.OnLoginFailed += facebook_OnLoginFailed;
ServiceLocator.facebook.OnLoginSuccess += facebook_OnLoginSuccess;
}
protected void attemptLogin(tk2dButton source) {
ServiceLocator.facebook.login();
}
void facebook_OnLoginSuccess() {
GameLog.fatal("FACEBOOK LOGIN SUCCEEEDED!");
ServiceLocator.facebook.graphRequest("/me", onMeCompleteRequest);
}
protected void onMeCompleteRequest(string path, object result) {
Hashtable hashResult = result as Hashtable;
if (hashResult != null) {
SocialNetworkUser currentUser = SocialNetworkUser.newFromIOSHashTable(hashResult);
currentUser.PlatformID = GameConstants.FACEBOOK_PLATFORM;
GameLog.fatal("Current user " + currentUser.ToString());
}
}
void facebook_OnLoginFailed(string result) {
GameLog.fatal("FACEBOOK LOGIN FAILED " + result);
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment