diff --git a/app/mobile/App.js b/app/mobile/App.js index 8751552f..a0b97d43 100644 --- a/app/mobile/App.js +++ b/app/mobile/App.js @@ -12,7 +12,6 @@ import { RingContextProvider } from 'context/RingContext' import { ChannelContextProvider } from 'context/ChannelContext'; import { SafeAreaProvider, SafeAreaView } from 'react-native-safe-area-context'; import { ConversationContextProvider } from 'context/ConversationContext'; -import { LogBox, Alert } from 'react-native'; import { Root } from 'src/root/Root'; import { Access } from 'src/access/Access'; import { Dashboard } from 'src/dashboard/Dashboard'; @@ -28,6 +27,7 @@ export default function App() { const [sharing, setSharing] = useState(); useEffect(() => { + PermissionsAndroid.request(PermissionsAndroid.PERMISSIONS.POST_NOTIFICATIONS); ReceiveSharingIntent.getReceivedFiles(files => { diff --git a/app/mobile/android/app/src/main/java/com/databag/CustomReceiver.java b/app/mobile/android/app/src/main/java/com/databag/CustomReceiver.java index 978c7ed7..89d4d03b 100644 --- a/app/mobile/android/app/src/main/java/com/databag/CustomReceiver.java +++ b/app/mobile/android/app/src/main/java/com/databag/CustomReceiver.java @@ -15,6 +15,13 @@ import android.net.Uri; import android.media.RingtoneManager; import androidx.core.app.NotificationCompat; +import com.facebook.react.ReactApplication; +import com.facebook.react.ReactInstanceManager; +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactContext; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.modules.core.DeviceEventManagerModule; + public class CustomReceiver extends MessagingReceiver { public CustomReceiver() { super(); @@ -22,7 +29,18 @@ public class CustomReceiver extends MessagingReceiver { @Override public void onNewEndpoint(@NotNull Context context, @NotNull String endpoint, @NotNull String instance) { - Log.i("UNIFIED", "onNewEndpoint:instance=" + instance + " endpoint=" + endpoint); + final ReactInstanceManager reactInstanceManager = + ((ReactApplication) context.getApplicationContext()) + .getReactNativeHost() + .getReactInstanceManager(); + ReactContext reactContext = reactInstanceManager.getCurrentReactContext(); + + WritableMap params = Arguments.createMap(); + params.putString("instance", instance); + params.putString("endpoint", endpoint); + reactContext + .getJSModule(DeviceEventManagerModule.RCTDeviceEventEmitter.class) + .emit("unifiedPushURL", params); // Called when a new endpoint be used for sending push messages } diff --git a/app/mobile/android/app/src/main/java/com/databag/MainActivity.java b/app/mobile/android/app/src/main/java/com/databag/MainActivity.java index 440e8d03..2025de21 100644 --- a/app/mobile/android/app/src/main/java/com/databag/MainActivity.java +++ b/app/mobile/android/app/src/main/java/com/databag/MainActivity.java @@ -11,6 +11,13 @@ import com.facebook.react.defaults.DefaultReactActivityDelegate; import org.unifiedpush.android.connector.UnifiedPush; import org.unifiedpush.android.connector.RegistrationDialogContent; +import com.facebook.react.ReactApplication; +import com.facebook.react.ReactInstanceManager; +import com.facebook.react.bridge.Arguments; +import com.facebook.react.bridge.ReactContext; +import com.facebook.react.bridge.WritableMap; +import com.facebook.react.modules.core.DeviceEventManagerModule; + public class MainActivity extends ReactActivity { /** @@ -25,14 +32,22 @@ public class MainActivity extends ReactActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(null); + MainActivity activityContext = this; - UnifiedPush.registerAppWithDialog( - this, - "default", - new RegistrationDialogContent(), - new ArrayList(), - getApplicationContext().getPackageName() - ); + ReactInstanceManager mReactInstanceManager = getReactNativeHost().getReactInstanceManager(); + mReactInstanceManager.addReactInstanceEventListener(new ReactInstanceManager.ReactInstanceEventListener() { + public void onReactContextInitialized(ReactContext validContext) { + + UnifiedPush.registerAppWithDialog( + activityContext, + "default", + new RegistrationDialogContent(), + new ArrayList(), + getApplicationContext().getPackageName() + ); + + } + }); } /** diff --git a/app/mobile/src/context/useAppContext.hook.js b/app/mobile/src/context/useAppContext.hook.js index 690313d8..7abcda13 100644 --- a/app/mobile/src/context/useAppContext.hook.js +++ b/app/mobile/src/context/useAppContext.hook.js @@ -13,6 +13,7 @@ import { CardContext } from 'context/CardContext'; import { ChannelContext } from 'context/ChannelContext'; import { RingContext } from 'context/RingContext'; import { getVersion, getApplicationName, getDeviceId } from 'react-native-device-info' +import { DeviceEventEmitter } from 'react-native'; export function useAppContext() { const [state, setState] = useState({ @@ -40,6 +41,11 @@ export function useAppContext() { } useEffect(() => { + + DeviceEventEmitter.addListener('unifiedPushURL', (e) => { + Alert.alert("PUSH ENDPOINT", JSON.stringify(e)); + }); + (async () => { access.current = await store.actions.init(); if (access.current) {