React-native-onesignal: هل هناك خيار لتجاهل LaunchURL؟

تم إنشاؤها على ٤ نوفمبر ٢٠١٦  ·  4تعليقات  ·  مصدر: OneSignal/react-native-onesignal

مرحبا!

لقد قمت بالفعل بإعداد كل شيء والإشعارات تعمل بشكل مثالي.
عندما أرسل رسالة عادية بدون عنوان url وأضغط على الإشعار ، يتم تشغيل تطبيق الهاتف المحمول ، وهذا ما أريده.

لكن حساب الإشارة الوحيد الذي يرسل الإشعار يُستخدم أيضًا على امتداد chrome ، لذلك يوجد عنوان url لموقع ويب تم تكوينه على معلمات الإشعار. لذلك عندما يتلقى الهاتف المحمول هذا الإشعار ، فإنه يستخدم عنوان url لموقع الويب ويفتح متصفحًا وليس تطبيق الهاتف المحمول.

هل هناك أي طريقة لتجاهل عنوان url؟
أو ربما يوقف السلوك العادي ويفتح تطبيق الهاتف يدويًا؟
أو أفعل شيئًا خاطئًا للحصول على هذه النتيجة؟

شكرا للمساعدة.

ال 4 كومينتر

@ jkasten2

ccstorchavishayil لا توجد طريقة لتعطيل سلوك تشغيل URL في التطبيق. في حالتك ، ستحتاج إلى إرسال إشعارين منفصلين. واحد إلى امتداد Chrome فقط مع تعيين عنوان URL للتشغيل والآخر لتطبيقك للجوّال.

لا مشكلة ، شكرا للمساعدة @ jkasten2!

يعد استخدام طريقة التبديل في طريقة OneSignalHelper displayWebView : حلاً لحل هذه المشكلة أيضًا. إنه ليس نهجًا _ عظيمًا ولكنه ينجز المهمة (في الوقت الحالي).

⚠️ افعل هذا فقط إذا كنت تشعر بأنك تشعر بأنك

#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 التقييمات