React-native-onesignal: Existe-t-il une option pour ignorer l'URL de lancement ?

Créé le 4 nov. 2016  ·  4Commentaires  ·  Source: OneSignal/react-native-onesignal

Salut!

J'ai déjà tout configuré et les notifications fonctionnent parfaitement.
Lorsque j'envoie un message normal sans url et que j'appuie sur la notification, l'application mobile se lance, c'est ce que je souhaite.

Mais le compte unique auquel il envoie la notification est également utilisé sur une extension chrome, il existe donc une URL pour un site Web configuré sur les paramètres de la notification. Ainsi, lorsque le mobile reçoit cette notification, il utilise l'URL du site Web et ouvre un navigateur et non l'application mobile.

Existe-t-il un moyen d'ignorer l'url ?
Ou peut-être arrêter le comportement normal et ouvrir manuellement l'application mobile ?
Ou je fais quelque chose de mal pour obtenir ce résultat?

Merci pour l'aide.

Tous les 4 commentaires

@jkasten2

@ccstorch @avishayil Il n'existe aucun moyen de désactiver le comportement de l'URL de lancement dans l'application. Dans votre cas, vous devrez envoyer 2 notifications distinctes. Un pour votre extension Chrome avec un ensemble d'URL de lancement et un autre pour votre application mobile.

Pas de problème, merci pour l'aide @jkasten2 !

Swizzling la méthode OneSignalHelper de displayWebView : est une solution pour résoudre également ce problème. Ce n'est pas une _grande_ approche mais cela fait le travail (pour l'instant).

⚠️ NE LE FAITES QUE SI VOUS VOUS SENTEZ 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>
Cette page vous a été utile?
0 / 5 - 0 notes