What is wrong with my quad .obj?

When importing the obj file below, unity says “Can’t import normals, because mesh ‘default’ doesn’t have it.”, and then unity recalculates the normals. So my first question is: why doesn’t unity parse my “vn” lines as vertex normals? The second issue is that the entire mesh is a solid color when I apply a texture image material, and I have tried a variety of shaders such as “Legacy Shaders/Diffuse”. So why doesn’t unity process my “vt” lines as texture coordinates and map an image onto this quad? This is a very simple object example of the issues I have with generating obj files from script. I have also tried adding in decimal places to these numbers. Please do not recommend any solutions involving 3d modeling programs.

v 0 0 0
v 100 0 0
v 0 0 100
v 100 0 100
vn 0 1 0
vn 0 1 0
vn 0 1 0
vn 0 1 0
vt 0 0
vt 1 0
vt 0 1
vt 1 1
f 1 4 3
f 1 2 4

Unity is parsing your normals, but your mesh is not using them.

In wavefront .obj file format a face can be defined in the following ways:

# vertex index
f 1 2 3
# vertex index / vertex texture coordinate index
f 1/1 2/2 3/3
# vertex index / vertex texture coordinate index / vertex normal index
f 1/1/1 2/2/2 3/3/3

Your .obj can be imported to unity if you change your face definitions as follows:

v 0 0 0
v 100 0 0
v 0 0 100
v 100 0 100
vn 0 1 0
vn 0 1 0
vn 0 1 0
vn 0 1 0
vt 0 0
vt 1 0
vt 0 1
vt 1 1
f 1/1/1 4/4/4 3/3/3
f 1/1/1 2/2/2 4/4/4