The difference I know so far is that restorePurchases can be called multiple times but only through user action while syncPurchases should be called programmatically only once every app version.
Is there any other differences or they are fundamentally different in what they do?