You suggestion (of which I was aware) only handles some of the issues.
I was including your technique under the heading of "downloading a
separate .apk".

However, in the current world, it's a valuable technique, and I should
have covered its limitations a bit more explicitly.

Let's say I have a paid core app.

Let's say you have an extension for my app.

The user downloads your app, and pays for it. Then, a day later, he
gets around to trying it. Now your app takes him back to the
marketplace. More money? No. You didn't tell me that, that's not
right!  (Maybe you DID tell him; maybe you didn't have room to explain
it well enough -- and it ate into the space needed to explain YOUR
app).

So now he uninstalls your app. And can't get his money back, and
leaves all sorts of negative comments. So now you're both screwed.

This is a problem even for free apps. If the transaction gets split
up, it won't be successful a lot of the time. Users will be annoyed.
There's not space in the market descriptions to explain what's going
on at time of download. By the time they actually download, there can
be version skew.

Later, he uninstalls the service app, not realizing it's needed. Now
your app breaks. Let's say you start a service on bootup or some other
broadcast intent. Just when do you report that your app is broken?
Sure, the fix is to re-download the service app, but the only time
it's really reasonable to do that is on launching an activity.

And providing .apks for download that don't actually have a launcher
icon, or that don't actually provide any user functionality, presents
its own set of problems.

Your approach primarily is a way of easing the user into the manual
step. I see the very existence of that manual step at that point in
the process as being a major problem.

I've only encountered your technique being used once. It actually
rather startled me -- I've encountered quite a number of cases where
it SHOULD be used. This argues that the mere existence of your
technique isn't sufficient to solve the problem. The problem is, it
requires too much of the programmer, to discover and implement.  This
is really something that should be a documented part of the SDK, in
whatever form it takes. This would help ensure a consistent user
experience and more consistent implementation.

Even if it's just your technique, adopting it as part of the SDK would
help. But as I outlined above, it's an inadequate workaround.

On Apr 17, 4:16 am, Mark Murphy <[email protected]> wrote:
> Bob Kerns wrote:
> > If I have a service used by
> > several applications, I currently have to supply it in every
> > application, and arrange to negotiate just which one actually provides
> > the service.
>
> That's not the only option -- see below.
>
> > The alternative, of a separate APK is prohibitive because it depends
> > on the user seeing the dependency, understanding what to do about it,
> > and taking action.
>
> Those three steps can be handled by the application that has the dependency.
>
> If your application requires other capabilities:
>
> -- use PackageManager to see if the required component is there
>
> -- if not, pop up a dialog saying that you need to download/install the
> dependency before you can continue (or before certain features are enabled)
>
> -- start up the relevant Market Uri, or download and kick off the
> installation yourself, depending on how the component is distributed
>
> > However, if we could declare in our manifest that a package *requires*
> > package, and the Market handled this, most of our problems would be
> > solved.
>
> It would certainly solve all of the above problems, and related ones
> (e.g., uninstalling no-longer-needed applications once whatever depended
> on them is uninstalled, warning a user if they try to uninstall
> something that somebody else depends upon). I suspect it will introduce
> new and exciting problems, but that remains to be seen.
>
> FWIW, I suggested this about a year ago and the notion was squashed.
>
> --
> Mark Murphy (a Commons 
> Guy)http://commonsware.com|http://twitter.com/commonsguy
>
> Android Training...At Your Office:http://commonsware.com/training
>
> --
> You received this message because you are subscribed to the Google
> Groups "Android Developers" group.
> To post to this group, send email to [email protected]
> To unsubscribe from this group, send email to
> [email protected]
> For more options, visit this group 
> athttp://groups.google.com/group/android-developers?hl=en

-- 
You received this message because you are subscribed to the Google
Groups "Android Developers" group.
To post to this group, send email to [email protected]
To unsubscribe from this group, send email to
[email protected]
For more options, visit this group at
http://groups.google.com/group/android-developers?hl=en

Reply via email to