Android can work perfectly with all these Google Services out of the box, but the iPhone... you've gotta work around Apple's barriers.
For the contacts and calendar you have to use Nuevasync. They simulate an exchange server that will keep your contacts and calendar synched in real time.
I don't know why, but Gmail won't push emails to the iPhone, but Yahoo will. Create a yahoo account and then set up gmail to forward all emails to that account.
That's the only way I found to make Google work the way it should with the iphone.
Update: The downside in this all is that people will eventually see replies coming from this new yahoo mail address, which isn't something I really wanted and Yahoo won't let you change it.
Update: This tip is useless since Google has Exchange Server fully operational now for contacts, mail and calendar.