views:

285

answers:

4

I'm creating a shareware Cocoa app and I wanted to know what is the best way to put in a "nag screen". Basically before the main window of the app shows, I want to have a window with some text, a register button, and a "Not Yet" button (which is disabled at first). There will be a timer on the Not Yet button so the button title will change according to the number of seconds , so like:

"Not Yet...10" "Not Yet...9"

etc. and at the end of the 10 seconds the Not Yet button will become enabled allowing the user to proceed and use the app. What's the best way to do something like this? Can I use NSAlert?

I've seen this being done well in Pacifist, any help would be appreciated. Thanks

+6  A: 

Probably not what you want to hear, but I wouldn't do it that way. There is nothing more annoying than a timer-based nag screen when you're evaluating software.

And I don't mean annoying as in it'll give me a reason to buy a non-nag version. I mean annoying as in I'll never touch that application again.

I've done software for accountants that had a similar approach yet, when I gave them a separate version which just splashed "Evaluation Copy" across the reports, they were quite happy.

When quizzed, they made it clear that they were happy with a limitation like that, or even slightly reduced functionality (like only 10 client files instead of unlimited) but the nag screen slowed them down at the start and that gave a very bad impression of the software.

If you want to give them a reason to buy, take a leaf from the book of TechDirt - offer something for free (but not an annoying version) and make it worth their while to buy something scarce. To that end, I wouldn't advertise the free version as limited but rather concentrate on the extra functionality they'll get by paying.

That's basic marketing 101. You'll get more from a customer by offering them something if they pay instead of taking away something if they don't. It's the spin you put on it that matters, not the actual outcome.

paxdiablo
Thanks, I might consider going another direction than using a nag screen. But the free version of my app is already pretty full featured, but I'm thinking of things to add that people could pay for...
macatomy
This is irrelevant to me, but I thought that the answer was nice since it included examples and a rational argument. It has set my view on nag screens (not that I ever intended on implementing them). Nice job.
Jorge Israel Peña
I would staywith the timer. But make sure that nothing pops up in the first 10 days 20 starts (whatever comes first). Or track the time they use it. It is important to become annoying after you see the customer has an interest in your software.
Lothar
A: 

I dislike them, but here's how to do it:

Create an alert view, as well as an NSTimer. Then when the timer gets to x seconds, set the button to active (not entirely sure how to do that, but it shouldn't be too hard) .

Matt S.
+2  A: 

I personally would only have your Shareware App do this after a few days, let them evaluate it for a couple of days "nag free"... but that's just my opinion! Try this:

add these to the interface:

IBOutlet NSTextField *countdownLabel;
IBOutlet NSButton *continueButton;
NSTimer *timer;

.m:

- (id)init{
    self = [super init];
    [countdownLabel setStringValue:[NSString stringWithFormat:@"%d",10]];
    timer = [NSTimer scheduledTimerWithTimeInterval:1 target:self  selector:@selector(nagTimer:) userInfo:nil repeats:YES];
    return self;
}


- (void)nagTimer:(id)sender{
    if ([countdownLabel intValue] == 0){
     [timer invalidate];
     [continueButton setEnabled:YES];
     return;
    }
    [countdownLabel setStringValue:[NSString stringWithFormat:@"%d",[countdownLabel intValue] - 1]];
}

Something like that would work. Good Luck!

micmoo
A: 

Several Mac apps use a subtle "X days left" message in the right upper corner of the main window. Most prominent examples are:

Here you can see that method in action: Coda screenshot (look at the upper right)

This approach gets out of the potential buyers way but also reminds him to purchase your product.

weichsel