@francesco-lenolli
Could you specify which part you are still confused about?
administrators
Posts
-
-
@francesco-lenolli
Excellent observation! You are correct. Our server-side validation was set to filter out any duration above 596 hours and mark it as "expired". However, we have thoroughly reviewed this validation and have since removed it. This patch will be deployed to our server today, meaning a duration limit will no longer exist. We appreciate you bringing this to our attention. Thank you. -
Make sure you have enabled that promotion, can you provide us with your AppId and that automated promotionId?
-
Hi Francesco,
Thanks for reaching out. Certainly our screens and documentation for Promotions could use some more love - we are working on that.
To answer your questions:
Can Users have more than one promotion active at the same time?
Yes. And in that case, the "lowest" price for an item wins.In the case of automated promotions, what products count towards the "max purchase" limit? If I have a product with the price left "as is" in the Prices list inside that Promotion, does it get counted? More info on this max purchase field would be appreciated.
Hmm - I'm putting a question into the devs on this one.I have two automated promotions enabled and a User is in the segments used by both, but I don't see them when using the GetElegiblePromotions call. Is this a refresh issue? And if so how do I force a refresh to see them immediately?
Automated promotions are tricky - as a user must "ENTER" the segment to trigger the promotion. If they are already a member of the segment at the time the promotion is created, the automated promotion will not trigger. We are currently improving the user promotions screens to better communicate this behavior - and make it easier to test.If I have a promotion active where a product is set "not for sale", I don't see that product in the app store, which is the expected behaviour. What if I have another promotion active at the same time where that product is set as available?
What do you mean "as available" - with a particular price? If you mean "as is" I'm pretty sure that "Not for sale" will win - and the product will not being shown.What if the same thing happens but in promotion #1 the product is "as is" and in promotion #2 it's set with another price value?
Lowest price wins. If promotion #2 is less than the "as is" price than it should be the one shown.I hope that helps - we'll chime in with more clarifications once I have them from the devs.
Paul.
-
Okay - cool!
-
The time format is "epoch millis". (At the lowest levels that's how brainCloud's API deals with time).
An example would depend upon the client library you are using? Unity? Unreal?
I'll let the client team chime in with the details once we know what you are using.
Cheers!
Paul.
-
สวัสดี ต้องขออภัย แต่เราให้บริการช่วยเหลือเป็นภาษาอังกฤษเท่านั้น
[Hi. Apologies - but we only provide support in English.]
-
You are welcome. Thanks for the suggestion!
-
You can schedule a cloud code script to run at a specific target time (as shown in the example below, which will execute at 23:59 every day), instead of adding a certain amount of time to the script's execution time.
"use strict"; function main() { var response = {} bridge.logDebugJson("Script Inputs", data) const scriptName = data.scriptName const interval = data.args.interval const searchSpan = interval < 60 ? 60 : 60 * 24 // schedule checking and re-schedule itself for the next week at 23:59 on the same day var scriptProxy = bridge.getScriptServiceProxy() var dateTimeSpanMinsFromNowInMillis = new Date().getTime() + (searchSpan * 60 * 1000) var result = scriptProxy.getScheduledCloudScripts(dateTimeSpanMinsFromNowInMillis) var nowTime = new Date().getTime() if ((result.status == 200) && (result.data !== null)) { for (var i = 0; i < result.data.scheduledJobs.length; i++) { if (result.data.scheduledJobs[i].scriptName === scriptName && result.data.scheduledJobs[i].scheduledStartTime > nowTime) { scriptProxy.cancelScheduledScript(result.data.scheduledJobs[i].jobId) } } } const targetHour = 23 const targetMinute = 59 const minutesDifference = getMinutesDifference(targetHour, targetMinute) let minutesFromNow = minutesDifference + interval bridge.logInfo(`minutesFromNow between the script calling time and the time of 23:59 on a same day${minutesFromNow}`) response.scheduleJob = scriptProxy.scheduleRunScriptMinutes(scriptName, data, minutesFromNow) // the code for your script return response } function getMinutesDifference(targetHour, targetMinute) { const now = new Date() const targetTime = new Date(now.getFullYear(), now.getMonth(), now.getDate(), targetHour, targetMinute) const differenceInMilliseconds = targetTime - now bridge.logInfo(`differenceInMilliseconds between the script calling time and the target time: ${differenceInMilliseconds}`) const differenceInMinutes = Math.floor(differenceInMilliseconds / (1000 * 60)) return differenceInMinutes } main()
The parameters for this script will be 1440 minutes,
{ "scriptName": "thisScriptNameItself", "args": { "interval": 1440 } }
-
Hi Lee,
We hear you. I'll raise it with the devs.
Paul.
Discussion - Promotions
Discussion - Promotions
Discussion - Promotions
Discussion - Promotions
PostTournamentScoreUTC DateTime or ulong?
PostTournamentScoreUTC DateTime or ulong?
propark.cloud
Refresh button in Leaderboard
Repeat push notification schedule
Repeat push notification schedule