calendar - IOS से Google कैलेंडर में ईवेंट जोड़ें




google-calendar (3)

मैंने Google कैलेंडर से ईवेंट लाने के लिए ट्यूटोरियल का पालन किया है जो ठीक काम कर रहा है। https://developers.google.com/google-apps/calendar/quickstart/ios

अब मैं अपने आईओएस एप से सम्मिलित होने की घटना में फंस गया हूं ताकि इसे वेब के साथ भी समन्वित किया जा सके। कृपया मुझे सही दिशा में निर्देशित करें या कुछ नमूना कोड पोस्ट करें।

मैं viewDidLoad में प्राधिकरण के लिए इस कोड का उपयोग कर रहा हूं

// Initialize the Google Calendar API service & load existing credentials from the keychain if available.
self.service = [[GTLServiceCalendar alloc] init];
self.service.authorizer =
[GTMOAuth2ViewControllerTouch authForGoogleFromKeychainForName:kKeychainItemName
                                                      clientID:kClientID
                                                  clientSecret:kClientSecret];

प्राधिकरण ठीक लगता है क्योंकि फ़ेच ईवेंट पूरी तरह ठीक काम कर रहा है। लेकिन मैं एक इवेंट जोड़ने के लिए निम्नलिखित कोड का उपयोग कर रहा हूं I

- (void)addAnEvent {
    // Make a new event, and show it to the user to edit
    GTLCalendarEvent *newEvent = [GTLCalendarEvent object];
    newEvent.summary = @"Sample Added Event";
    newEvent.descriptionProperty = @"Description of sample added event";

    // We'll set the start time to now, and the end time to an hour from now,
    // with a reminder 10 minutes before
    NSDate *anHourFromNow = [NSDate dateWithTimeIntervalSinceNow:60*60];
    GTLDateTime *startDateTime = [GTLDateTime dateTimeWithDate:[NSDate date]
                                                  timeZone:[NSTimeZone systemTimeZone]];
    GTLDateTime *endDateTime = [GTLDateTime dateTimeWithDate:anHourFromNow
                                                timeZone:[NSTimeZone systemTimeZone]];

    newEvent.start = [GTLCalendarEventDateTime object];
    newEvent.start.dateTime = startDateTime;

    newEvent.end = [GTLCalendarEventDateTime object];
    newEvent.end.dateTime = endDateTime;

    GTLCalendarEventReminder *reminder = [GTLCalendarEventReminder object];
    reminder.minutes = [NSNumber numberWithInteger:10];
    reminder.method = @"email";

    newEvent.reminders = [GTLCalendarEventReminders object];
    newEvent.reminders.overrides = [NSArray arrayWithObject:reminder];
    newEvent.reminders.useDefault = [NSNumber numberWithBool:NO];

    [self addEvent:newEvent];
}


- (void)addEvent:(GTLCalendarEvent *)event {
    GTLQueryCalendar *query = [GTLQueryCalendar queryForEventsInsertWithObject:event
                                                                calendarId:@"primary"];
    [self.service executeQuery:query
                  delegate:self
         didFinishSelector:@selector(displayAddEventResultWithTicket:finishedWithObject:error:)];
}

- (void)displayAddEventResultWithTicket:(GTLServiceTicket *)ticket
                 finishedWithObject:(GTLCalendarEvents *)events
                              error:(NSError *)error {
    if (error == nil) {
        NSLog(@"I think event has been added successfully!");

    } else {
        NSLog(@"ERROR : %@", error.localizedDescription);
    }
}

लेकिन मुझे जवाब में त्रुटि मिल रही है "ऑपरेशन पूरा नहीं किया जा सका। (अपर्याप्त अनुमति)"

धन्यवाद,


Answers

मैंने यह काम करने में कामयाबी हासिल की है। समस्या आपकी सेवा लेखक में है

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

मैंने हर बार अद्यतित सेवा प्रमाणीकरण को पुनः प्राप्त करने के लिए एक फ़ंक्शन बनाया है I

कोशिश करो।

चीयर्स।

-(GTLServiceCalendar *) updateAuthService{

    GTLServiceCalendar *service = [GTLServiceCalendar new];

    GTMOAuth2Authentication *auth = [[GTMOAuth2Authentication alloc] init];

    [auth setClientID:kClientID];
    [auth setClientSecret:kClientSecret];
    [auth setUserEmail:[GIDSignIn sharedInstance].currentUser.profile.email];
    [auth setUserID:[GIDSignIn sharedInstance].currentUser.userID];
    [auth setAccessToken:[GIDSignIn sharedInstance].currentUser.authentication.accessToken];
    [auth setRefreshToken:[GIDSignIn sharedInstance].currentUser.authentication.refreshToken];
    [auth setExpirationDate: [GIDSignIn sharedInstance].currentUser.authentication.accessTokenExpirationDate];

    service.authorizer = auth;

    return service;

}

कैलेंडर को निम्नलिखित विधि का उपयोग करने के लिए ईवेंट जोड़ने के लिए

[GTLQueryCalendar queryForEventsInsertWithObject:yourEventObject calendarId:yourCalendarId]

यह भी ध्यान दें, आपको पढ़ने / लिखने के लिए स्कोप केजीटीलाथस्स्कोप कैलेंडर के साथ अधिकृत करना होगा।


जैसा कि कई लोगों ने इंगित किया है, जावा में Calendar और Date कक्षाओं द्वारा लौटाए गए महीनों को 1 के बजाय 0 से अनुक्रमित किया गया है। तो 0 जनवरी है, और वर्तमान माह, नवंबर, 10 है।

आपको आश्चर्य हो सकता है कि यह मामला क्यों है। उत्पत्ति POSIX मानक फ़ंक्शंस ctime , gmtime और localtime , जो निम्नलिखित फ़ील्ड ( मैन 3 सीटाइम से ) के साथ time_t संरचना को स्वीकार या वापस कर देती है :

int tm_mday;    /* day of month (1 - 31) */
int tm_mon;     /* month of year (0 - 11) */
int tm_year;    /* year - 1900 */

इस एपीआई को जावा 1.0 में जावा डेट क्लास में बिल्कुल काफी कॉपी किया गया था, और वहां से ज्यादातर जावा 1.1 में कैलेंडर क्लास में बरकरार है। जब उन्होंने कैलेंडर पेश किया तो सूर्य ने सबसे चमकदार समस्या तय की - तथ्य यह है कि ग्रेगोरियन कैलेंडर में वर्ष 2001 को उनके दिनांक वर्ग में मूल्य 101 द्वारा दर्शाया गया था। लेकिन मुझे यकीन नहीं है कि उन्होंने दिन और महीने के मूल्यों को कम से कम क्यों नहीं बदला है, दोनों कम से कम दोनों को इंडेक्सिंग में, या तो शून्य या एक से संगत होना चाहिए। यह असंगतता और संबंधित भ्रम अभी भी जावा (और सी) में मौजूद है।







ios calendar google-calendar