I have a mid-solution to make smart contracts communicate with my game:
1/ For all calls to contract readable functions I will use an infuraIO apiKey, so no need to access metamask to read the blockchain. It’ll be done internally in the app.
2/ For calls which write something in the contract, I will create a page on my site for each function. I’ll then open the page with a Web!View. The url to that page will be a metamask compatible link, so metamask mobile will be directly open. (see metamask docs for these kind of urls).
I think it’s the best compromise , for me, to be able to create an Android/iOS application which can read & write into a contract