8

मैंने Google क्लाउड मैसेजिंग से फायरबेस क्लाउड मैसेजिंग में फिर से स्विच किया।फायरबेस क्लाउड मैसेजिंग विकास और रिलीज प्रोफाइल

जीसीएम के साथ मुझे सैंडबॉक्स विकल्प चुनना पड़ा। के रूप में यहाँ वर्णित: https://developers.google.com/cloud-messaging/ios/client#obtain_a_registration_token बिंदु 3.

डिबग मोड में पुश सूचनाएं प्राप्त करने के लिए देख मैं इस

[[GGLInstanceID sharedInstance] startWithConfig:instanceIDConfig]; 
_registrationOptions = @{kGGLInstanceIDRegisterAPNSOption:deviceToken, 
         kGGLInstanceIDAPNSServerTypeSandboxOption:@YES}; 

की तरह कुछ करने के लिए AppStore से एक App में पुश सूचनाएं प्राप्त करने के लिए (TestFlight जैसे) था मैं था कहने के लिए:

kGGLInstanceIDAPNSServerTypeSandboxOption:@NO}; 

अब मुझे फ़ायरबेस में ऐसा कुछ नहीं मिल रहा है। सबसे पहले मैंने सोचा कि अब इन बेवकूफ मूल्यों को स्विच नहीं कर रहा है। लेकिन अब मुझे अपने टेस्टफ्लाइट ऐप्स में अब कोई पुश नोटिफिकेशन नहीं मिला है।

मेरी डिबग कंसोल में जब मैं डिवाइस एक उत्पादन पर डिबग इस तरह है:

<FIRInstanceID/WARNING> APNS Environment in profile: development 

कौन सा TestFlight में स्थानीय डिबगिंग के लिए अच्छा है, लेकिन अवांछित है। (मुझे नहीं पता कि यह टेस्टफ्लाइट ऐप्स के लिए होता है, क्योंकि मेरे पास उनके लिए कंसोल नहीं है।)

तो मेरा सवाल है: क्या किसी को पता है कि क्या मैं फ़ायरबेस में मैन्युअल रूप से इस सैंडबॉक्स विकल्प को बदल सकता हूं?

धन्यवाद,

साइमन

उत्तर

9

मैंने परियोजना में नीचे दिए गए कोड को जोड़कर समस्या हल की।

हालांकि TestFlight,
और FIRInstanceIDAPNSTokenType.Prod अपने ऐप के ऐप स्टोर पर सीधा प्रसारण होता है जब आप एप्लिकेशन इंस्टॉल FIRInstanceIDAPNSTokenType.Sandbox इस्तेमाल किया जाएगा।

func application(application: UIApplication, didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) 
{ 
    FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.Sandbox) 
    FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.Prod) 
} 
1

मैं उपलब्ध किए गए दस्तावेज़ पीछा किया और एक ही मुद्दा हो रही थी, तो मैं जल्दी शुरू एप्लिकेशन की कोशिश की और यह काम किया। कुंजी टोकन प्राप्त करने के बाद एफसीएम से कनेक्ट करने के लिए तर्क जोड़ने के लिए प्रतीत होता है, यह चरण सेटअप दस्तावेज़ में अनुपलब्ध है। ऐसा करने के बाद यह किसी भी अन्य विशेष सैंडबॉक्स स्विच के बिना टेस्टफलाइट के बाहर मेरे विकास उपकरण पर काम करता था।

https://github.com/firebase/quickstart-ios/blob/master/messaging/FCM/AppDelegate.m#L85

// [START refresh_token] 
- (void)tokenRefreshNotification:(NSNotification *)notification { 
    // Note that this callback will be fired everytime a new token is generated, including the first 
    // time. So if you need to retrieve the token as soon as it is available this is where that 
    // should be done. 
    NSString *refreshedToken = [[FIRInstanceID instanceID] token]; 
    NSLog(@"InstanceID token: %@", refreshedToken); 

    // Connect to FCM since connection may have failed when attempted before having a token. 
    [self connectToFcm]; 

    // TODO: If necessary send token to appliation server. 
} 
// [END refresh_token] 

// [START connect_to_fcm] 
- (void)connectToFcm { 
    [[FIRMessaging messaging] connectWithCompletion:^(NSError * _Nullable error) { 
    if (error != nil) { 
     NSLog(@"Unable to connect to FCM. %@", error); 
    } else { 
     NSLog(@"Connected to FCM."); 
    } 
    }]; 
} 
// [END connect_to_fcm] 

- (void)applicationDidBecomeActive:(UIApplication *)application { 
    [self connectToFcm]; 
} 

// [START disconnect_from_fcm] 
- (void)applicationDidEnterBackground:(UIApplication *)application { 
    [[FIRMessaging messaging] disconnect]; 
    NSLog(@"Disconnected from FCM"); 
} 
// [END disconnect_from_fcm] 
1

यह setAPNSToken() समारोह के बारे में है। डिवाइस टोकन जोड़ने के दौरान आपको FIRInstanceIDAPNSTokenTypeProd पर सेट करने की आवश्यकता है।

func application(application: UIApplication, 
       didRegisterForRemoteNotificationsWithDeviceToken deviceToken: NSData) 
{ 
    FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: FIRInstanceIDAPNSTokenType.Prod) 
} 

भी अगर आप सिर्फ चेतावनी निकालना चाहते हैं, तो आप एक उत्पादन प्रावधान प्रोफ़ाइल का उपयोग हो सकता है: मुझे लगता है कि के लिए तेजी से उपयोग करते हैं, कोड मैं प्रयोग किया जाता है।

1

सुरक्षित रहें, नीचे का उपयोग करें:

#if DEBUG 
     FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: .sandbox) 
    #else 
     FIRInstanceID.instanceID().setAPNSToken(deviceToken, type: .prod) 
    #endif 

अनावश्यक रूप और प्रकार ठेस सैंडबॉक्स टोकन सेट ठीक इसके विपरीत है।

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