diff --git a/README.md b/README.md index 812d239e..62072152 100644 --- a/README.md +++ b/README.md @@ -379,7 +379,7 @@ TwilioVoice.getCallInvite() } }) -// Unregister device with Twilio (iOS only) +// Unregister device with Twilio TwilioVoice.unregister() ``` diff --git a/android/src/main/java/com/hoxfon/react/RNTwilioVoice/TwilioVoiceModule.java b/android/src/main/java/com/hoxfon/react/RNTwilioVoice/TwilioVoiceModule.java index d9c627fb..5d8ddc9c 100644 --- a/android/src/main/java/com/hoxfon/react/RNTwilioVoice/TwilioVoiceModule.java +++ b/android/src/main/java/com/hoxfon/react/RNTwilioVoice/TwilioVoiceModule.java @@ -52,6 +52,7 @@ import com.twilio.voice.LogLevel; import com.twilio.voice.RegistrationException; import com.twilio.voice.RegistrationListener; +import com.twilio.voice.UnregistrationListener; import com.twilio.voice.Voice; import java.util.HashMap; @@ -118,6 +119,7 @@ public class TwilioVoiceModule extends ReactContextBaseJavaModule implements Act static Map callNotificationMap; private RegistrationListener registrationListener = registrationListener(); + private UnregistrationListener unregistrationListener = unregistrationListener(); private Call.Listener callListener = callListener(); private CallInvite activeCallInvite; @@ -225,6 +227,26 @@ public void onError(RegistrationException error, String accessToken, String fcmT }; } + private UnregistrationListener unregistrationListener() { + return new UnregistrationListener() { + @Override + public void onUnregistered(String accessToken, String fcmToken) { + if (BuildConfig.DEBUG) { + Log.d(TAG, "Successfully unregistered FCM"); + } + eventManager.sendEvent(EVENT_DEVICE_NOT_READY, null); + } + + @Override + public void onError(RegistrationException error, String accessToken, String fcmToken) { + Log.e(TAG, String.format("Unregistration Error: %d, %s", error.getErrorCode(), error.getMessage())); + WritableMap params = Arguments.createMap(); + params.putString("err", error.getMessage()); + eventManager.sendEvent(EVENT_DEVICE_NOT_READY, params); + } + }; + } + private Call.Listener callListener() { return new Call.Listener() { /* @@ -618,6 +640,41 @@ public void onComplete(@NonNull Task task) { }); } + /* + * Unregister your android device with Twilio + * + */ + + @ReactMethod + public void unregister(Promise promise) { + unregisterForCallInvites(); + WritableMap params = Arguments.createMap(); + params.putBoolean("initialized", false); + promise.resolve(params); + } + + private void unregisterForCallInvites() { + FirebaseInstanceId.getInstance().getInstanceId() + .addOnCompleteListener(new OnCompleteListener() { + @Override + public void onComplete(@NonNull Task task) { + if (!task.isSuccessful()) { + Log.w(TAG, "getInstanceId failed", task.getException()); + return; + } + + // Get new Instance ID token + String fcmToken = task.getResult().getToken(); + if (fcmToken != null) { + if (BuildConfig.DEBUG) { + Log.d(TAG, "Unregistering with FCM"); + } + Voice.unregister(accessToken, Voice.RegistrationChannel.FCM, fcmToken, unregistrationListener); + } + } + }); + } + @ReactMethod public void accept() { callAccepted = true; diff --git a/index.js b/index.js index b84b91bf..1ee5184f 100644 --- a/index.js +++ b/index.js @@ -86,9 +86,7 @@ const Twilio = { } }, unregister() { - if (Platform.OS === IOS) { - TwilioVoice.unregister() - } + TwilioVoice.unregister() }, addEventListener(type, handler) { if (!_eventHandlers.hasOwnProperty(type)) {