iphone - आईओएस 6 फेसबुक पोस्टिंग प्रक्रिया "remote_app_id संग्रहित आईडी से मेल नहीं खाती" त्रुटि के साथ समाप्त होती है




objective-c facebook (2)

लेखा फ्रेमवर्क और फेसबुक एकीकरण के साथ काम करते समय मैंने कुछ कठिनाइयों का भी अनुभव किया। यहां मैंने जो सीखा है और मैं इसे कैसे काम कर रहा हूं।

1. सुनिश्चित करें कि आपने फेसबुक पर अपना ऐप सही तरीके से सेट किया है
आपको यह निर्धारित करने की ज़रूरत है कि आपका ऐप फेसबुक के साथ मूल आईओएस ऐप में कैसे एकीकृत होता है और निर्दिष्ट ऐप में अपनी ऐप की बंडल आईडी दर्ज करता है। (संपादित करें: ध्यान दें कि बंडल आईडी केस संवेदनशील हैं) आप अब आईट्यून आईडी को 0 पर सेट कर सकते हैं। फेसबुक लॉगिन सक्षम करें और ऐप टाइप को उन्नत सेटिंग्स टैब में मूल / डेस्कटॉप पर सेट करें
क्लाइंट में ऐप सीक्रेट को भी सेट करें।

यदि इनमें से एक या अधिक विकल्पों को सही तरीके से सेट नहीं किया गया है, तो संभव है कि आपको त्रुटि मिल जाए, The Facebook server could not fulfill this access request: remote_app_id does not match stored id

(संपादित करें: आपको यह भी सुनिश्चित करना होगा कि सैंडबॉक्स अक्षम है।)

2. पहली बार फेसबुक ऐप इंस्टॉल करना
जब पहली बार आईओएस (और मैक ओएस एक्स) पर मूल फेसबुक एकीकरण के माध्यम से ऐप इंस्टॉल करते हैं, तो आपको केवल मूल पढ़ने की अनुमति मांगनी होगी! email , user_birthday और user_location रूप में और कुछ भी अनुमति नहीं है। user_about_me का उपयोग करना, जो कि फेसबुक प्रलेखन के अनुसार मूलभूत पढ़ने की अनुमति भी है, काम नहीं करता है। यह बहुत भ्रमित है अगर आपने पहले फेसबुक जावास्क्रिप्ट एसडीके या फेसबुक पीएचपी एसडीके के साथ काम किया था, क्योंकि यह आपको कुछ करने के बिना डिफ़ॉल्ट रूप से बुनियादी अनुमतियों के लिए पूछता है। फेसबुक ने आईओएस 6 पर नए फेसबुक एसडीके का उपयोग करने के तरीके पर एक लघु चरण-दर-चरण मार्गदर्शिका के साथ अपने दस्तावेज़ों को भी अपडेट किया।

3. अतिरिक्त अनुमतियों का अनुरोध
यह जानना महत्वपूर्ण है कि आप एक ही समय में पढ़ने और अनुमतियों को लिखने के लिए नहीं कह सकते हैं। यह भी कुछ अनुभवी फेसबुक एसडीके डेवलपर्स भ्रमित हो सकता है। read_stream अनुमति के साथ publish_stream अनुमति का अनुरोध करने से अनुरोध विफल हो जाएगा, जिसके परिणामस्वरूप त्रुटि हो सकती है एक ऐप एक ही समय में पढ़ने और अनुमतियों को पढ़ने के लिए नहीं हो सकता है

चूंकि फेसबुक वास्तव में अनुमति संदर्भ में पढ़ने / लिखने की अनुमतियों के बीच अंतर नहीं करता है, इसलिए आपको स्वयं द्वारा लेखन अनुमतियों की पहचान करनी होगी। वे आमतौर पर manage_* , publish_* , create_* या *_management द्वारा प्रत्यय के साथ *_management

फेसबुक बुनियादी अनुमतियों के तुरंत बाद अतिरिक्त अनुमतियों के लिए पूछने की भी सिफारिश नहीं करता है। documentation कहता है, "अब आपको अनुमति को अलग से पढ़ने और प्रकाशित करने की आवश्यकता है (और उस क्रम में)। अधिकतर, ऐप शुरू होने पर उपयोगकर्ता निजीकरण के लिए पढ़ने की अनुमति का अनुरोध करेगा और उपयोगकर्ता पहले लॉग इन करेगा। बाद में, यदि उपयुक्त हो, तो जब ऐप फेसबुक पर डेटा पोस्ट करना चाहता है तो ऐप प्रकाशित अनुमतियों का अनुरोध कर सकता है। [...] दो प्रकार के लिए अलग-अलग पूछना भी संभावनाओं को बेहतर बनाता है कि उपयोगकर्ता प्रकाशित अनुमतियां प्रदान करेंगे, क्योंकि आपका ऐप केवल उस समय की तलाश करेगा जब उसे इसकी आवश्यकता होगी उन्हें, सबसे अधिक संभावना है जब उपयोगकर्ता के पास एक मजबूत इरादा है। "

4. नमूना कोड
निम्नलिखित नमूना कोड आईओएस और मैक ओएस एक्स पर काम करना चाहिए:

