Blend shapes is probably the easiest method for facial animation.
Another approach is to contruct a facial animation rig using joints, clusters, etc. It's a lot more complex in many ways, but you do get a great deal of control over the entire face (or whatever you build into the rig). Also, you are not constrained to blendshapes you build, nor do you have to build every possible combination of facial movements.
Another great reason for a facial rig is flexibility and reusability. Blendshapes are specific to individual meshes. Every time you have a new character, you have to redo the blendshapes. Rigs and can be adjusted and reused on other characters. You could feasibly animate the rig once, and then skin it to a variety of characters. That part takes a lot of planning, but it can be done.