Part of contacts sync is resolved by following this instructions.
Part of push was solved by running gmail app on the back ground.
and the easiest way to solve it to pay google for exchange service.
You can no longer configure gmail as an Exchange account. Google has terminated support for it. Existing setups will continue to work (though there have been issues reported here and in other forums), but you can no longer set it up that way on any iOS device. If you need push notification for your gmail, you'll have to resort to the gmail app, mailbox, or another 3rd party gmail client.