Call IsGenuine after 90 days.Give the user a few chances for IsGenuine to fail.If it still fails after that, Deactivate.
Intead of calling Deactivate() after failing the IsGenuine() call for 90 consecutive days, your app should just block the user from continuing using your app unless they connect to the internet. Does that make sense?
We're going to have to add a function to make this all easier. RIght now we think we've made this too complicated.
Is this the expected behavior?
Yes. Because Deactivate() will only succeed if it can actually talk to the LimeLM servers.