From 0d649aad522941d0dc252ed9db0e85351657ebf2 Mon Sep 17 00:00:00 2001 From: gregory Date: Wed, 21 Jun 2017 10:32:34 +0300 Subject: [PATCH 1/2] Fix canvas bug when FB.Init doesn't not work. Fix bug when fb-sdk already loaded before unity app started. P.S. Please review and include this fix to next FB sdk version if you can. We don't like build sdk from sources each time ;) --- Facebook.Unity/Canvas/CanvasConstants.cs | 27 +++++++++++++++++------- 1 file changed, 19 insertions(+), 8 deletions(-) diff --git a/Facebook.Unity/Canvas/CanvasConstants.cs b/Facebook.Unity/Canvas/CanvasConstants.cs index 2c279e99c..426b23ad9 100644 --- a/Facebook.Unity/Canvas/CanvasConstants.cs +++ b/Facebook.Unity/Canvas/CanvasConstants.cs @@ -27,7 +27,7 @@ internal static class CanvasConstants // a raw string. private const string JSCode = @" window.FBUnity = { - init: function(connectFacebookUrl, locale, debug, initParams, status) { + init: function(connectFacebookUrl, locale, debug, initParams, status) { // make element for js sdk if(!document.getElementById('fb-root')) { var fbroot = document.createElement('div'); @@ -38,12 +38,9 @@ internal static class CanvasConstants // 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 () { + + function on_fb_sdk_loaded() + { initParams = JSON.parse(initParams); initParams.hideFlashCallback = FBUnity.onHideUnity; FB.init(initParams); @@ -54,7 +51,21 @@ internal static class CanvasConstants } else { FBUnity.onInit(); } - }; + } + + // once jssdk is loaded, init + window.fbAsyncInit = on_fb_sdk_loaded; + + if (document.getElementById(id)) { + //already loaded + on_fb_sdk_loaded(); + } + else { + //load sdk + js = document.createElement('script'); js.id = id; js.async = true; + js.src = connectFacebookUrl + '/' + locale + '/sdk' + (debug ? '/debug' : '') + '.js'; + ref.parentNode.insertBefore(js, ref); + } }, sendMessage: function(method, param) { From 784d55ced7d9e5fa60b3613a5c6e80f6bb2be2cc Mon Sep 17 00:00:00 2001 From: gregory Date: Wed, 21 Jun 2017 14:25:22 +0300 Subject: [PATCH 2/2] Add timeout for on_fb_init callback --- Facebook.Unity/Canvas/CanvasConstants.cs | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/Facebook.Unity/Canvas/CanvasConstants.cs b/Facebook.Unity/Canvas/CanvasConstants.cs index 426b23ad9..f496bd215 100644 --- a/Facebook.Unity/Canvas/CanvasConstants.cs +++ b/Facebook.Unity/Canvas/CanvasConstants.cs @@ -52,15 +52,15 @@ function on_fb_sdk_loaded() FBUnity.onInit(); } } - - // once jssdk is loaded, init - window.fbAsyncInit = on_fb_sdk_loaded; - + if (document.getElementById(id)) { - //already loaded - on_fb_sdk_loaded(); + //already loaded + //need add timeout for make unity some work + setTimeout(on_fb_sdk_loaded, 250); } else { + // once jssdk is loaded, init + window.fbAsyncInit = on_fb_sdk_loaded; //load sdk js = document.createElement('script'); js.id = id; js.async = true; js.src = connectFacebookUrl + '/' + locale + '/sdk' + (debug ? '/debug' : '') + '.js';