views:

403

answers:

7

I was wondering what the most effective way of preventing people from stealing my application (downloading a copy of the .apk online rather than buying it).

I've spent a lot of time on one in particular (Droidbox) and won't be releasing Sync until I can guarantee that the people who are providing illegal copies of the pro version aren't able to.

Anyone implemented this? I've tried checking my package signature verses an the signature of an unsigned copy but it appears to be the same - perhaps I'm doing something incorrectly here. I'm unsure whether people actually distribute the signed .apk in which case I don't think signature validation would work to begin with...

Please note, this question is specific to Android Marketplace Applications - the difference being, application delivery is out of my hands and I have no way of linking between a legitimate purchase and an illegal download.

A: 

General shareware advice here - license the software to the individual. i.e. provide a license key that is personalized to their username. They'll be much less likely to distribute a key if it's got their name on it. You can probably automate the backend fulfillment of the order, to provide custom keys. Have your "Pro" version operate in trial mode until the name/key are entered.

Chris Thornton
I don't really think this form of licensing is feasible as distribution of the application (along with purchasing) is handled through the android marketplace and not by me.
Berdon Magnus
+1  A: 

Don't leave your computers so that someone can steal your applications from there.

Or wait.. Did you meant you don't want others to copy your software? Then.. not publishing it in the first place is likely your best option.

A bit related link: http://news.cnet.com/8301-27076_3-20003120-248.html

You neither have any mechanism to estimate amount of illegally copied software. Enjoy your attempts from stopping the rain even though entities bigger than you have attempted and failed.

Cheery
+3  A: 

The people that are lax enough to use pirated copies of your application to access their DropBox are probably using their DropBox for piracy anyway. Forget those people. Let them go. Yes, it's a huge number of people I bet, but let's face it, those people were never going to pay you anything anyway. Focus on the parts that you can control, and forget the rest.

Focus on the Android users that use DropBox for their work, for their businesses, for their own code, for their finance, for their thesis, and/or for their private family pictures. 95% of those people, that have something of value in their DropBox, and that want it kept private, are going to want to buy your application (assuming it's good enough for them).

Let me use this analogy:

When it comes to hiring a locksmith to put a lock on your home, do you hire the guy that looks the part and takes $150 an hour, or do you hire the shady guy that is willing to sell you a stolen lock to put on your front door?

Stephan Branczyk
+1  A: 

Release your own illegal copy in the best known forums and have it disable itself after a week and showing a message like

Thanks for stealing... I make my living with programming this app. The x Dollar won't hurt you and I could by my next meal and go on making great updates for you.

I think this is the only thing that you can do about it. People will always find a way to copy your app and all countermeasures will only disturb the users that paid for the app.

The people copying your app aren't your customers and they never will be. Just see their use of the program as a kind of viral marketing. At least they are talking about your app and maybe some of their friends will then buy the app.

Janusz
+4  A: 

There is a single, useful connection between an application buyer and the developer through the marketplace, the forwarding email address provided by google to contact the buyer.

Utilizing the integration callback setting to send buy information to your own server, you can use PHP to send a unique identifier (registration code) to the buy via email (real time as the callback is shipped from google during a purchase. The user then uses this email to register their software using the unique identifier that is then linked to their android ID (or google account username) and the software is "activated" and guaranteed to be legitimate.

Obvious Questions

  • Why is this a suitable solution when it requires the user to read email? Our market are those people who are capable of buying an application using an android device. By using an android device, it is implied that the user has a google account which implies they know how to use email.

  • How do I use the email with the unique identifier with my application? Create a content handler in your application that handles something like "myactivator://uniqueid-or-something" which causes your application to communicate to your internal server that keeps tabs on activations. Embed this as a link in the email that the user can click on.

  • How should I generate the unique identifer? I'm going to use the email somehow - I'm fairly confident google has already made it unique enough to disallow any feasible method of contact information selling.

  • What about people who have already purchased the software? A lot of options here - none ideal or terrible.

    • Send emails to all previous buyers
    • Allow users to activate by typing in their order number (can be obtained by logging into checkout.google.com.

Why bother?

Because some of us put a lot of time into applications and saying "you should just accept pirating" is a slap in the face.

Berdon Magnus
A: 

There is a new tool in the wild that seems to good to be true:

Automatic Application Licensing from Keyes Lab.

I haven't tried it yet but if this works it sound like something you want to use in your high priced android apps.

If anybody tested it leave a comment or edit my answer with personal feedback.

Janusz
+4  A: 

Now there is the new Google App Licensing available. For deeper information read about it in the android developer blog.

A short summary: Google provides a library that makes a inter process call to the market client on the phone. The market client will then ask the google servers if the signed in user has purchased the app and forward this answer to you. There should be a public key in you developer profile that you need to encrypt the connection to the google server to prevent spoofing of answers. You also provide a application and device unique id with the query to make it impossible to forward approved queries to another device and build something like an licensing proxy with one bought copy forwarding the IS LICENSED answers to other devices.

At the moment this service looks secure enough to protect even the more valuable apps in the market. I will give it a try and maybe come back and leave some more informations after I used it a little bit.

Janusz
I would definitely change this to the correct answer since it's a new, Google-supported solution to this exact concern.
Matt Huggins