Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

GTLServiceDrive's -executeQuery:completionHandler: never calls completion handler if in airplane mode #57

Open
GoogleCodeExporter opened this issue Jun 10, 2015 · 1 comment

Comments

@GoogleCodeExporter
Copy link

What steps will reproduce the problem?

1. Set iPhone to Airplane Mode (in Settings App)

2. Start my app, which executes the following code:
    // In cAppDelegate's application:didFinishLaunchingWithOptions:
    [GMSServices provideAPIKey:@"myAPIKeyHere"];

3. Tap an upload button to upload a file to Google Drive, which executes these:
    // Load Google authentication from keychain.
    GTMOAuth2Authentication* googleAuthentication = [GTMOAuth2ViewControllerTouch authForGoogleFromKeychainForName:@"KeychainNameForGoogleHere" clientID:@"myClientID" clientSecret:@"myClientSecret"];
    // googleAuthentication.canAuthorize is YES after this line. My Google account authentication was saved in keychain beforehand.

    // Init Google Drive service.
    GTLServiceDrive* googleDriveService = [[GTLServiceDrive alloc] init];
    googleDriveService.authorizer = googleAuthentication;

    // Upload to Google Drive.
    GTLDriveFile* googleDriveFile = [GTLDriveFile object];
    googleDriveFile.title = @"FileTitle";
    googleDriveFile.mimeType = @"MimeType";

    GTLUploadParameters* uploadParameters = [GTLUploadParameters uploadParametersWithData:FileData MIMEType:googleDriveFile.mimeType];  // FileData is the pre-filled file data.
    GTLQueryDrive* queryDrive = [GTLQueryDrive queryForFilesInsertWithObject:googleDriveFile uploadParameters:uploadParameters];

    GTLServiceTicket* serviceTicket = [googleDriveService executeQuery:queryDrive completionHandler:^(GTLServiceTicket *ticket, GTLDriveFile *insertedFile, NSError *error) {
        // If failed...
        if(error)
        {
            // Handle error.
            return;
        }

        // Handle success.
    }];
    if(!serviceTicket)
    {
        return; // This line is not executed. I checked with the debugger and serviceTicket is indeed not nil.
    }

    [serviceTicket setUploadProgressBlock:^(GTLServiceTicket *ticket, unsigned long long totalBytesWritten, unsigned long long totalBytesExpectedToWrite) {
        // Handle progress.
    }];

4. Both the progress block and the completion handler is never called.

The interesting thing is that, if I now turn off Airplane mode, go back to my 
app, and tap the upload button again, it uploads successfully. And if I now 
turn on Airplane mode once again, go back to my app, and tap the upload button 
again, this time, it will call the completion handler with an NSError saying 
"The Internet connection appears to be offline.".

--------------------------------------------------------------------------------
----------------------------------------

What is the expected output? What do you see instead?

I expect the completion handler to be called when my phone is in Airplane mode.

--------------------------------------------------------------------------------
----------------------------------------

What version of the product are you using? On what operating system?

- Xcode 5.0.2 + Mac OS X 10.9.1
- iPhone 5 + iOS 7.0.4
- Google APIs Client Library for Objective-C, revision 379, from 
http://code.google.com/p/google-api-objectivec-client/

--------------------------------------------------------------------------------
----------------------------------------

Please provide any additional information below.

I also tried enabling logging, as instructed here:
http://code.google.com/p/google-api-objectivec-client/wiki/Introduction#Logging_
HTTP_Server_Traffic
but the line [GTMHTTPFetcher setLoggingEnabled:YES] won't compile.

I then added STRIP_GTM_FETCH_LOGGING=0 to my project setting but it won't 
compile either.

I changed it to STRIP_GTM_FETCH_LOGGING=1 and then it compiles, but I don't 
know where the log went. Anyway, STRIP_GTM_FETCH_LOGGING=1 doesn't seem to make 
sense here, but the line "+ (void)setLoggingEnabled:(BOOL)flag;" in 
GTMHTTPFetcher.h is surrounded by #if STRIP_GTM_FETCH_LOGGING, so I don't know.

Original issue reported on code.google.com by [email protected] on 1 Jan 2014 at 10:05

@GoogleCodeExporter
Copy link
Author

Oops. Sorry. That "[GMSServices provideAPIKey:@"myAPIKeyHere"];" line was 
unrelated.


Anyway, I've put up a sample project that can reproduce the exact problem (see 
attachment).

The project is created like this:
* In Xcode, create new project (File -> New -> Project -> Single View 
Application).
* Checkout Google APIs Client Library for Objective-C, with this command:
    svn checkout http://google-api-objectivec-client.googlecode.com/svn/trunk/ google-api-objectivec-client-read-only
* Configure Xcode project to add Google library to project.
* Add buttons in storyboard, and add corresponding code.

Original comment by [email protected] on 4 Jan 2014 at 3:36

Attachments:

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

1 participant