質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

Q&A

解決済

2回答

2467閲覧

iOSでGoogleDrive

atagon

総合スコア10

Objective-C

Objective-Cはオブジェクト指向型のプログラミング言語のひとつです。C言語をベースにSmalltalkが取り入れられています。

Google API

Googleは多種多様なAPIを提供していて、その多くはウェブ開発者向けのAPIです。それらのAPIは消費者に人気なGoogleのサービス(Google Maps, Google Earth, AdSense, Adwords, Google Apps,YouTube等)に基づいています。

iOS

iOSとは、Apple製のスマートフォンであるiPhoneやタブレット端末のiPadに搭載しているオペレーションシステム(OS)です。その他にもiPod touch・Apple TVにも搭載されています。

0グッド

0クリップ

投稿2017/06/11 02:12

###前提・実現したいこと
Objective-Cで、GoogleDriveへファイルをアップロードする処理を書きました。

環境:
XCode8.3
Deployment Target 9.0
Base SDK 10.3

podの設定
platform :ios, '9.0'
pod 'GoogleAPIClientForREST/Drive', '> 1.2.1'
pod 'Google/SignIn', '
> 3.0.3'

Googleへのログインは成功したのですが、GoogleDriveへのファイルアップロード処理で、Domain=com.google.HTTPStatus Code=401 "(null)" 、エラーが発生しました。

###発生している問題・エラーメッセージ

Error Domain=com.google.HTTPStatus Code=401 "(null)" UserInfo={data=<7b226572 726f7222 3a7b2265 72726f72 73223a5b 7b22646f 6d61696e 223a2267 6c6f6261 6c222c22 72656173 6f6e223a 22726571 75697265 64222c22 6d657373 61676522 3a224c6f 67696e20 52657175 69726564 222c226c 6f636174 696f6e54 79706522 3a226865 61646572 222c226c 6f636174 696f6e22 3a224175 74686f72 697a6174 696f6e22 7d5d2c22 636f6465 223a3430 312c226d 65737361 6765223a 224c6f67 696e2052 65717569 72656422 7d7d>}

###該当のソースコード

Objective

1.h 2#import <UIKit/UIKit.h> 3#import "GTLRDrive.h" 4#import <Google/SignIn.h> 5 6@interface BackupViewController2 : UIViewController <GIDSignInDelegate, GIDSignInUIDelegate> 7@property (nonatomic, strong) GTLRDriveService *service; 8@end 9 10 11.m 12- (void)signIn:(GIDSignIn *)signIn 13didSignInForUser:(GIDGoogleUser *)user 14 withError:(NSError *)error { 15 if (error == nil) { 16 [self showAlert:@"Error" message:@"失敗"]; 17 self.service.authorizer = nil; 18 } else { 19 self.service.authorizer = user.authentication.fetcherAuthorizer; 20 self.service.APIKey = @"AIzaSyA-lLo_iZuhoYJSkVVNIaZmBMCLkCF_30k"; 21 22 NSData * fileContent = [@"ahcnuefewfewfsnjcdsjc" dataUsingEncoding:NSUTF8StringEncoding]; 23 GTLRUploadParameters * uploadParameters = [GTLRUploadParameters uploadParametersWithData:fileContent MIMEType:@"text/plain"]; 24 GTLRDrive_File * driveFile = [GTLRDrive_File new]; 25 driveFile.name = @"First blood.txt"; 26 27 GTLRDriveQuery_FilesCreate * query = [GTLRDriveQuery_FilesCreate queryWithObject:driveFile uploadParameters:uploadParameters]; 28 query.fields = @"981300619618-5qrr859q2dm9f04nfq24cg2d6cvtb8dq.apps.googleusercontent.com"; 29 30 [self.service executeQuery:query completionHandler:^(GTLRServiceTicket * _Nonnull callbackTicket, id _Nullable object, NSError * _Nullable callbackError) { 31 32 if (!callbackError) { 33 NSLog(@"---upLoad File Success---"); 34 } 35 else{ 36 NSLog(@"---upLoad File fail---"); 37 } 38 }]; 39 } 40}

###試したこと
完全に新規プロジェクトを作って試してみたり、APIKeyを変えてみたりしましたが、GoogleDriveへのアクセスのハンドラー内で
NSLog(@"---upLoad File fail---");
に来てしまいます。

###補足情報(言語/FW/ツール等のバージョンなど)
MacOS 10.3 Sierra

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

自己解決

  • (void)signIn:(GIDSignIn *)signIn

didSignInForUser:(GIDGoogleUser *)user
withError:(NSError *)error
の部分が、

if (error == nil) {
// 失敗
} else {
// 成功
}

ではなく、
if (error != nil) {
// 失敗
} else {
// 成功
}

でした。。失礼いたしました。
無事、GoogleDriveにアップロードできました。

投稿2017/06/12 04:55

atagon

総合スコア10

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

0

Google Driveの開発者サイトに、Objective-Cのサンプルがあったと思いますが試されましたでしょうか。
確か何箇所かチュートリアルにそって各自で用意した値に書き換える必要があったと思いますが、そちらで用意した値が正しいか確認してみてはいかがでしょうか。

401エラーなので基本的には認証エラーだと思います。
UserInfoの値が何が書かれているかを確認してみるの何か分かるかもしれません。

投稿2017/06/12 00:15

YasuhiroMiyake

総合スコア1336

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

atagon

2017/06/12 04:53

GoogleDriveのサンプルは試していたので、もう一度、気持ちを新たに、ソースやクライアントIDを見直して、凡ミスに気が付きました。。。 認証後のハンドラーで、 if (error == nil) { // 失敗 } else { // 成功 } としていましたが、 error != nil でした。。お恥ずかしい。 ご指摘によって、頭の切り替えが走って解決しました。 ありがとうございました。
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問