Does it have to be on bare metal? What about adding the product to primer?
Yes, bare metal is best, with a rough finish for better adhesion (and ALL rust removed). Paint both sides afterwards with an automotive quality primer, color paint, and clear top coat if it had one before.
If a hole or gap is to be filled, it is best to give the filler something to "grab onto", such as wire screen, screw heads, etc. The idea is to minimize in any direction (including depth) the distance unsupported filler has to span.
The keys to a good job are: adhesion, support, and matching the original contours. For that last item, keep putting on thin layers and repeatedly sanding off high spots and filling in low spots, until the surface is perfectly smooth and matches the original shape. Remember, the paint job will not look glassy smooth unless the surface you are painting is glassy smooth.
No, it doesn't have to be on bare metal; it's a good idea but as @kmarsh says "metal is best". Remember that Bondo dries to a hard plastic, if you apply it on something that is flexible then it will crack and eventually fall off (not to mention looking horrible).
Beware: Never use Bondo to fill a hole unless it is for off road/temporary use. A screen may hold the Bondo, but since it dries hard it's a bad idea. Use Fibreglass to fill non-structural holes (assuming automotive use, of course), and weld/rivet in metal in other cases.
Everything else @kmarsh says is also key to a nice looking AND long lasting job. In general Bondo is for filling small imperfections and should never be used in a "power trowel" (a.k.a. Lumber with a big scoop of Bondo :) )