2016-04-20 7 views
10

मेरे पास एक वास्तविक मूल ऐप है जहां मैं जावास्क्रिप्ट में एक हैंडलर को एक चुप आईओएस पुश अधिसूचना प्राप्त करने की कोशिश कर रहा हूं।ऐप पृष्ठभूमि में होने पर प्रतिक्रिया मूल के साथ मूक आईओएस पुश अधिसूचना

जो व्यवहार मैं देख रहा हूं वह यह है कि AppDelegate में फ़ंक्शन को कॉल किया जाता है लेकिन जावास्क्रिप्ट में मेरा हैंडलर तब तक नहीं बुलाया जाता है जब तक कि ऐप अग्रभूमि में न हो या हाल ही में बंद हो गया हो।

बात मैं के बारे में उलझन में हूँ स्पष्ट रूप से एप्लिकेशन और होने जगाया जा रहा है यह है didReceiveRemoteNotification समारोह कहा जाता है, लेकिन फिर [RCTPushNotificationManager didReceiveRemoteNotification:notification] करने के लिए कॉल कुछ भी करने को नहीं लगता है।

इसके अलावा, अगर मैं अधिसूचना प्राप्त करने के बाद ऐप खोलता हूं, तो मुझे लगता है कि उस बिंदु पर प्रतिक्रिया मूल हैंडलर को बुलाया जाता है।

- (void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)notification 
{ 
    NSLog(@"didReceiveRemoteNotification"); 

    [RCTPushNotificationManager didReceiveRemoteNotification:notification]; 
} 

मेरी का रूट घटक में घरेलू एप्लिकेशन प्रतिक्रिया मैं इस किया है::

componentDidMount() { 
    AppState.addEventListener('change', this.handleAppStateChange); 

    PushNotificationIOS.addEventListener('notification', (notification) => { 
     console.log("notification recieved"); 
    }) 
} 
handleAppStateChange(currentAppState) { 
    console.log(currentAppState); 
} 

मैं निम्नलिखित के साथ एडब्ल्यूएस एसएनएस का उपयोग कर एक पुश सूचना भेज रहा हूँ

मेरे didReceiveRemoteNotification समारोह इस तरह दिखता है संदेश:

{ 
"APNS_SANDBOX":"{\"aps\":{\"content-available\":\"1\"}}" 
} 

यहां एक्सकोड से लॉग है:

2016-04-20 10:38:01.255 [info][tid:com.facebook.React.JavaScript] inactive 
2016-04-20 10:38:01.986 [info][tid:com.facebook.React.JavaScript] background 
2016-04-20 10:38:17.279 test[4056:1383261] didReceiveRemoteNotification 
2016-04-20 10:38:17.284 [info][tid:com.facebook.React.JavaScript] notification recieved 
2016-04-20 10:44:56.330 test[4056:1383261] didReceiveRemoteNotification 
2016-04-20 10:44:56.332 [info][tid:com.facebook.React.JavaScript] notification recieved 
2016-04-20 10:46:07.091 test[4056:1383261] didReceiveRemoteNotification 
2016-04-20 10:49:30.039 [info][tid:com.facebook.React.JavaScript] notification recieved 
2016-04-20 10:49:30.639 [info][tid:com.facebook.React.JavaScript] active 

इस लॉग में, 3 पुश अधिसूचनाएं भेजी गईं। 10:38 और 10:44 को प्राप्त किए गए दोनों को जावास्क्रिप्ट सही ढंग से कहा जाता है। हालांकि, 10:46 पर प्राप्त एक व्यक्ति ने जावास्क्रिप्ट में हैंडलर को तब तक नहीं बुलाया जब तक कि मैंने 10:49 पर ऐप खोला नहीं।

क्या कुछ भी है जो मैं यह सुनिश्चित करने के लिए कर सकता हूं कि मेरे रिएक्ट नेटिव कोड पर कॉल ऐप नहीं चल रहा है?

उत्तर

5

अधिसूचनाओं के लिए पृष्ठभूमि में अपने ऐप को हिट करने के लिए आपको नीचे लाने वाले हैंडलर फ़ंक्शन के साथ एक fetchCompletionHandler को परिभाषित करने की आवश्यकता है। aps:{content-available:1} पेलोड आपको एप्लिकेशन को जगाएगा और इस कोड को आपके ऐपडिलेगेट में ट्रिगर करेगा, और बदले में आरएन में अपनी जावास्क्रिप्ट को हिट करेगा।

// fetch notifications in the background and foreground 
-(void)application:(UIApplication *)application didReceiveRemoteNotification:(NSDictionary *)notification 
fetchCompletionHandler:(void (^)(UIBackgroundFetchResult))completionHandler { 

[RCTPushNotificationManager didReceiveRemoteNotification:notification]; 
completionHandler(UIBackgroundFetchResultNewData); 
NSLog(@"Notification Body %@", notification); 

} 
+0

ग्रेट, ऐसा लगता है कि यह हल हो गया है! – DownChapel

संबंधित मुद्दे