React-native-onesignal: Есть ли возможность игнорировать launchURL?

Созданный на 4 нояб. 2016  ·  4Комментарии  ·  Источник: OneSignal/react-native-onesignal

Привет!

Я уже все настроил, и уведомления работают отлично.
Когда я отправляю обычное сообщение без URL-адреса и нажимаю на уведомление, запускается мобильное приложение, чего я и хочу.

Но одна сигнальная учетная запись, которая отправляет уведомление, также используется в расширении Chrome, поэтому в параметрах уведомления настроен URL-адрес веб-сайта. Поэтому, когда мобильный телефон получает это уведомление, он использует URL-адрес веб-сайта и открывает браузер, а не мобильное приложение.

Есть ли способ игнорировать URL-адрес?
Или, может быть, остановить нормальное поведение и вручную открыть мобильное приложение?
Или я делаю что-то не так, чтобы получить этот результат?

Спасибо за помощь.

Все 4 Комментарий

@jkasten2

@ccstorch @avishayil Невозможно отключить поведение URL-адреса запуска в приложении. В вашем случае вам нужно будет отправить 2 отдельных уведомления. Один только для вашего расширения Chrome с установленным URL-адресом запуска, а другой — для вашего мобильного приложения.

Нет проблем, спасибо за помощь @jkasten2!

Использование метода OneSignalHelper displayWebView : также является решением этой проблемы. Это не лучший подход, но он выполняет свою работу (на данный момент).

⚠️ ДЕЛАЙТЕ ЭТО, ТОЛЬКО ЕСЛИ ВЫ ЧУВСТВУЕТЕ 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>
Была ли эта страница полезной?
0 / 5 - 0 рейтинги