ぺぷしのーげん

アプリケーションエンジニアによる雑記ブログ

SwiftでGmail APIを利用する方法 / Gmail API iOS Quickstart

f:id:hazakurakeita:20150826201350j:plain

ぱくたそ - フリー写真素材・無料ダウンロード

訳あってGmailのメールを監視して動作するアプリを作ることになりました。そこでGmailのメール取得方法について調べてみたのですが、ちょうど昨年Gmail APIが公開されていました。とりあえず認証画面の実装までできたので、SwiftでGmail APIを使ったログイン認証画面実装までをまとめます。

 

Gmail APIの認証画面実装までの説明ページ

Googleさん素晴らしいです。ものすごく丁寧に説明してくれています。ただし英語で。日本語サイトはありませんし、どうもまだ日本人でやってる人も少ないみたいです。ブログどころか知恵袋すらググっても出てきません。もしかしたら、ここが上位で検索される日が来るかもですねー笑。

iOS Quickstart  |  Gmail API  |  Google Developers

 しょうがないので、ここを見ながら設定しました。この記事はここの翻訳みたいになるので皆さんに有用となれば幸いです。

 

SwiftでGmail APIを使用する前提条件

  • Xcodeのバージョンが6.3以上
  • Subversionが使用できる
  • インターネットとウェブブラウザが使用できる
  • Googleアカウントを所持しており、Gmailが使用できる

最初の条件以外はMacなら問題ないですね笑。これをクリアするのは簡単でしょう。

 

 Gmail APIを有効化する

 まずAPIを利用するためにプロジェクトを作成します。

f:id:hazakurakeita:20150826224423p:plain

次にOAuth同意画面にメールアドレスとAPIを使用するサービス名を記入します。記入が終わったら保存ボタンを押します。

f:id:hazakurakeita:20150826225112p:plain

認証情報のタブメニューから認証情報追加をクリックします。そこに出てくるメニューからOAuth2.0クライアントIDを選択します。

f:id:hazakurakeita:20150826225321p:plain

 するとAPIを使用するアプリケーションの種類を尋ねられます。ここでは、「その他」を選択してください。先ほど紹介したGoogleのページでも赤字で「その他」を選択するように強調されています。(じゃあいつiOSを選択するんだ!?笑)

f:id:hazakurakeita:20150826225559p:plain

すると、クライアントIDとシークレットコードが表示されるのでメモしておきましょう。まあ、メモしなくても後で確認することもできます。これでGmail APIの有効化は完了です。

 

 Googleクライアントライブラリをダウンロードする

続いて、SwiftのXcodeプロジェクトに埋め込むライブラリをダウンロードしましょう。ダウンロードはSubversionを使用して行います。え?なにそれ?ってなっても大丈夫です。ターミナルを起動して、以下の内容をコピペしてEnterを押すだけです。

svn checkout http://google-api-objectivec-client.googlecode.com/svn/trunk/ google-api-objectivec-client

 僕は英語でダウンロードについてどうするか聞かれたので、ターミナルにpを打って、更にEnterを打ちました。そこからは自動でダウンロードが始まります。

 

Xcodeのプロジェクトを準備する

さて、いよいよGmailの認証画面を入れ込みます。Xcodeを起動してください。そしてSingle View Applicationでプロジェクトを作成します。作成したらFinderを起動して、ダウンロードしたライブラリのディレクトリを開いてください。僕は下記の順でたどっていったらライブラリのディレクトリを開くことができました。

Maxhinetosh HD > ユーザ > あなたのユーザ名 > google-api-objectivec-client > Source

このディレクトリを開いたらGTL.xcodeprojというファイルがあることを確認してください。これを先ほど作成したXcodeプロジェクトにドラッグアンドドロップします。

f:id:hazakurakeita:20150826231057p:plain

英語ではXcodeプロジェクトにドラッグアンドドロップしろとしか書いてありません汗。とりあえずやりましたが、これで良いのかな?

f:id:hazakurakeita:20150826231249p:plain

ドラッグアンドドロップしたら、作成したプロジェクトのBuild Phasesを開いてください。ちなみに上画像でいうと、Mailcallフォルダを選択すればBuild Phasesが出てきます。ここのLink Binary with Librariesを開いて、左のツリーからlibGTLTouchStaticLib.aをドラッグアンドドロップしてください。続いて、+ボタンをクリックして、Security.frameworkSystemConfiguration.frameworkを追加してください。

次にタブメニューからBuild Settingsを選択します。その中にあるLinkingを開いて、Other Linker Flagsを開きます。そこに-ObjC -all_loadと入力してください。

f:id:hazakurakeita:20150826232138p:plain

 続けて、今度はSearch Paths内のUser headers search pathを開いてください。そこには下記のように入力します。

/Users/あなたのユーザ名/google-api-objectivec-client/Source/**

最後の「**」を忘れないように気を付けてください。僕はこれで最後にビルドエラーになり30分ほどロスしました。英語だとよく分からなかったんですよねー笑。もしも別の場所にダウンロードしたり移動させた場合は、その場所を入力してくださいね。

疲れてきましたが、あと少しです。次にライブラリのSource/OAuth2/TouchフォルダにあるGTMOAuth2ViewTouch.xibを、プロジェクトの左のツリーにあるSupporting Filesフォルダにドラッグアンドドロップします。そして今度は、Source/Services/Gmail/Generatedの中にあるGTLGmail.hGTLGmail_Sources.mをドラッグアンドドロップします。この2つはアプリ名のフォルダ内で良いかと思います。今回でいうとMailcallフォルダ内となります。このときにBridging-Header.hを自動で作成するかどうか聞かれますので、作成するようにしてください。

最後に、タブメニューのBuild SettingsからSwift Compiler - Code Generationを開きます。そこには下記のようにパスが書かれているはずです。書かれていない場合は自動作成できていないので、アプリ名-Bridging-Header.hを作成してそのパスを入力してください。

アプリ名/アプリ名-Bridging-Header.h

 続いてこのファイルを開いて下記の2行を追加してください。

#import "GTMOAuth2ViewControllerTouch.h"
#import "GTLGmail.h"

これでプロジェクトの準備は全て終了です。

 

 サンプルコードを実装する

最初に紹介した説明ページにサンプルコードがあるので、コピーしてください。そして、そのままViewController.swiftに上書きします。

iOS Quickstart  |  Gmail API  |  Google Developers

そして、コード冒頭に書いてあるYOUR_CLIENT_ID_HEREに最初に取得したクライアントIDを、YOUR_CLIENT_SECRET_HEREをシークレットコードに書き換えます。これで実行すると認証画面の表示の完成です。

f:id:hazakurakeita:20150826235112p:plain

とりあえずここまで無事できました。とりあえず今日はここまで!また色々分かったらブログに書きまーす。

 

追記2016/2/8

Xcodeのバージョンが6.3以降のまま更新ありませんね。お蔭さまでSwift2.0以降ではこのAPIは動きません。少なくとも2015年の10月ではコンパイルエラーで完全お手上げ。今は動くようになっているのでしょうか?

hazakurakeita.hatenablog.com