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.
@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>