How exactly are the files sent? You mentioned using "GCM as a tickle" are you only using it for routing?
The app receives the tickle and makes a quick api call for the push data and sees it needs to get a file. It then asks for the file and I make sure they have permission to download it and then let them.
Over engineered? Maybe :)