How to refresh with refresh token correctly?

It sounds like the way you’re using refresh tokens is all good. Some apps refresh tokens before they expire so that they always have a valid access token, where as some other apps may choose to wait until they actually need to make a request before refreshing, either way is perfectly fine and it’s up to you how you go about it.

You’ll need to log what errors are happening that is causing your app to crash as there’s too little information right now to try and debug what the issue is.

As for refresh tokens changing, they actually have their own expiration (which isn’t shown as it’s not something devs need to know). While you will often get back the same refresh token each time you refresh that isn’t a certainty, and at times you will get a new refresh token as well as a new access token so make sure you always save both tokens.