2016-05-06 18 views
1

Ich habe lange versucht, ein angemeldetes Benutzerzugriffstoken zu erhalten. Ich hatte große Probleme damit in JS, also versuchte und gelang es mir in Obj-C.NativeAppEventEmitter gibt undefined zurück

Danach ging ich durch diese Anleitung auf RN: https://facebook.github.io/react-native/docs/native-modules-ios.html#sending-events-to-javascript auf, wie man eine Schnur von Obj-C zu JS übergibt, und es schien, erfolgreich gewesen zu sein. Die Sache ist jedoch, dass sie undefiniert zurückkehrt, und das nervt mich, weil sie die Zeichenfolge aufruft und ich sehe, wie mein Obj-C sie im Log korrekt zurückgibt, aber wenn sie von meinem JS nach der Anmeldung protokolliert werden soll, es ist undefiniert.

In AppDelegate.m Ich habe dies:

- (BOOL)application:(UIApplication *)application openURL:(NSURL *)url sourceApplication:(NSString *)sourceApplication annotation:(id)annotation { 
    BOOL handled = [[FBSDKApplicationDelegate sharedInstance] application:application 
                   openURL:url 
                 sourceApplication:sourceApplication 
                  annotation:annotation 
        ]; 

    NSString *fbAccessToken = [FBSDKAccessToken currentAccessToken].tokenString; 

    [self.bridge.eventDispatcher sendAppEventWithName:@"AccessToken" 
               body:@{@"name": fbAccessToken}]; 

    NSLog(@"%@", fbAccessToken); 

    return handled; 
} 

, die erfolgreich eine Arbeits accesstoken protokolliert. In JS rufe ich den EventEmitter an: var subscription = NativeAppEventEmitter.addListener('AccessToken');, das sollte funktionieren Ich schätze da ich auch dieses Beispiel angeschaut habe: https://github.com/facebook/react-native/blob/master/Libraries/Geolocation/Geolocation.js, wo sie es scheinbar genau so gemacht haben wie ich.

einfach den Teilnehmer anzurufen gibt mir diese:

2016-05-06 10:39:31.013 [info][tid:com.facebook.React.JavaScript] { subscriber: 
    { _subscriptionsForType: 
     { AccessToken: 
     [ { subscriber: [Circular], 
      listener: undefined, 
      context: undefined, 
      eventType: 'AccessToken', 
      key: 0 }, 
      [Circular] ] }, 
    _currentSubscription: null }, 
    listener: undefined, 
    context: undefined, 
    eventType: 'AccessToken', 
    key: 1 } 

So Rufname- oder Körper gibt mir nur undefined.

Was mache ich falsch?

Antwort

1

Sie müssen eingehende Daten fangen so etwas wie dies versuchen (dies im docs Beispiel war!):

var subscription = NativeAppEventEmitter.addListener(
'AccessToken', 
(token) => console.log(token.name) 
); 

Denken Sie daran, dass Sie nicht wirklich subscriber direkt anrufen können.

+0

Jetzt ist Sais unter Listener: [Funktion] statt undefiniert. Aber wie kann ich das so nennen, damit ich die Zeichenfolge von Obj-c bekommen kann? –

+0

Sie können das nicht wirklich nennen. 'NativeAppEventEmitter' sendet ein Ereignis von objc an JS. Sie können es nicht anders verwenden. Das Token wird gesendet, wenn es von objc gesendet wird. –

+0

Bedeutet dies, dass die Zeichenfolge, die ich in ObjC generiert habe, für meine Operationen in JS nutzlos ist? –

Verwandte Themen