Forums | developer.brewmp.com Forums | developer.brewmp.com

Developer

Forums

Hi Poeple,

I have got a report from NSTL listing bugs which made the app not pass TBT, one of it was...

Quote:

Error : If the user attempts to run the "5 Minute Demo" after expiration, then the demo will start and run for an additional 5 minutes and beyond until the user exits the application. However, upon restarting the demo the user is prompted of the demo's expiration and asked to purchase the full version. (Test Case 3.4.1.7)

Steps to reproduce the error:

1. Connect to the BREW catalog.
2. Download the “Demo” version.
3. Start the demo application.
4. Observe the demo application exit after 5 minutes displaying the following message: “Demo Expired.”
5. Start the demo application.
6. Observe the demo application runs as if it never expired.
7. Run the application and observe the demo no longer displays the expiration message.
8. After at least 5 minutes exit the application.
9. Start the application.
10. Observe the demo is expired and asks the user to purchase the full version.

Ok , Let me explain what the app does for the demo. It is a 5 min. demo game. where every time the user plays there will be a 5 min. demo after whcih the game expires and quits.

What We did is get the Price Type when the game gets loaded, we checked if Price type is PT_DEMO and if it is, then we start a countdown clock

and we check if the time expires, if the time expires , then calls the "Demo expired" error message and then quits the game.

// in my redraw frame function it checks

if (pMe->priceType == PT_DEMO && !pMe->demo_expired ) // check if the game is in Demo mode
// and if the demo is not yet expired.
{
// this checks the demo is expired or not
CheckDemoExpired(pMe);
if(pMe->demo_expired == TRUE)
{
// if demo is expired then call the error message
// " demo expired" and quit the game
pMe->errstat = 1;
}
}

...
...
...
...
...

