I have deployed my ERC223Token contract in my private blockchain. I have transferred some tokens to my wallet It is showing tokens in my mist wallet and remix as well, but it is not showing tokens in meta mask.
In order to being automatically visible and manageable by metamask UI you need to have as public function at least the following ERC20functions: name(), symbol(), balanceOf(), decimals() (the UI gives you the possibility to partially input those data by hand as well).
At that point you simply give the address of your “custom token” contract and that is all.
On the other side you need an ERC20 compatible transfer() as well in order to being able to move your tokens by metamask UI.
As far as I know nothing more is required.
Of course you need to be connected to the same blockchain where your contract has been deployed, but it can be obvious. Just to have an additional check...
Another check is on decimals value: if you have decimals 10^18 and the balance number is 1000 or whatever, it is under the threshold of the UI and it will display zero (but they are there: you can transfer them for instance).