benchmarks/unity-webgl/StreamingAssets/fb.js (120 lines of code) (raw):
// API:
//
// postScreenshot('caption', screenshotData)
// caption: A string describing the screenshot.
// If undefined, false or null, will be omitted.
// screenshotData: Binary (form data) screenshot data to send.
// If undefined, false, or null, will be replaced
// with a picture of lederhosen-clad men dancing.
// So don't omit this, mmkay?
//
// REMEMBER TO CHANGE THE APPID TO PRODUCTION WHEN THIS IS READY TO GO PUBLIC
//
// NOTE: Currently, you _must_ be an administrator or tester of the test app
// in order for this to work. You will see a big scary red permissions dialogue.
// That's expected and OK! If you are a tester, it will still work. JUST CLICK THROUGH.
var appId = 305812776265197; // PRODUCTION APP
var openGraphId = 'unity-webgl-bench';
//var appId = 305812959598512; // TEST APP
//var openGraphId = 'unity-webgl-bmtest';
var locale = 'en_US';
window.fbAsyncInit = function() {
FB.init({
appId : appId,
cookie : true,
xfbml : false,
version : 'v2.0'
});
};
function onLoginFailure() {
// Implement your failed-to-login code here
};
postScreenShotData = {};
doPostScreenshot = function(score, browserString, imageData) {
var postOpenGraphStory = function(imageUrl) {
// Create a benchmark object...
console.log('creating opengraph object for browser ' + browserString);
var benchmarkObj = {
'app_id': appId,
'title': browserString,
'image': imageUrl,
'data': {
'score': score
}
};
FB.api(
'me/objects/' + openGraphId + ':benchmark',
'post',
{
object: JSON.stringify(benchmarkObj),
},
function(response) {
if(response && response.id) {
// If we succeeded, pop up standard Facebook share dialog
FB.ui({
method: 'share_open_graph',
action_type: openGraphId + ':finish',
action_properties: JSON.stringify({
benchmark: response.id
})
});
}
else {
// Log errors
console.log(response);
}
}
);
};
var _sendScreenshot = function() {
var blob = new Blob([imageData], {type: 'image/png'});
var formData = new FormData();
formData.append('file', blob);
var xhr = new XMLHttpRequest();
xhr.open( 'POST', 'https://graph.facebook.com/me/staging_resources?access_token=' + FB.getAccessToken(), true );
xhr.onload = function() {
document.getElementById("loadingimage").style.visibility = "hidden";
var responseObj = JSON.parse (xhr.responseText);
if (responseObj && responseObj.uri)
{
postOpenGraphStory(responseObj.uri);
}
};
xhr.onerror = function() {
console.log( xhr.responseText );
document.getElementById("loadingimage").style.visibility = "hidden";
};
xhr.send(formData);
}; // END: _sendScreenshot function
// Async JS Flow:
// - Get Login Status
// - If logged in, send screenshot via curried function
// - Else, request login
// -- If login succeeds, send screenshot via curried function
// -- Else, call error callback
document.getElementById("loadingimage").style.visibility = "visible";
FB.getLoginStatus(function(response) {
if (response.status === 'connected') {
_sendScreenshot();
}
else {
FB.login(function(loginResponse) {
if(loginResponse === 'connected') {
_sendScreenshot();
}
else {
document.getElementById("loadingimage").style.visibility = "hidden";
onLoginFailure();
}
}, {scope: 'publish_actions'});
}
});
}
var screenShotData;
var screenShotScore = 0;
window.setupPostScreenshot = function(score, data)
{
screenShotScore = score;
screenShotData = data;
}
window.postScreenshot = function()
{
if (screenShotScore == 0)
return;
var browser = (function(){
var ua= navigator.userAgent, tem,
M= ua.match(/(opera|chrome|safari|firefox|msie|trident(?=\/))\/?\s*(\d+)/i) || [];
if(/trident/i.test(M[1])){
tem= /\brv[ :]+(\d+)/g.exec(ua) || [];
return 'IE '+(tem[1] || '');
}
if(M[1]=== 'Chrome'){
tem= ua.match(/\bOPR\/(\d+)/)
if(tem!= null) return 'Opera '+tem[1];
}
M= M[2]? [M[1], M[2]]: [navigator.appName, navigator.appVersion, '-?'];
if((tem= ua.match(/version\/(\d+)/i))!= null) M.splice(1, 1, tem[1]);
return M.join(' ');
})();
doPostScreenshot(screenShotScore, browser, screenShotData);
};
(function(d, s, id){
var js, fjs = d.getElementsByTagName(s)[0];
if (d.getElementById(id)) {return;}
js = d.createElement(s); js.id = id;
js.src = 'http://connect.facebook.net/' + locale + '/sdk.js';
fjs.parentNode.insertBefore(js, fjs);
}(document, 'script', 'facebook-jssdk'));