void CheckDemoExpired(app* pMe)
{
if ( pMe->license_mgr && pMe->priceType == PT_DEMO )
{
if ((GETTIMEMS() - pMe->demostarttime) > DEMO_TIME )
{
pMe->demo_expired = TRUE;
return;
}
}

I checked the functionality in my devices and my emulator, with setting the .Mif settings to

LICENSE TPYE = NUMBER OF USES
PRICE TYPE = DEMO
LICENSE USAGE COUNT = 0

and tested it, I would have tested for around 15 times, and not even one time i have got the error what is mentioned above, even if i follow the previous steps.
Only differnece is i don't have access to download the game from a server and test it. instead i use the above mif settings to test the functionality.

and NEVER GOT THIS ERROR ! Can anyone help me on this !

I need to resubmit the app and want to know what is making this to cause. the game is submitted for LG VX 4400, 4500, 4600, 6000, audiovox 8600, 8900, Samsung A650, A670 and Motorola T720. and this error is listed in all the devices, while i tested it in all the devices with me, it never gave me those errors.

This is the reason you aren't supposed to handle non-LT_USES licensing logic. My guess is that you're kicking the user out from the application before the full demo time has expired (BREW keeps track of this internally), and then when you restart the app, there's some sort of logic error in your code that prevents your application from properly triggering the demo expired message. The tester then plays a few more minutes, exhausting the demo time, and exits. When they try to play again, BREW App Manager checks the playtime against the demo time, and displays the proper error message.

This is the reason you aren't supposed to handle non-LT_USES licensing logic. My guess is that you're kicking the user out from the application before the full demo time has expired (BREW keeps track of this internally), and then when you restart the app, there's some sort of logic error in your code that prevents your application from properly triggering the demo expired message. The tester then plays a few more minutes, exhausting the demo time, and exits. When they try to play again, BREW App Manager checks the playtime against the demo time, and displays the proper error message.

Ok, but how did it work fine in my devices when i am testing here ? and my client wants it to be a 5 minute demo , every time the player plays.

Ok, but how did it work fine in my devices when i am testing here ? and my client wants it to be a 5 minute demo , every time the player plays.

That won't work...App Manager will track the elapsed time on the demo, and will prevent app startup once the demo has expired.

That won't work...App Manager will track the elapsed time on the demo, and will prevent app startup once the demo has expired.

So the timing will never work on the License ?? only USES based will work ? but my client wants time based, so i should tell him this will never work ? It was the same code in the other games which got cleared through NSTL, then how did it get cleared !

So the timing will never work on the License ?? only USES based will work ? but my client wants time based, so i should tell him this will never work ? It was the same code in the other games which got cleared through NSTL, then how did it get cleared !

NSTL isn't perfect, sometimes things pass when they shouldn't (and vice-versa). If you need to have a recurring 5 minute demo, you'll need to do a usage-based demo, and then simply use your 5 minute timer to boot the user. Any other licensing types are handled by App Manager. At least that's the way to do it from a technical perspective, you'd have to ask NSTL if they'd allow a usage-based demo app to implement time restrictions like that.

NSTL isn't perfect, sometimes things pass when they shouldn't (and vice-versa). If you need to have a recurring 5 minute demo, you'll need to do a usage-based demo, and then simply use your 5 minute timer to boot the user. Any other licensing types are handled by App Manager. At least that's the way to do it from a technical perspective, you'd have to ask NSTL if they'd allow a usage-based demo app to implement time restrictions like that.

Quote:
If you need to have a recurring 5 minute demo, you'll need to do a usage-based demo, and then simply use your 5 minute timer to boot the user.
but thats what i am doing right ???

Quote:
If you need to have a recurring 5 minute demo, you'll need to do a usage-based demo, and then simply use your 5 minute timer to boot the user.
but thats what i am doing right ???

Sounds like NSTL is testing the app as a 5-minute time-limited demo.

Sounds like NSTL is testing the app as a 5-minute time-limited demo.

but according to the code , the app loads the game, checks for PT_DEMO (which is set only in NUMBER OF USES license) and sets the demo start timer = GETTIMEMS()
and starts checking it again the current GETTIMEMS() and checks if it goes beyond DEMO_TIME which defined as
#define DEMO_TIME (5 * 60000)
and breaks if this condition passes and makes the player exit. So is there any bug in this ?
and if the time based licnese will not work, then i will have to speak with my client telling them that it will not work and have to be changed to Usage based license which allows maximum of 10 usages. am i right ?
thanks for your patience in understanding my problem, I wish it gets sorted out.

but according to the code , the app loads the game, checks for PT_DEMO (which is set only in NUMBER OF USES license) and sets the demo start timer = GETTIMEMS()
and starts checking it again the current GETTIMEMS() and checks if it goes beyond DEMO_TIME which defined as
#define DEMO_TIME (5 * 60000)
and breaks if this condition passes and makes the player exit. So is there any bug in this ?
and if the time based licnese will not work, then i will have to speak with my client telling them that it will not work and have to be changed to Usage based license which allows maximum of 10 usages. am i right ?
thanks for your patience in understanding my problem, I wish it gets sorted out.

Sac wrote:but according to the code , the app loads the game, checks for PT_DEMO (which is set only in NUMBER OF USES license) and sets the demo start timer = GETTIMEMS()
If NSTL is testing a time-limited demo, it's going to be PT_DEMO, LT_MINUTES_OF_USE.
Sac wrote:
and starts checking it again the current GETTIMEMS() and checks if it goes beyond DEMO_TIME which defined as
#define DEMO_TIME (5 * 60000)
and breaks if this condition passes and makes the player exit. So is there any bug in this ?
I suspect there's some sort of synchronization problem between when your application starts counting elapsed time and when BREW starts counting.
sac wrote:
and if the time based licnese will not work, then i will have to speak with my client telling them that it will not work and have to be changed to Usage based license which allows maximum of 10 usages. am i right ?
thanks for your patience in understanding my problem, I wish it gets sorted out.
You can do a usage-based license demo...if this is the case, you control all the behavior of your application. You could set it to 1 use, and then simply not manipulate the uses remaining, relying instead on your internal timer. Again, you'd have to check with NSTL whether this is OK, as the app will be labelled as a 1 use demo in the catalog, which might confuse users.

Sac wrote:but according to the code , the app loads the game, checks for PT_DEMO (which is set only in NUMBER OF USES license) and sets the demo start timer = GETTIMEMS()
If NSTL is testing a time-limited demo, it's going to be PT_DEMO, LT_MINUTES_OF_USE.
Sac wrote:
and starts checking it again the current GETTIMEMS() and checks if it goes beyond DEMO_TIME which defined as
#define DEMO_TIME (5 * 60000)
and breaks if this condition passes and makes the player exit. So is there any bug in this ?
I suspect there's some sort of synchronization problem between when your application starts counting elapsed time and when BREW starts counting.
sac wrote:
and if the time based licnese will not work, then i will have to speak with my client telling them that it will not work and have to be changed to Usage based license which allows maximum of 10 usages. am i right ?
thanks for your patience in understanding my problem, I wish it gets sorted out.
You can do a usage-based license demo...if this is the case, you control all the behavior of your application. You could set it to 1 use, and then simply not manipulate the uses remaining, relying instead on your internal timer. Again, you'd have to check with NSTL whether this is OK, as the app will be labelled as a 1 use demo in the catalog, which might confuse users.

Thanks a lot Max, U are very much a helper in right time.
So the things to check for me now is, if NSTL has done a time-limited demo or Usage limited demo.
Then if its time-limited demo, what are the required steps i have to do in the code, that it can work fine ?
Then how will I ensure that synchronization problem (if it does exist) doesn't exist ?
And finally if nothing works out, I will have to ask my client to change the license to usege based count.

Thanks a lot Max, U are very much a helper in right time.
So the things to check for me now is, if NSTL has done a time-limited demo or Usage limited demo.
Then if its time-limited demo, what are the required steps i have to do in the code, that it can work fine ?
Then how will I ensure that synchronization problem (if it does exist) doesn't exist ?
And finally if nothing works out, I will have to ask my client to change the license to usege based count.

If you are doing a PT_DEMO, LT_MINUTES_OF_USE demo type, BREW App Manager will prevent the demo from starting up after 5 minutes of total use. You will not be able to offer continued 5-minute executions.
To avoid any synchronization problems, you should probably increase the time you allow your application to run before booting the user - say to 5.5 minutes.
You might find these docs helpful: https://brewx.qualcomm.com/brew/sdk/download.jsp?page=devrelations/brewd...

If you are doing a PT_DEMO, LT_MINUTES_OF_USE demo type, BREW App Manager will prevent the demo from starting up after 5 minutes of total use. You will not be able to offer continued 5-minute executions.
To avoid any synchronization problems, you should probably increase the time you allow your application to run before booting the user - say to 5.5 minutes.
You might find these docs helpful: https://brewx.qualcomm.com/brew/sdk/download.jsp?page=devrelations/brewd...

Now I understand what will happen for time-limited demo, which I don't think is what my client wants, it should be usage based demo. then my code should work.

Now I understand what will happen for time-limited demo, which I don't think is what my client wants, it should be usage based demo. then my code should work.

OK !
The client wants only a one time 5 min. time based demo, and not usage based demo.
So even that way the current code is correct, It checks for the PT_DEMO and allows the player to play for 5 mins. Is there any code change I have to do to make the error not occur for the re-submission ?
And what is the way for me to check time based demo on the device?

OK !
The client wants only a one time 5 min. time based demo, and not usage based demo.
So even that way the current code is correct, It checks for the PT_DEMO and allows the player to play for 5 mins. Is there any code change I have to do to make the error not occur for the re-submission ?
And what is the way for me to check time based demo on the device?

You actually shouldn't have ANY code in your application for this scenario. BREW App Manager handles tracking how much time has elapsed in the demo, and it automatically prevents the user from starting the app again after the demo has expired.

You actually shouldn't have ANY code in your application for this scenario. BREW App Manager handles tracking how much time has elapsed in the demo, and it automatically prevents the user from starting the app again after the demo has expired.

Max, are u serious ? :D
but really, so i just have to take of all the license handling code, no matter what time frame is set in the time based license, it should work without a single code to load and check for license using ILicense ?
Just making it clear! So no checks for PT_DEMO or anything, I don't even have to create the ILicense instance !??? Just give the game as it is for the full game version , but mention in the App speci that its a time based game for 5 mins. am I right ???
And I will not be able to check for the demo mode in the device, in this kind of Licenses right ?

Max, are u serious ? :D
but really, so i just have to take of all the license handling code, no matter what time frame is set in the time based license, it should work without a single code to load and check for license using ILicense ?
Just making it clear! So no checks for PT_DEMO or anything, I don't even have to create the ILicense instance !??? Just give the game as it is for the full game version , but mention in the App speci that its a time based game for 5 mins. am I right ???
And I will not be able to check for the demo mode in the device, in this kind of Licenses right ?

https://brewx.qualcomm.com/bws/content/gi/docs/brewpricingoptions.pdf
Yes, the only reason to use ILicense would be if your application was relying on number-of-uses licensing. Everything else is automatically handled by App Manager. That's the reason you can't create licensing information for other license types within the MIF Editor - your application shouldn't be coded to handle other licensing.

https://brewx.qualcomm.com/bws/content/gi/docs/brewpricingoptions.pdf
Yes, the only reason to use ILicense would be if your application was relying on number-of-uses licensing. Everything else is automatically handled by App Manager. That's the reason you can't create licensing information for other license types within the MIF Editor - your application shouldn't be coded to handle other licensing.

Thanks a lot Max !! I got more clear about the licenses a lot now.

Thanks a lot Max !! I got more clear about the licenses a lot now.

Hello,
I'm a Brew developer and we developed a connected application. Now this application must be retired and the operator told us we have to handle the support for users that downloaded a subscription. Is there anyway to do this with Qualcomm's help? Can Qualcomm send any request or advise to operator? I just want to know if Qualcomm can send messages to operator's servers to anounce the user that the application have been retired.
Thanks,

Hello,
I'm a Brew developer and we developed a connected application. Now this application must be retired and the operator told us we have to handle the support for users that downloaded a subscription. Is there anyway to do this with Qualcomm's help? Can Qualcomm send any request or advise to operator? I just want to know if Qualcomm can send messages to operator's servers to anounce the user that the application have been retired.
Thanks,

What you mean by retired?
If there is any serious problem with app, operators can remove the apps from catalog. Even they can recall apps from user's phones.

What you mean by retired?
If there is any serious problem with app, operators can remove the apps from catalog. Even they can recall apps from user's phones.

here is no problem with the application. We want to retire application because we can not support it anymore. So, my question is: if the operator can recall the app, are there any steps to follow with the operator?

here is no problem with the application. We want to retire application because we can not support it anymore. So, my question is: if the operator can recall the app, are there any steps to follow with the operator?

Need to talk to operator. You don't need to do anything. Everything has to be done by Operator. Operator knows the recall procedure or they can contact Qualcomm for the same through their SAM.

Need to talk to operator. You don't need to do anything. Everything has to be done by Operator. Operator knows the recall procedure or they can contact Qualcomm for the same through their SAM.

Thanks for your answers adhudase. Can i find anywhere this recall procedure on Qualcomm's site? About SAM, what is the meanning of?

Thanks for your answers adhudase. Can i find anywhere this recall procedure on Qualcomm's site? About SAM, what is the meanning of?

I don't think there is any doc on this. Operators are aware of this. SAM: Service Account Manager

I don't think there is any doc on this. Operators are aware of this. SAM: Service Account Manager

Thanks again for the answers adhudase. As i understood the operator can use this recall procedure for new users, but for the old users (subscriptions) the operator told us that we have to offer them support. Is there any way to do this with Qualcomm's help or with operator's help? We just want to announce the old users that the application will no longer be supported by us.
Thanks,

Thanks again for the answers adhudase. As i understood the operator can use this recall procedure for new users, but for the old users (subscriptions) the operator told us that we have to offer them support. Is there any way to do this with Qualcomm's help or with operator's help? We just want to announce the old users that the application will no longer be supported by us.
Thanks,

Recall is to remove the installed apps on user's handset. With group manager, operators can do this for apps already installed on handsets. Only operator knows the subscriber details. I don't think without operator's help you can do much.

Recall is to remove the installed apps on user's handset. With group manager, operators can do this for apps already installed on handsets. Only operator knows the subscriber details. I don't think without operator's help you can do much.

Cat wholesale ed hardy clothing cheap Abercrombie&fitch clothes discount juicy couture replica Ralph Lauren outlets true religion fake.

Cat wholesale ed hardy clothing cheap Abercrombie&fitch clothes discount juicy couture replica Ralph Lauren outlets true religion fake.