• [Unity] In App Purchases

    Unsolved APIs
    2
    0 Votes
    2 Posts
    47 Views

    brainCloud supports a wide range of popular in-app purchases, including Google Play, Apple, Facebook, Amazon, and Steam, etc.. In most cases, the purchase process is initiated through the corresponding IAP plugin that you need to download into your Unity project. Then, verify the receipt received from the purchase outcome with brainCloud by calling VerifyPurchase API. It should be noted that the necessary configuration for the IAP store must be set up in the brainCloud portal for your app, including the products section and platforms section. Some store integration examples are available on our documentation website -- https://docs.braincloudservers.com/learn/portal-tutorials/store-integration-google/
    Hope this helps!

  • Filter online players in Matchmaking

    Unsolved Cloud Code
    5
    0 Votes
    5 Posts
    63 Views

    Ciao @Paul-Winterhalder ,

    Regarding your last doubt, I would like to be able to schedule DisableMatchmaking every X hours for all those users who are not online, but still have EnableMatchmaking active. Exactly what the "Disable matchmaking for players after XX days" option should do, but more frequently (4 times a day for example).

    Thanks and I hope for some suggestions that will solve it 🙂

    Alessio

  • Memcache in Braincloud

    Unsolved General
    2
    0 Votes
    2 Posts
    63 Views

    Hi Nguyen,

    brainCloud makes use of both Memcached and Redis as part of it's architecture - but we do not directly expose these in our APIs.

    What was your use case?

    Paul.

  • 0 Votes
    5 Posts
    81 Views

    All very good points @Panagiotis-Milios !

  • 1 Votes
    4 Posts
    88 Views

    Hi Panagiotis,

    Thanks for the feedback!

    That vertical icon bar on the far left is new in 5.2. It was key to allowing us to free up more space - moving the Debug + Log screens to their own pane. (i.e. now the screen is only ever split vertically in 2 - instead of sometimes split into 4 pains - 2 verticle and 2 horizontal).

    The font scale and tab size options were there before too - but are somewhat more discoverable now that we have that cog wheel.

    Glad you like the changes!

  • 0 Votes
    2 Posts
    54 Views

    Hi Kuabs, you can use brainCloud webhooks to achieve this feature, the steps are as follows.

    Create a cloud code script, in this example use the name "webhook_forgotPassword", and paste the following code into the script. "use strict"; function main() { var response = {}; bridge.logDebugJson("Script inputs", data); var userEmail = data.parameters.email; response.stringResponse = "webhook is processing user email reseting..." + data.parameters.email; // validating the user email if (/^\w+([\.-]?\w+)*@\w+([\.-]?\w+)*(\.\w{2,3})+$/.test(userEmail)) { // checking if the email is existed in brainCloud users var context = { "pagination": { "rowsPerPage": 20, "pageNumber": 1 }, "searchCriteria": { "emailAddress": userEmail }, "sortCriteria": { "playerName": 1 } }; var userProxy = bridge.getUserServiceProxy(); var postResult = userProxy.sysGetPage(context); if (postResult.data.results.count > 0) { var userProfileID = postResult.data.results.items[0].profileId; // sending password reset email postResult = userProxy.sysSendPasswordResetEmail(userProfileID); if (postResult.status == 200) { response.stringResponse = "password reset email has been sent to user's email:" + userEmail; } else { response.stringResponse = "system error with sending email..."; } } else { response.stringResponse = "user doesn't exist with the email you provided"; } } else { response.stringResponse = "user's email is invalid."; } return response; } main();

    Open Design | Cloud Code | WebHooks page, and create a WebHook link to the script you created from the previous step. Copy down the WebHook URL for the next step.73ee4986-3d38-4694-bac5-d7c4896c99ba-image.png

    Now, you have completed the work from brainCloud. Next, open your client app editor (if you are using Unity), define the WebHook URL as a variable, and link it to your forgotEmail object (could be a link or button in your app) onClick event, making it trigger this URL when the user clicks with Application.OpenURL command. Grab user inputted email and append it as an email parameter to the URL as follows:

    const string passwordResetWebhookUrl = "https://portal.braincloudservers.com/webhook/12832/forgotPassword/6dc675bb-f8b4-495f-ac5e-1f0658bfe09c"; Application.OpenURL(passwordResetWebhookUrl + "?email=" + userEmail);

    Run your app to test, you should get a similar pop-up window as follows once a user clicks the forgotEmail object,
    94dd0dae-7d6e-44c8-ab26-0d57a8544bb4-image.png

    Check the reset email in your test email account...25a6f240-5246-4ba2-a216-e978eaccee8c-image.png

  • UE 5.3

    Unsolved General
    2
    0 Votes
    2 Posts
    68 Views

    Hi @shawnryanbruno

    Thanks for pointing out that issue in our readme, you're right there is no BCClient folder, this will be corrected. The readme is referring to the folder contained in the latest .zip release file, current latest release is 5.1.0

    We have a couple example projects that use Unreal 5.3 and the brainCloud client compiles with no issues there. I will need some more information to better assist with the issue you're having.

    Did you get the brainCloud library from the release .zip file or did you download a copy of the repository?

    Can you guide me through the steps you took to get to this issue?

  • 0 Votes
    5 Posts
    197 Views

    There is a global list of reason codes here - https://docs.braincloudservers.com/api/appendix/reasonCodes

  • 0 Votes
    2 Posts
    70 Views

    A good way to handle failure besides retrying in code, is to schedule another script to run 1 minute later that will basically repeat the same action.

  • 0 Votes
    2 Posts
    78 Views

    It's not. Just knowing a playerId is really not important as it's only a unique identifier for another player and nothing more than that.

  • 0 Votes
    2 Posts
    59 Views

    Use API blocking in the cloud code category to block all apis from client that write your user entities. Then clients can only write their entities using cloud-code and there you have the total control

  • Custom Room Server Manager

    Unsolved General
    7
    0 Votes
    7 Posts
    137 Views

    No problem, glad I could help.

    For the moment we do not have any official documentation on room server managers except for that repository. Do you plan to make your own room server manager? If so we can probably put together some documentation for that. Otherwise for now, the only request you have to account for is that POST request to /findRoomServer as detailed in the source code for the Room Server Manager DevTool. This DevTool is intended to be used to test room servers more easily and have access to their logs faster. But if you plan to make an actual room server manager that can launch and manage multiple servers at once, you can use this tool as a base and build up on it to add logic for managing multiple server instances.

  • Error launching room on room server

    Unsolved APIs
    2
    0 Votes
    2 Posts
    60 Views

    Hi,

    Has your dockerhub team invited the "braincloudhost" user to your team with read-only privileges so that we can retrieve your custom image?

    The email address of that account is paulw AT getbraincloud.com.

    Hope that helps!

    Paul.
    [PS - Once you've done that - ping us here or in the support chat. We need to manually access the request these days <- Recent change to how dockerhub works.]

  • Can I use Braincloud with Gamemaker?

    Unsolved General
    2
    0 Votes
    2 Posts
    69 Views

    I believe that you can integrate the brainCloud C++ library as a third-party library within Gamemaker. brainCloud C++ library can be found here -- https://github.com/getbraincloud/braincloud-cpp

  • 0 Votes
    4 Posts
    154 Views

    @kuabs Exactly. Always use braincloud server time for features that rely on time passed. Also, if you want to modify your recharge rate during gameplay, you might want to consider keeping it in a global entity instead so every user will be affected by it.

  • Reconnect to room on a Relay Server

    Unsolved General
    30
    0 Votes
    30 Posts
    451 Views

    Ciao @Greg-Moulds,
    you rock boy! 🙂
    I tried reducing the "early" launch setting as you suggested and in fact now the waiting time is very short. That was exactly the problem.

    Thanks!

  • brainCloud C# library updated (5.1.1)

    Unsolved General
    1
    1 Votes
    1 Posts
    80 Views
    No one has replied
  • 0 Votes
    4 Posts
    192 Views

    Update - we have patched this issue in our Public BaaS.

    The API call is now blockable via API Blocking - but it's also disabled by default now (via the core API itself). There's a new compatibility flag (that is by default enabled for all existing apps) that preserves the old functionality.

    Paul.

  • Lobby creation/deletion events in CloudCode

    Unsolved Cloud Code
    13
    0 Votes
    13 Posts
    427 Views

    Hi Alessio,

    I have a suggestion.

    Why not create a global chat channel called "lobbyListeners".

    Then - when a user is viewing the lobbies - have them connect to and listen to the lobbyListeners channel.

    Then you don't need to maintain a global entity at all. Whenever you create a lobby or delete it - send an event to lobbyListeners - and it will automatically send it to everyone who has registered for the channel.

    Would that work? (or is there a part of your use case that I am missing?)

    Paul.

  • 0 Votes
    2 Posts
    144 Views

    Hello Andrey and thank you for your inquiry,

    For an approach like this I would recommend grabbing the matchState as a Dictionary<string,object> and then making a new instance of JsonMatchState and filling in each field one at a time.

    An example of this would look like to get one of the fields:

    JsonMatchState matchState = new JsonMatchState(); var matchState = data["matchState"] as Dictionary<string, object>; matchState.turnNumber = (int) matchState["turnNumber"];

    Hope this helps and please let us know if you have further questions or inquiries about this.