React-native-onesignal: Gibt es eine Option zum Ignorieren der LaunchURL?

Erstellt am 4. Nov. 2016  ·  4Kommentare  ·  Quelle: OneSignal/react-native-onesignal

Hallo!

Ich habe bereits alles eingerichtet und die Benachrichtigungen funktionieren perfekt.
Wenn ich eine normale Nachricht ohne URL sende und auf die Benachrichtigung drücke, wird die mobile App gestartet, was ich möchte.

Aber das eine Signalkonto, das die Benachrichtigung sendet, wird auch in einer Chrome-Erweiterung verwendet, sodass eine URL für eine Website in den Parametern der Benachrichtigung konfiguriert ist. Wenn das Mobiltelefon diese Benachrichtigung erhält, verwendet es also die URL für die Website und öffnet einen Browser und nicht die mobile App.

Gibt es eine Möglichkeit die URL zu ignorieren?
Oder vielleicht das normale Verhalten stoppen und die mobile App manuell öffnen?
Oder mache ich etwas falsch, um dieses Ergebnis zu erhalten?

Danke für die Hilfe.

Alle 4 Kommentare

@jkasten2

@ccstorch @avishayil Es gibt keine Möglichkeit, das Verhalten für die Start-URL in der App zu deaktivieren. In Ihrem Fall müssen Sie 2 separate Benachrichtigungen senden. Eine nur für Ihre Chrome-Erweiterung mit festgelegter Start-URL und eine andere für Ihre mobile App.

Kein Problem, danke für die Hilfe @jkasten2!

Das Swizzling der OneSignalHelper displayWebView : -Methode von OneSignalHelper ist eine Lösung, um auch dieses Problem zu lösen. Es ist kein _großartiger_ Ansatz, aber es erledigt die Arbeit (vorerst).

⚠️ MACH DAS NUR, WENN DU YOLO FÜHLST ⚠️

#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>
War diese Seite hilfreich?
0 / 5 - 0 Bewertungen