The new permissions model on Android is a big improvement over the former "take it or leave it" approach, but applications can still deny service if you don't give them what they want. I can't comment on iOS because I've never owned an iPhone.
Perhaps I'm just spoiled by the excellent quality software I get for free on my Gentoo/Debian workstation. I just refuse to accept that because my phone fits in my pocket, the standards should be so much lower. I miss my n900 dammit. :/
Perhaps check out the new permission model, which requests permissions at runtime, instead of upfront.
And about ads, more and more iOS apps are starting it too, i thought ( don't have iOS, read it from multiple sources)