Facebook.Unity/Mobile/MobileFacebook.cs (401 lines of code) (raw):
/**
 * 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.Mobile
{
    using System;
    using System.Collections.Generic;
    /// <summary>
    /// Classes defined on the mobile sdks.
    /// </summary>
    internal abstract class MobileFacebook : FacebookBase, IMobileFacebookImplementation
    {
        private const string CallbackIdKey = "callback_id";
        private ShareDialogMode shareDialogMode = ShareDialogMode.AUTOMATIC;
        protected MobileFacebook(CallbackManager callbackManager) : base(callbackManager)
        {
        }
        /// <summary>
        /// Gets or sets the dialog mode.
        /// </summary>
        /// <value>The dialog mode use for sharing, login, and other dialogs.</value>
        public ShareDialogMode ShareDialogMode
        {
            get
            {
                return this.shareDialogMode;
            }
            set
            {
                this.shareDialogMode = value;
                this.SetShareDialogMode(this.shareDialogMode);
            }
        }
        public abstract string UserID { get; set; }
        public abstract AuthenticationToken CurrentAuthenticationToken();
        public override Profile CurrentProfile()
        {
            throw new NotImplementedException();
        }
        public override void CurrentProfile(FacebookDelegate<IProfileResult> callback)
        {
            throw new NotImplementedException();
        }
        public abstract void SetDataProcessingOptions(IEnumerable<string> options, int country, int state);
        public abstract void EnableProfileUpdatesOnAccessTokenChange(bool enable);
        public abstract void LoginWithTrackingPreference(
            string tracking,
            IEnumerable<string> permissions,
            string nonce,
            FacebookDelegate<ILoginResult> callback);
        public abstract void FetchDeferredAppLink(
            FacebookDelegate<IAppLinkResult> callback);
        public abstract void RefreshCurrentAccessToken(
            FacebookDelegate<IAccessTokenRefreshResult> callback);
        public abstract bool IsImplicitPurchaseLoggingEnabled();
        public abstract void SetAutoLogAppEventsEnabled (bool autoLogAppEventsEnabled);
        public abstract void SetAdvertiserIDCollectionEnabled(bool advertiserIDCollectionEnabled);
        public abstract bool SetAdvertiserTrackingEnabled(bool advertiserTrackingEnabled);
        public abstract void SetPushNotificationsDeviceTokenString(string token);
        public override void OnLoginComplete(ResultContainer resultContainer)
        {
            var result = new LoginResult(resultContainer);
            this.OnAuthResponse(result);
        }
        public override void OnGetAppLinkComplete(ResultContainer resultContainer)
        {
            var result = new AppLinkResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public override void OnAppRequestsComplete(ResultContainer resultContainer)
        {
            var result = new AppRequestResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnFetchDeferredAppLinkComplete(ResultContainer resultContainer)
        {
            var result = new AppLinkResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public override void OnShareLinkComplete(ResultContainer resultContainer)
        {
            var result = new ShareResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnRefreshCurrentAccessTokenComplete(ResultContainer resultContainer)
        {
            var result = new AccessTokenRefreshResult(resultContainer);
            if (result.AccessToken != null)
            {
                AccessToken.CurrentAccessToken = result.AccessToken;
            }
            CallbackManager.OnFacebookResponse(result);
        }
        public override void OpenFriendFinderDialog(FacebookDelegate<IGamingServicesFriendFinderResult> callback)
        {
            throw new NotImplementedException();
        }
        public override void GetFriendFinderInvitations(FacebookDelegate<IFriendFinderInvitationResult> callback)
        {
            throw new NotImplementedException();
        }
        public override void DeleteFriendFinderInvitation(string invitationId, FacebookDelegate<IFriendFinderInvitationResult> callback)
        {
            throw new NotImplementedException();
        }
        public void OnFriendFinderComplete(ResultContainer resultContainer)
        {
            var result = new GamingServicesFriendFinderResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnUploadImageToMediaLibraryComplete(ResultContainer resultContainer)
        {
            var result = new MediaUploadResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnUploadVideoToMediaLibraryComplete(ResultContainer resultContainer)
        {
            var result = new MediaUploadResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnOnIAPReadyComplete(ResultContainer resultContainer)
        {
            var result = new IAPReadyResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnGetCatalogComplete(ResultContainer resultContainer)
        {
            var result = new CatalogResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnGetPurchasesComplete(ResultContainer resultContainer)
        {
            var result = new PurchasesResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnPurchaseComplete(ResultContainer resultContainer)
        {
            var result = new PurchaseResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnConsumePurchaseComplete(ResultContainer resultContainer)
        {
            var result = new ConsumePurchaseResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnInitCloudGameComplete(ResultContainer resultContainer)
        {
            var result = new InitCloudGameResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnGameLoadCompleteComplete(ResultContainer resultContainer)
        {
            var result = new GameLoadCompleteResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnScheduleAppToUserNotificationComplete(ResultContainer resultContainer)
        {
            var result = new ScheduleAppToUserNotificationResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnLoadInterstitialAdComplete(ResultContainer resultContainer)
        {
            var result = new InterstitialAdResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnShowInterstitialAdComplete(ResultContainer resultContainer)
        {
            var result = new InterstitialAdResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnLoadRewardedVideoComplete(ResultContainer resultContainer)
        {
            var result = new RewardedVideoResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnShowRewardedVideoComplete(ResultContainer resultContainer)
        {
            var result = new RewardedVideoResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnGetPayloadComplete(ResultContainer resultContainer)
        {
            var result = new PayloadResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnPostSessionScoreComplete(ResultContainer resultContainer)
        {
            var result = new SessionScoreResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnPostTournamentScoreComplete(ResultContainer resultContainer)
        {
            var result = new TournamentScoreResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnGetTournamentComplete(ResultContainer resultContainer)
        {
            var result = new TournamentResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnShareTournamentComplete(ResultContainer resultContainer)
        {
            var result = new TournamentScoreResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnCreateTournamentComplete(ResultContainer resultContainer)
        {
            var result = new TournamentResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnOpenAppStoreComplete(ResultContainer resultContainer)
        {
            var result = new OpenAppStoreResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnCreateGamingContextComplete(ResultContainer resultContainer)
        {
            var result = new CreateGamingContextResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnSwitchGamingContextComplete(ResultContainer resultContainer)
        {
            var result = new SwitchGamingContextResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnChooseGamingContextComplete(ResultContainer resultContainer)
        {
            var result = new ChooseGamingContextResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public void OnGetCurrentGamingContextComplete(ResultContainer resultContainer)
        {
            var result = new GetCurrentGamingContextResult(resultContainer);
            CallbackManager.OnFacebookResponse(result);
        }
        public override void UploadImageToMediaLibrary(
            string caption,
            Uri imageUri,
            bool shouldLaunchMediaDialog,
            FacebookDelegate<IMediaUploadResult> callback)
        {
            throw new NotImplementedException();
        }
        public override void UploadVideoToMediaLibrary(
            string caption,
            Uri videoUri,
            bool shouldLaunchMediaDialog,
            FacebookDelegate<IMediaUploadResult> callback)
        {
            throw new NotImplementedException();
        }
        public virtual void OnIAPReady(
            FacebookDelegate<IIAPReadyResult> callback)
        {
            throw new NotImplementedException();
        }
        public override void GetCatalog(
            FacebookDelegate<ICatalogResult> callback)
        {
            throw new NotImplementedException();
        }
        public override void GetPurchases(
            FacebookDelegate<IPurchasesResult> callback)
        {
            throw new NotImplementedException();
        }
        public override void Purchase(
            string productID,
            FacebookDelegate<IPurchaseResult> callback,
            string developerPayload)
        {
            throw new NotImplementedException();
        }
        public override void ConsumePurchase(
            string purchaseToken,
            FacebookDelegate<IConsumePurchaseResult> callback)
        {
            throw new NotImplementedException();
        }
        public virtual void InitCloudGame(
            FacebookDelegate<IInitCloudGameResult> callback)
        {
            throw new NotImplementedException();
        }
        public virtual void GameLoadComplete(
            FacebookDelegate<IGameLoadCompleteResult> callback)
        {
            throw new NotImplementedException();
        }
        public override void ScheduleAppToUserNotification(
            string title,
            string body,
            Uri media,
            int timeInterval,
            string payload,
            FacebookDelegate<IScheduleAppToUserNotificationResult> callback)
        {
            throw new NotImplementedException();
        }
        public override void LoadInterstitialAd(
            string placementID,
            FacebookDelegate<IInterstitialAdResult> callback)
        {
            throw new NotImplementedException();
        }
        public override void ShowInterstitialAd(
            string placementID,
            FacebookDelegate<IInterstitialAdResult> callback)
        {
            throw new NotImplementedException();
        }
        public override void LoadRewardedVideo(
            string placementID,
            FacebookDelegate<IRewardedVideoResult> callback)
        {
            throw new NotImplementedException();
        }
        public override void ShowRewardedVideo(
            string placementID,
            FacebookDelegate<IRewardedVideoResult> callback)
        {
            throw new NotImplementedException();
        }
        public virtual void GetPayload(
            FacebookDelegate<IPayloadResult> callback)
        {
            throw new NotImplementedException();
        }
        public override void PostSessionScore(
            int score,
            FacebookDelegate<ISessionScoreResult> callback)
        {
            throw new NotImplementedException();
        }
        public override void PostTournamentScore(int score, FacebookDelegate<ITournamentScoreResult> callback)
        {
            throw new NotImplementedException();
        }
        public override void GetTournament(FacebookDelegate<ITournamentResult> callback)
        {
            throw new NotImplementedException();
        }
        public override void ShareTournament(int score, Dictionary<string, string> data, FacebookDelegate<ITournamentScoreResult> callback)
        {
            throw new NotImplementedException();
        }
        public override void CreateTournament(
            int initialScore,
            string title,
            string imageBase64DataUrl,
            string sortOrder,
            string scoreFormat,
            Dictionary<string, string> data,
            FacebookDelegate<ITournamentResult> callback)
        {
            throw new NotImplementedException();
        }
        public virtual void OpenAppStore(
            FacebookDelegate<IOpenAppStoreResult> callback)
        {
            throw new NotImplementedException();
        }
        public virtual void CreateGamingContext(string playerID, FacebookDelegate<ICreateGamingContextResult> callback)
        {
            throw new NotImplementedException();
        }
        public virtual void SwitchGamingContext(string gamingContextID, FacebookDelegate<ISwitchGamingContextResult> callback)
        {
            throw new NotImplementedException();
        }
        public virtual void ChooseGamingContext(List<string> filters, int minSize, int maxSize, FacebookDelegate<IChooseGamingContextResult> callback)
        {
            throw new NotImplementedException();
        }
        public virtual void GetCurrentGamingContext(FacebookDelegate<IGetCurrentGamingContextResult> callback)
        {
            throw new NotImplementedException();
        }
        protected abstract void SetShareDialogMode(ShareDialogMode mode);
        private static IDictionary<string, object> DeserializeMessage(string message)
        {
            return (Dictionary<string, object>)MiniJSON.Json.Deserialize(message);
        }
        private static string SerializeDictionary(IDictionary<string, object> dict)
        {
            return MiniJSON.Json.Serialize(dict);
        }
        private static bool TryGetCallbackId(IDictionary<string, object> result, out string callbackId)
        {
            object callback;
            callbackId = null;
            if (result.TryGetValue("callback_id", out callback))
            {
                callbackId = callback as string;
                return true;
            }
            return false;
        }
        private static bool TryGetError(IDictionary<string, object> result, out string errorMessage)
        {
            object error;
            errorMessage = null;
            if (result.TryGetValue("error", out error))
            {
                errorMessage = error as string;
                return true;
            }
            return false;
        }
    }
}