React-native-onesignal: Existe uma opção para ignorar o launchURL?

Criado em 4 nov. 2016  ·  4Comentários  ·  Fonte: OneSignal/react-native-onesignal

Olá!

Já configurei tudo e as notificações estão funcionando perfeitamente.
Quando envio uma mensagem normal sem url e pressiono a notificação, o aplicativo móvel é iniciado, que é o que eu quero.

Mas a conta de um sinal que está enviando a notificação também é usada em uma extensão do Chrome, portanto, há uma url para um site configurado nos parâmetros da notificação. Portanto, quando o celular recebe essa notificação, ele está usando a url do site e está abrindo um navegador e não o aplicativo para celular.

Existe alguma maneira de ignorar o URL?
Ou talvez pare o comportamento normal e abra manualmente o aplicativo móvel?
Ou estou fazendo algo errado para obter esse resultado?

Obrigado pela ajuda.

Todos 4 comentários

@jkasten2

@ccstorch @avishayil Não há como desabilitar o comportamento do URL de inicialização no aplicativo. No seu caso, você precisará enviar 2 notificações separadas. Um para apenas sua extensão do Chrome com um conjunto de URL de inicialização e outro para seu aplicativo móvel.

Sem problemas, obrigado pela ajuda @jkasten2!

Swizzling o método OneSignalHelper do displayWebView : é uma solução para resolver também este problema. Não é uma abordagem _grande_, mas faz o trabalho (por enquanto).

⚠️ SÓ FAÇA ISSO SE ESTIVER SE SENTINDO YOLO ⚠️

#import <RCTOneSignal/RCTOneSignal.h>
#import <objc/runtime.h>

<strong i="9">@implementation</strong> AppDelegate

- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions
{

    // Don't do this unless in dire yolo situations
    SwizzleClassMethod(NSClassFromString(@"OneSignalHelper"), @selector(displayWebView:), [AppDelegate class], @selector(displayWebView:));

    NSString *oneSignalAPIID = [[NSBundle mainBundle] objectForInfoDictionaryKey:@"ONE_SIGNAL_API_ID"];
    self.oneSignal = [[RCTOneSignal alloc] initWithLaunchOptions:launchOptions appId:oneSignalAPIID];

    return YES;
}

+ (void) displayWebView:(NSURL*)url {
    NSLog(@"This is dumb"); 
}

void SwizzleClassMethod(Class cOriginal, SEL orig, Class cNew, SEL new) {

    Method origMethod = class_getClassMethod(cOriginal, orig);
    Method newMethod = class_getClassMethod(cNew, new);

    cOriginal = object_getClass((id)cOriginal);
    cNew = object_getClass((id)cNew);

    if(class_addMethod(cOriginal, orig, method_getImplementation(newMethod), method_getTypeEncoding(newMethod))) {
        class_replaceMethod(cNew, new, method_getImplementation(origMethod), method_getTypeEncoding(origMethod));
    } else {
        method_exchangeImplementations(origMethod, newMethod);
    }
}

<strong i="10">@end</strong>
Esta página foi útil?
0 / 5 - 0 avaliações