ACAccountType * facebookAccountType = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];

// At first, we only ask for the basic read permission
NSArray * permissions = @[@"email"];

NSMutableDictionary *dict = [[NSMutableDictionary alloc] initWithObjectsAndKeys:@"My app id here", ACFacebookAppIdKey, permissions, ACFacebookPermissionsKey, ACFacebookAudienceOnlyMe, ACFacebookAudienceKey, nil];

[self.accountStore requestAccessToAccountsWithType:facebookAccountType options:dict completion:^(BOOL granted, NSError *error) {
    if (granted && error == nil) {
        /** 
        * The user granted us the basic read permission.
        * Now we can ask for more permissions
        **/
        NSArray *readPermissions = @[@"read_stream", @"read_friendlists"];
        [dict setObject:readPermissions forKey: ACFacebookPermissionsKey];

        [self.accountStore requestAccessToAccountsWithType:facebookAccountType options:dict completion:^(BOOL granted, NSError *error) {
            if(granted && error == nil) {
                /**
                * We now should have some read permission
                * Now we may ask for write permissions or
                    * do something else.
                **/
            } else {
                NSLog(@"error is: %@",[error description]);
            }
        }];
    } else {
        NSLog(@"error is: %@",[error description]);
    }
}];

मैं एक साधारण पोस्टिंग प्रक्रिया करने की कोशिश कर रहा हूं:

- (IBAction)directPostClick:(id)sender {
    self.statusLabel.text = @"Waiting for authorization...";
    if (self.accountStore == nil) {
        self.accountStore = [[ACAccountStore alloc] init];
    }   
    ACAccountType * facebookAccountType = [self.accountStore accountTypeWithAccountTypeIdentifier:ACAccountTypeIdentifierFacebook];
    NSArray * permissions = @[@"publish_stream", @"user_checkins", @"publish_checkins", @"user_likes", @"user_videos"];
    NSDictionary * dict = @{ACFacebookAppIdKey : @"My app id here", ACFacebookPermissionsKey : permissions, ACFacebookAudienceKey : ACFacebookAudienceOnlyMe};
    [self.accountStore requestAccessToAccountsWithType:facebookAccountType options:dict completion:^(BOOL granted, NSError *error) {
        __block NSString * statusText = nil;
        if (granted) {
            statusText = @"Logged in";
            NSArray * accounts = [self.accountStore accountsWithAccountType:facebookAccountType];
            self.facebookAccount = [accounts lastObject];
            NSLog(@"account is: %@", self.facebookAccount);
            self.statusLabel.text = statusText;
            [self postToFeed];
        }
        else {
            self.statusLabel.text = @"Login failed";
            NSLog(@"error is: %@", error);
        }
    }];
} 

संपादित किया गया: समस्या यह है कि जब मैं सतर्क दृश्य के ठीक बटन पर क्लिक करता हूं (अनुमति न दें तो काम नहीं करता) कुछ नहीं होता! - यह व्यवहार अब आईओएस 6 फेसबुक पोस्टिंग प्रक्रिया के साथ बदल गया है "remote_app_id संग्रहित आईडी से मेल नहीं खाता है" तो बस "कुछ नहीं होता" के बजाय मुझे एक त्रुटि मिली है "फेसबुक सर्वर इस एक्सेस अनुरोध को पूरा नहीं कर सका: remote_app_id करता है संग्रहित आईडी से मेल नहीं खाता "

तो, ऐसा लगता है कि अलर्ट व्यू के क्लिक हैंडलर कुछ भी नहीं कर रहे हैं, मेरा पूरा होना हैडलर कभी नहीं कहा जाता है। मेरे पास पहले से ही इसी तरह की समस्या है: आईओएस 6 सामाजिक एकीकरण - सेटिंग्स के मुद्दे पर जाएं और मुझे लगता है कि यह वही समस्या है। तुम लोगों को इसके बारे में क्या सोचते हैं? पीएस मैं मैक मिनी, ओएस एक्स 10.8.1 पर नवीनतम एक्सकोड 4.5 (4 जी 182) और आईफोन 6.0 सिम्युलेटर का उपयोग कर रहा हूं।

जोड़ा गया: Bjorn के अनुरोध से postToFeed विधि जोड़ना हालांकि इसे कभी नहीं कहा जाता है:

- (void)postToFeed {
    NSDictionary * parameters = @{@"message" : @"Hello world!"};
    NSURL * feedUrl = [NSURL URLWithString:@"https://graph.facebook.com/me/feed"];
    SLRequest * request = [SLRequest requestForServiceType:SLServiceTypeFacebook requestMethod:SLRequestMethodPOST URL:feedUrl parameters:parameters];
    request.account = self.facebookAccount;
    [request performRequestWithHandler:^(NSData *responseData, NSHTTPURLResponse *urlResponse, NSError *error) {
        dispatch_async(dispatch_get_main_queue(), ^{
            self.statusLabel.text = @"Posted!";
        });
    }];
}

सुनिश्चित करें कि यदि आप गैर डेवलपर उपयोगकर्ताओं के लिए आवेदन से फेसबुक खाते तक पहुंचने का प्रयास कर रहे हैं तो sandbox mode सक्रिय नहीं है।





facebook