I'd say the intricacies involved in Bluetooth communications, coupled with the car's software and/or hardware. For my first several months I'd use the keycard to unlock/lock my car. I did not have a good trust in having a smartphone do this (I still really don't; explanation follows later). Then I tried assigning my phone (Samsung J3) and it worked.... most of the time. I still had to dig out my keycard or cycle Bluetooth on my phone (airplane mode on, then off) from time to time. I later changed phones to a Samsung Galaxy S6 Edge and it didn't get any better. I'm now using a Samsung XCover Pro and automatic unlock seems to have gotten a bit better. Walk away lock has almost always worked for me; I listen for the beep as I'm walking away. If I don't hear it, then my backup is used.
Since I didn't, and really still don't, trust the car to unlock each time I walk up, I bought the first version of the fob (non-passive) and always carry it with me. If the car doesn't unlock when I'm next to it, I simply press the button on the fob in my pocket. This version has been superseded by the passive version, which is similar in operation to a phone as key; you just have to be near the car for it to work. I still have keycards with me; one in my wallet and the other superglued to my phone's holster.
What's fairly critical in getting the phone to work 100% of the time is to make sure there's nothing between it and the car. Like your butt. Having the phone in your back pocket is not the best for establishing communications. I keep my phone on a belt holster on my right hip. It's closest to the car when I open the driver side door. Still, Murphy's Law rears its head and if I'm carrying a couple of things in my hands, automatic unlock will not and I have to fiddle with my finger and hit the fob. I've gotten real good at opening the doors with a single finger.