React-native-onesignal: launchURL을 λ¬΄μ‹œν•˜λŠ” μ˜΅μ…˜μ΄ μžˆμŠ΅λ‹ˆκΉŒ?

에 λ§Œλ“  2016λ…„ 11μ›” 04일  Β·  4μ½”λ©˜νŠΈ  Β·  좜처: OneSignal/react-native-onesignal

μ—¬λ³΄μ„Έμš”!

λ‚˜λŠ” 이미 λͺ¨λ“  것을 μ„€μ •ν–ˆκ³  μ•Œλ¦Όμ€ μ™„λ²½ν•˜κ²Œ μž‘λ™ν•©λ‹ˆλ‹€.
url이 μ—†λŠ” 일반 λ©”μ‹œμ§€λ₯Ό 보내고 μ•Œλ¦Όμ„ λˆ„λ₯΄λ©΄ λ‚΄κ°€ μ›ν•˜λŠ” λͺ¨λ°”일 앱이 μ‹€ν–‰λ©λ‹ˆλ‹€.

κ·ΈλŸ¬λ‚˜ μ•Œλ¦Όμ„ λ³΄λ‚΄λŠ” ν•˜λ‚˜μ˜ μ‹ ν˜Έ 계정은 크둬 ν™•μž₯ ν”„λ‘œκ·Έλž¨μ—μ„œλ„ μ‚¬μš©λ˜λ―€λ‘œ μ•Œλ¦Ό λ§€κ°œλ³€μˆ˜μ— κ΅¬μ„±λœ μ›Ήμ‚¬μ΄νŠΈ URL이 μžˆμŠ΅λ‹ˆλ‹€. λ”°λΌμ„œ λͺ¨λ°”μΌμ—μ„œ 이 μ•Œλ¦Όμ„ μˆ˜μ‹ ν•˜λ©΄ μ›Ήμ‚¬μ΄νŠΈμ˜ URL을 μ‚¬μš©ν•˜κ³  있으며 λͺ¨λ°”일 앱이 μ•„λ‹Œ λΈŒλΌμš°μ €λ₯Ό μ—¬λŠ” κ²ƒμž…λ‹ˆλ‹€.

URL을 λ¬΄μ‹œν•˜λŠ” 방법이 μžˆμŠ΅λ‹ˆκΉŒ?
μ•„λ‹ˆλ©΄ 정상적인 λ™μž‘μ„ μ€‘μ§€ν•˜κ³  μˆ˜λ™μœΌλ‘œ λͺ¨λ°”일 앱을 μ—¬μ‹œκ² μŠ΅λ‹ˆκΉŒ?
μ•„λ‹ˆλ©΄ 내가이 κ²°κ³Όλ₯Ό μ–»κΈ° μœ„ν•΄ λ­”κ°€ 잘λͺ»ν•˜κ³  μžˆμŠ΅λ‹ˆκΉŒ?

도와 μ£Όμ…”μ„œ κ°μ‚¬ν•©λ‹ˆλ‹€.

λͺ¨λ“  4 λŒ“κΈ€

@jkasten2

@ccstorch @avishayil μ•±μ—μ„œ μ‹€ν–‰ URL에 λŒ€ν•œ λ™μž‘μ„ λΉ„ν™œμ„±ν™”ν•˜λŠ” 방법이 μ—†μŠ΅λ‹ˆλ‹€. κ·€ν•˜μ˜ 경우 2개의 κ°œλ³„ μ•Œλ¦Όμ„ 보내야 ν•©λ‹ˆλ‹€. ν•˜λ‚˜λŠ” μ‹œμž‘ URL이 μ„€μ •λœ Chrome ν™•μž₯ ν”„λ‘œκ·Έλž¨μ— λŒ€ν•œ 것이고 λ‹€λ₯Έ ν•˜λ‚˜λŠ” λͺ¨λ°”일 앱에 λŒ€ν•œ κ²ƒμž…λ‹ˆλ‹€.

문제 μ—†μŠ΅λ‹ˆλ‹€. @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 λ“±κΈ‰