こんにちは!
私はすでにすべてをセットアップし、通知は完全に機能しています。
URLなしで通常のメッセージを送信して通知を押すと、モバイルアプリが起動します。これが私が望むものです。
ただし、通知を送信している1つのシグナルアカウントはChrome拡張機能でも使用されるため、通知のパラメーターで構成されたWebサイトのURLがあります。 したがって、モバイルがこの通知を受信すると、モバイルはWebサイトのURLを使用しており、モバイルアプリではなくブラウザーを開いています。
URLを無視する方法はありますか?
または、通常の動作を停止して手動でモバイルアプリを開きますか?
または、この結果を得るために何か間違ったことをしていますか?
助けてくれてありがとう。
@ jkasten2
@ ccstorch @ avishayilアプリで起動URLの動作を無効にする方法はありません。 あなたの場合、2つの別々の通知を送信する必要があります。 1つは起動URLが設定されたChrome拡張機能だけで、もう1つはモバイルアプリです。
問題ありません、@ 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>