Difference between Write Normals and Smooth Groups option in export .obj?
Write Normals does what it says - it write actual normals (face corner ones, i.e. one normal per face and per vertex). This is the most powerful and precise option, since it not only allows support of sharp edges and smooth faces, but also advanced low-poly tricks used in games and architecture, like 'rounded' edges etc.

Smooth Groups are a simplified version to store some non-uniform shading, it defines groups of faces that form a smooth surface. Meaning, edges between faces of a same group are smooth, while edges between faces of different groups are sharp.

Which one to use is mostly a matter of “what is supported by target application(s)”, though I would recommend to try normals first, since they allow more possibilities.