IMO najpierw lepiej zrozumieć jaki problem rozwiązują push notyfikacje.
Wcześniej, by dostać notyfikacje aplikacja musiała działać w tle i nasłuchiwać jakiegoś połączania lub portu.
Co jakiś cas takie połączanie musi być podtrzymane jakimś pingiem.
To oznacza, że aplikacja musi być często wybudzana, więc procesor jest wybudzany, nadajniki włączane itd itp.
Do tego jeśli takich aplikacji jest kilka to pojawia się problem synchronizacji tych pingów. Brak synchronizacji prowadzi do częstszego wybudzania systemu.
Oznacza to więcej prądu dla procesora i większe zużycie baterii (różnica była ogromna).
Scentralizowanie tej logiki do postaci "push notification" rozwiązuje wszystkie te problemy. Mało tego aplikacja nie musi być nawet uruchomiona.
Na dodatek rozwiązuje to problemy częstych błędów w samodzielnej implementacji tego mechanizmu.
Przez jakiś czas google i apple miały swoje rozwiązania, ale ponieważ pojawiły się usługi łączące obie platformy w jedno, prowadziło do wycieku danych prywatnych.
Dlatego w tej kwestii Apple i Google dogadali się i zapewniają wspólne rozwiązanie.
Co do niezawodności, to z tego co wiem, z tego mechanizmu korzystają nawet komunikatory.