277 lines
10 KiB
JavaScript
277 lines
10 KiB
JavaScript
/**
|
|
* 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.
|
|
*/
|
|
|
|
var FBUnityLib = {
|
|
$FBUnity: {
|
|
init: function(connectFacebookUrl, locale, debug, initParams, status) {
|
|
// make element for js sdk
|
|
if (!document.getElementById('fb-root')) {
|
|
var fbroot = document.createElement('div');
|
|
fbroot.id = 'fb-root';
|
|
var body = document.getElementsByTagName('body')[0];
|
|
body.insertBefore(fbroot, body.children[0]);
|
|
}
|
|
|
|
// load js sdk
|
|
var js, id = 'facebook-jssdk', ref = document.getElementsByTagName('script')[0];
|
|
if (document.getElementById(id)) {return;}
|
|
js = document.createElement('script'); js.id = id; js.async = true;
|
|
js.src = connectFacebookUrl + '/' + locale + '/sdk' + (debug ? '/debug' : '') + '.js';
|
|
ref.parentNode.insertBefore(js, ref);
|
|
// once jssdk is loaded, init
|
|
window.fbAsyncInit = function() {
|
|
initParams = JSON.parse(initParams);
|
|
initParams.hideFlashCallback = FBUnity.onHideUnity;
|
|
FB.init(initParams);
|
|
// send url to unity - needed for deep linking
|
|
FBUnity.sendMessage('OnUrlResponse', location.href);
|
|
if (status) {
|
|
FBUnity.onInitWithStatus();
|
|
} else {
|
|
FBUnity.onInit();
|
|
}
|
|
};
|
|
},
|
|
|
|
initScreenPosition: function() {
|
|
if (!screenPosition) {
|
|
var body = document.getElementsByTagName('body')[0];
|
|
var screenPosition = {omo : body.onmouseover || function(){}, iframeX: 0, iframeY: 0};
|
|
body.onmouseover = function(e) {
|
|
// Distance from top of screen to top of client area
|
|
screenPosition.iframeX = e.screenX - e.clientX;
|
|
screenPosition.iframeY = e.screenY - e.clientY;
|
|
|
|
screenPosition.omo(e);
|
|
}
|
|
}
|
|
},
|
|
|
|
sendMessage: function(method, param) {
|
|
SendMessage('FacebookJsBridge', method, param);
|
|
},
|
|
|
|
login: function(scope, callback_id) {
|
|
FB.login(FBUnity.loginCallback.bind(null, callback_id), scope ? {scope: scope, auth_type: 'rerequest', return_scopes: true} : {return_scopes: true});
|
|
},
|
|
|
|
loginCallback: function(callback_id, response) {
|
|
response = {'callback_id': callback_id, 'response': response};
|
|
FBUnity.sendMessage('OnLoginComplete', JSON.stringify(response));
|
|
},
|
|
|
|
onInitWithStatus: function() {
|
|
var timeoutHandler = setTimeout(function() { requestFailed(); }, 3000);
|
|
|
|
function requestFailed() {
|
|
FBUnity.onInit();
|
|
}
|
|
|
|
// try to get the login status right after init'ing
|
|
FB.getLoginStatus(function(response) {
|
|
clearTimeout(timeoutHandler);
|
|
FBUnity.onInit(response);
|
|
});
|
|
},
|
|
|
|
onInit: function(response) {
|
|
var jsonResponse = '';
|
|
if (response && response.authResponse) {
|
|
jsonResponse = JSON.stringify(response);
|
|
}
|
|
|
|
FBUnity.sendMessage('OnInitComplete', jsonResponse);
|
|
FB.Event.subscribe('auth.authResponseChange', function(r){ FBUnity.onAuthResponseChange(r) });
|
|
|
|
FBUnity.logLoadingTime(response);
|
|
},
|
|
|
|
logLoadingTime: function(response) {
|
|
FB.Canvas.setDoneLoading(
|
|
function(result) {
|
|
// send implicitly event to log the time from the canvas pages load to facebook init being called.
|
|
FBUnity.logAppEvent('fb_canvas_time_till_init_complete', result.time_delta_ms / 1000, null);
|
|
}
|
|
);
|
|
},
|
|
|
|
onAuthResponseChange: function(response) {
|
|
FBUnity.sendMessage('OnFacebookAuthResponseChange', response ? JSON.stringify(response) : '');
|
|
},
|
|
|
|
apiCallback: function(query, response) {
|
|
response = {'query': query, 'response': response};
|
|
FBUnity.sendMessage('OnFacebookAPIResponse', JSON.stringify(response));
|
|
},
|
|
|
|
api: function(query) {
|
|
FB.api(query, FBUnity.apiCallback.bind(null, query));
|
|
},
|
|
|
|
activateApp: function() {
|
|
FB.AppEvents.activateApp();
|
|
},
|
|
|
|
uiCallback: function(uid, callbackMethodName, response) {
|
|
response = {'callback_id': uid, 'response': response};
|
|
FBUnity.sendMessage(callbackMethodName, JSON.stringify(response));
|
|
},
|
|
|
|
logout: function() {
|
|
FB.logout();
|
|
},
|
|
|
|
logAppEvent: function(eventName, valueToSum, parameters) {
|
|
FB.AppEvents.logEvent(
|
|
eventName,
|
|
valueToSum,
|
|
JSON.parse(parameters)
|
|
);
|
|
},
|
|
|
|
logPurchase: function(purchaseAmount, currency, parameters) {
|
|
FB.AppEvents.logPurchase(
|
|
purchaseAmount,
|
|
currency,
|
|
JSON.parse(parameters)
|
|
);
|
|
},
|
|
|
|
ui: function(x, uid, callbackMethodName) {
|
|
x = JSON.parse(x);
|
|
FB.ui(x, FBUnity.uiCallback.bind(null, uid, callbackMethodName));
|
|
},
|
|
|
|
|
|
hideUnity: function(direction) {
|
|
direction = direction || 'hide';
|
|
//TODO support this for webgl
|
|
var unityDiv = jQuery(u.getUnity());
|
|
|
|
if (direction == 'hide') {
|
|
FBUnity.sendMessage('OnFacebookFocus', 'hide');
|
|
} else /*show*/ {
|
|
FBUnity.sendMessage('OnFacebookFocus', 'show');
|
|
|
|
if (FBUnity.showScreenshotBackground.savedBackground) {
|
|
/*
|
|
if(fbShowScreenshotBackground.savedBackground == 'sentinel') {
|
|
jQuery('body').css('background', null);
|
|
} else {
|
|
jQuery('body').css('background', fbShowScreenshotBackground.savedBackground);
|
|
}
|
|
*/
|
|
}
|
|
|
|
hideUnity.savedCSS = FBUnity.showScreenshotBackground.savedBackground = null;
|
|
}
|
|
},
|
|
|
|
showScreenshotBackground: function(pngbytes) /*and hide unity*/ {
|
|
// window.screenxX and window.screenY = browser position
|
|
// window.screen.height and window.screen.width = screen size
|
|
// findPos, above, locates the iframe within the browser
|
|
/*
|
|
if (!fbShowScreenshotBackground.savedBackground)
|
|
fbShowScreenshotBackground.savedBackground = jQuery('body').css('background') || 'sentinel';
|
|
|
|
jQuery('body').css('background-image', 'url(data:image/png;base64,'+pngbytes+')');
|
|
jQuery('body').css(
|
|
'background-position',
|
|
-(screenPosition.iframeX)+'px '+
|
|
-(screenPosition.iframeY)+'px'
|
|
);
|
|
jQuery('body').css('background-size', '100%');
|
|
jquery('body').css('background-repeat', 'no-repeat');
|
|
// TODO: Zoom detection
|
|
*/
|
|
},
|
|
|
|
onHideUnity: function(info) {
|
|
if (info.state == 'opened') {
|
|
FBUnity.sendMessage('OnFacebookFocus', 'hide');
|
|
} else {
|
|
FBUnity.sendMessage('OnFacebookFocus', 'show');
|
|
}
|
|
}
|
|
},
|
|
|
|
init: function(connectFacebookUrl, locale, debug, initParams, status) {
|
|
var connectFacebookUrlString = UTF8ToString(connectFacebookUrl);
|
|
var localeString = UTF8ToString(locale);
|
|
var initParamsString = UTF8ToString(initParams);
|
|
|
|
FBUnity.init(connectFacebookUrlString, localeString, debug, initParamsString, status);
|
|
},
|
|
|
|
initScreenPosition: function() {
|
|
FBUnity.initScreenPosition();
|
|
},
|
|
|
|
login: function(scope, callback_id) {
|
|
var scopeString = UTF8ToString(scope);
|
|
var scopeArray = JSON.parse(scopeString);
|
|
|
|
var callback_idString = UTF8ToString(callback_id);
|
|
|
|
FBUnity.login(scopeArray, callback_idString);
|
|
},
|
|
|
|
activateApp: function() {
|
|
FBUnity.activateApp();
|
|
},
|
|
|
|
logout: function() {
|
|
FBUnity.logout();
|
|
},
|
|
|
|
logAppEvent: function(eventName, valueToSum, parameters) {
|
|
var eventNameString = UTF8ToString(eventName);
|
|
var parametersString = UTF8ToString(parameters);
|
|
|
|
FBUnity.logAppEvent(eventNameString, valueToSum, parametersString);
|
|
},
|
|
|
|
logAppEventWithoutValue: function(eventName, parameters) {
|
|
var eventNameString = UTF8ToString(eventName);
|
|
var parametersString = UTF8ToString(parameters);
|
|
|
|
FBUnity.logAppEvent(eventNameString, null, parametersString);
|
|
},
|
|
|
|
logPurchase: function(purchaseAmount, currency, parameters) {
|
|
var currencyString = UTF8ToString(currency);
|
|
var parametersString = UTF8ToString(parameters);
|
|
|
|
FBUnity.logPurchase(purchaseAmount, currencyString, parametersString);
|
|
},
|
|
|
|
ui: function(x, uid, callbackMethodName) {
|
|
var xString = UTF8ToString(x);
|
|
var uidString = UTF8ToString(uid);
|
|
var callbackMethodNameString = UTF8ToString(callbackMethodName);
|
|
|
|
FBUnity.ui(xString, uidString, callbackMethodNameString);
|
|
}
|
|
};
|
|
|
|
autoAddDeps(LibraryManager.library, '$FBUnity');
|
|
mergeInto(LibraryManager.library, FBUnityLib);
|