public UnityTask <UnlinkFacebookAccountResult> UnlinkFacebook() { return(PF.Do <UnlinkFacebookAccountRequest, UnlinkFacebookAccountResult>(new UnlinkFacebookAccountRequest(), PlayFabClientAPI.UnlinkFacebookAccount)); }
public UnityTask <GetUserInventoryResult> RefreshVirtualCurrency() { return(PF.Do(new GetUserInventoryRequest())); }
private IEnumerator RefreshLeaderboardCoroutine(int?startPosition) { // Setting any profile constraints this.profileContraints.ShowDisplayName = true; this.profileContraints.ShowAvatarUrl = this.shouldShowAvatarUrl; if (startPosition.HasValue == false) { this.moreBottomEntriesExist = true; this.moreTopEntiresExist = true; } if (this.isFriendLeaderboard) { if (this.isCenteredAroundPlayer && startPosition.HasValue == false) { var leaderboard = PF.Do(new GetFriendLeaderboardAroundPlayerRequest { IncludeFacebookFriends = this.includeFacebookFriends, IncludeSteamFriends = this.includeSteamFriends, MaxResultsCount = this.maxResultsCount, StatisticName = this.leaderboardName, ProfileConstraints = this.profileContraints, }); yield return(leaderboard); this.AppendLeaderboardResults(leaderboard, leaderboard.HasError == false ? leaderboard.Value.Leaderboard : null); } else { var leaderboard = PF.Do(new GetFriendLeaderboardRequest { IncludeFacebookFriends = this.includeFacebookFriends, IncludeSteamFriends = this.includeSteamFriends, MaxResultsCount = this.maxResultsCount, StatisticName = this.leaderboardName, StartPosition = startPosition.HasValue ? startPosition.Value : 0, ProfileConstraints = this.profileContraints, }); yield return(leaderboard); this.AppendLeaderboardResults(leaderboard, leaderboard.HasError == false ? leaderboard.Value.Leaderboard : null); } } else { if (this.isCenteredAroundPlayer && startPosition.HasValue == false) { var leaderboard = PF.Do(new GetLeaderboardAroundPlayerRequest { MaxResultsCount = this.maxResultsCount, StatisticName = this.leaderboardName, ProfileConstraints = this.profileContraints, }); yield return(leaderboard); this.AppendLeaderboardResults(leaderboard, leaderboard.HasError == false ? leaderboard.Value.Leaderboard : null); } else { var leaderboard = PF.Do(new GetLeaderboardRequest { MaxResultsCount = this.maxResultsCount, StatisticName = this.leaderboardName, StartPosition = startPosition.HasValue ? startPosition.Value : 0, ProfileConstraints = this.profileContraints, }); yield return(leaderboard); this.AppendLeaderboardResults(leaderboard, leaderboard.HasError == false ? leaderboard.Value.Leaderboard : null); } } // Testing is we should put the current player in the center of the leaderboard if (startPosition.HasValue == false && this.isCenteredAroundPlayer) { for (int i = 0; i < this.entries.Count; i++) { if (this.entries[i].PlayFabId == PF.User.PlayFabId) { this.CenterOnIndex(i); } } } }
private IEnumerator <bool> RegisterForIosPushNotificationsCoroutine() { var notifications = UnityEngine.iOS.NotificationType.Alert | UnityEngine.iOS.NotificationType.Badge | UnityEngine.iOS.NotificationType.Sound; UnityEngine.iOS.NotificationServices.RegisterForNotifications(notifications, true); int retryCount = 0; while (this.deviceToken == null) { if (this.deviceToken == null && UnityEngine.iOS.NotificationServices.deviceToken != null) { this.deviceToken = System.BitConverter.ToString(UnityEngine.iOS.NotificationServices.deviceToken).Replace("-", "").ToLower(); } retryCount++; if (retryCount >= RetryCountMax) { yield break; } // Waiting before we retry again... float waitTime = 0.0f; while (waitTime < RetryWaitTime) { yield return(default(bool)); waitTime += UnityEngine.Time.deltaTime; } } // if we got here and still no deviceToken, then we timed out if (this.deviceToken == null) { UnityEngine.Debug.LogError("PlayFabIOSPushHandler timed out waiting for the deviceToken."); // cleaning up this iOS push notification handler so it doesn't take up any cycles yield break; } string registeredUser = LostPlayerPrefs.GetString(HasRegisteredUserForPushNotificationsKey, null); // Checking if we're already successfully registed this user with PlayFab for push notifications if (registeredUser == PF.User.PlayFabId) { CoroutineRunner.Instance.StartCoroutine(this.CheckForIosPushNotificationsCoroutine()); yield return(true); yield break; } var register = PF.Do(new PlayFab.ClientModels.RegisterForIOSPushNotificationRequest { DeviceToken = this.deviceToken }); while (register.IsDone == false) { yield return(default(bool)); } if (register.HasError) { var playfabError = register.Exception as PlayFabException; if (playfabError != null) { UnityEngine.Debug.Log("Error Registering for iOS Push Notifications!"); UnityEngine.Debug.Log(playfabError.Error.Error); UnityEngine.Debug.Log(playfabError.Error.ErrorMessage); UnityEngine.Debug.Log(playfabError.Error.ErrorDetails); } } else { // Saving that we've registed this user for PushNotifications with PlayFab successfully LostPlayerPrefs.GetString(HasRegisteredUserForPushNotificationsKey, PF.User.PlayFabId); CoroutineRunner.Instance.StartCoroutine(this.CheckForIosPushNotificationsCoroutine()); UnityEngine.Debug.Log("Push Notification Registration Successful!"); yield return(true); } }
private IEnumerator <bool> ProcessPurchaseCoroutine(PurchaseEventArgs e, string storeId) { var catalogItem = PF.Catalog.GetCatalogItem(e.purchasedProduct.definition.id); Debug.AssertFormat(catalogItem != null, "Couln't find CatalogItem {0}", e.purchasedProduct.definition.id); Debug.AssertFormat(e.purchasedProduct.hasReceipt, "Purchased item {0} doesn't have a receipt", e.purchasedProduct.definition.id); var receipt = (Dictionary <string, object>)Lost.AppConfig.MiniJSON.Json.Deserialize(e.purchasedProduct.receipt); Debug.AssertFormat(receipt != null, "Unable to parse receipt {0}", e.purchasedProduct.receipt); var store = (string)receipt["Store"]; var transactionId = (string)receipt["TransactionID"]; var payload = (string)receipt["Payload"]; Debug.AssertFormat(string.IsNullOrEmpty(store) == false, "Unable to parse store from {0}", e.purchasedProduct.receipt); Debug.AssertFormat(string.IsNullOrEmpty(transactionId) == false, "Unable to parse transactionID from {0}", e.purchasedProduct.receipt); Debug.AssertFormat(string.IsNullOrEmpty(payload) == false, "Unable to parse payload from {0}", e.purchasedProduct.receipt); var currencyCode = e.purchasedProduct.metadata.isoCurrencyCode; var purchasePrice = this.GetPurchasePrice(e); bool wasSuccessfull = false; if (Platform.CurrentDevicePlatform == DevicePlatform.iOS) { var validate = PF.Do(new ValidateIOSReceiptRequest() { CurrencyCode = currencyCode, PurchasePrice = purchasePrice, ReceiptData = payload, }); while (validate.IsDone == false) { yield return(default(bool)); } if (validate.HasError) { Debug.LogErrorFormat("Unable to validate iOS IAP Purchase: {0}", validate?.Exception?.ToString()); this.LogErrorReceiptFailedInfo(catalogItem, e); Debug.LogErrorFormat("ReceiptData = " + payload); PlayFabMessages.HandleError(validate.Exception); } else { wasSuccessfull = true; } } else if (Platform.CurrentDevicePlatform == DevicePlatform.Android) { var details = (Dictionary <string, object>)Lost.AppConfig.MiniJSON.Json.Deserialize(payload); Debug.AssertFormat(details != null, "Unable to parse Receipt Payload {0}", payload); Debug.AssertFormat(details.ContainsKey("json"), "Receipt Payload doesn't have \"json\" key: {0}", payload); Debug.AssertFormat(details.ContainsKey("signature"), "Receipt Payload doesn't have \"signature\" key: {0}", payload); var receiptJson = (string)details["json"]; var signature = (string)details["signature"]; var validate = PF.Do(new ValidateGooglePlayPurchaseRequest() { CurrencyCode = currencyCode, PurchasePrice = (uint)purchasePrice, ReceiptJson = receiptJson, Signature = signature, }); while (validate.IsDone == false) { yield return(default(bool)); } if (validate.HasError) { Debug.LogErrorFormat("Unable to validate Google Play IAP Purchase: {0}", validate?.Exception?.ToString()); this.LogErrorReceiptFailedInfo(catalogItem, e); Debug.LogErrorFormat("Receipt Json = " + receiptJson); Debug.LogErrorFormat("Signature = " + signature); PlayFabMessages.HandleError(validate.Exception); } else { wasSuccessfull = true; } } else { Debug.LogErrorFormat("Tried to make IAP Purchase on Unknown Platform {0}", Application.platform.ToString()); } if (wasSuccessfull == false) { yield break; } float price = catalogItem.GetVirtualCurrenyPrice("RM") / 100.0f; string itemId = e.purchasedProduct.definition.id; string itemType = catalogItem.ItemClass; string level = SceneManager.GetActiveScene().name; Analytics.AnalyticsEvent.IAPTransaction(storeId, price, itemId, itemType, level, transactionId, new Dictionary <string, object> { { "localized_price", e.purchasedProduct.metadata.localizedPrice }, { "iso_currency_code", e.purchasedProduct.metadata.isoCurrencyCode }, { "store", store }, }); PF.Inventory.InvalidateUserInventory(); yield return(true); }