Привет!
Я уже все настроил, и уведомления работают отлично.
Когда я отправляю обычное сообщение без URL-адреса и нажимаю на уведомление, запускается мобильное приложение, чего я и хочу.
Но одна сигнальная учетная запись, которая отправляет уведомление, также используется в расширении Chrome, поэтому в параметрах уведомления настроен URL-адрес веб-сайта. Поэтому, когда мобильный телефон получает это уведомление, он использует URL-адрес веб-сайта и открывает браузер, а не мобильное приложение.
Есть ли способ игнорировать URL-адрес?
Или, может быть, остановить нормальное поведение и вручную открыть мобильное приложение?
Или я делаю что-то не так, чтобы получить этот результат?
Спасибо за помощь.
@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>