2014年02月19日

[iOS] iPhoneからYouTubeにAPI(Objective-C)を使ってアップロードする

iPhoneからYouTubeに動画をアップロードしたいと思って色々調べました。
理想としては、こんな感じににゅっとメニューが登場して動画を共有できるようにしたかった。

Screenshot 2014.02.19 18.15.48.png

これを実現する方法は「UIDocumentInteractionController」「UIActivityViewController」っぽい。

試した結果……。

@UIDocumentInteractionController
 ⇒Instagramへの投稿例は多く見つけたけど、動画を共有する方法を見つけられませんでした。
   self.interactionController.UTI でYouTubeが無いから?
【参考】http://qiita.com/blurrednote/items/1ef256e87d4bb9960b37

AUIActivityViewController
 ⇒UIKIT_EXTERN の中に YouTube がないため実現できず
【参考】http://www.toyship.org/archives/959

@Aのとおり、にゅっと出るメニューでの実現方法について見つけることができませんでした。
もし@Aについて、どなたか知っていれば教えてください orz

残る方法として、YouTube API(v3)を使うというものでした。

BYouTube API(Objective-C)
 ⇒メニューまわりは自前になってしまう
 ⇒Google Cloud Consoleに登録してYouTube APIを用意する必要がある
 と手間があるのですが、これで上手くいきました。

今回はBの話です。

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

手順です。

@Google Cloud Consoleに登録して、YouTube API(v3) for Objective-C をダウンロード
AYouTube Direct Lite for iOS のサンプルをダウンロード
BAのサンプルを開き、YouTube APIへのリンクを登録
Cサンプルを実行して、動画をYouTubeにアップロード


それぞれを詳しく見ていきます。

@Google Cloud Consoleに登録して、YouTube API(v3) for Objective-C をダウンロード

Google Cloud Consoleにアクセスします
アプリを登録します↓

スクリーンショット 2014-02-19 19.07.57.png

プロジェクト名は英数字指定でした。プロジェクトIDは自動で付けられます↓

スクリーンショット 2014-02-19 19.09.56.png


左メニューの APIと認証 > API を選択して、必要なAPIを有効にします。
・Drive API ← 後述のYouTube Direct Liteで必要
・Google+ API ← YouTube API で必要
・YouTube Data API ← YouTube API で必要

スクリーンショット 2014-02-19 19.13.15.png

【参考】
https://hutcraft.jp/?p=196
https://developers.google.com/console/help/new/#installedapplications

左メニューの APIと認証 > 認証情報 > 新しいクライアントIDを作成 選択して、OAuthの設定をします↓

スクリーンショット 2014-02-19 19.27.15.png

「インストールされているアプリケーション」「iOS」「ディープリンク:無効」を選んでから
「クライアントIDを作成」を押します↓

スクリーンショット 2014-02-19 20.08.20.png

画面が戻ると、
・クライアントID
・クライアントシークレット
が表示されるので、実装のときに使うのでメモしておきます。

Google Cloud Console での作業は以上です。
次はYouTube APIをダウンロードします。

YouTube Data API (v3):
https://developers.google.com/youtube/v3/?hl=ja

ここに説明が色々ありますが、
API のダウンロードについてはここで説明があります↓

https://code.google.com/p/google-api-objectivec-client/source/checkout

svnを使うので、Macのコンソールを起動して、
上記サイトに記載されているsvnコマンドを実行します。

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

コマンドを実行したディレクトリに「google-api-objectivec-client-read-only」という名前でAPIとサンプルが保存されます。
サンプルは
Examples > YouTubeSample > YouTubeSample.xcodeproj
にあるのですが、これは「MacOS」用でした。
あと、ビルドエラーが出て実行できませんでした orz

サンプルはこちらのURLからも確認できます↓

サンプル:
https://code.google.com/p/google-api-objectivec-client/source/browse/#svn/trunk/Examples/YouTubeSample

iOS用のXcodeプロジェクトはないものかと探していたら、「YouTube Direct Lite for iOS」というものを
発見しました。

AYouTube Direct Lite for iOS のサンプルをダウンロード

YouTube Direct Lite for iOS の使い方はこのサイトに記載されています↓

YouTube Direct Lite for iOS:
https://github.com/youtube/yt-direct-lite-iOS

サンプルをは、このサイトの画面右にある「Download Zip」ボタンを押してダウンロードします↓

スクリーンショット 2014-02-19 20.52.11.png

解凍すると「yt-direct-lite-iOS-master」というディレクトリができます。
「yt-direct-lite-iOS-master」の中にあるXcodeプロジェクトが、iOSに対応したものでした。

ここで大切なのが、先ほどのYouTube APIと同じ階層に保存することです。

この2つのディレクトリは同じ階層に置く↓
・google-api-objectivec-client-read-only ← YouTube API
・yt-direct-lite-iOS-master ← YouTube Direct Lite for iOS

理由は、サンプルからYoutube APIへのリンクを設定しているからです↓

スクリーンショット 2014-02-19 20.57.16.png

BAのサンプルを開き、YouTube APIへのリンクを登録

Aの最後で既にAPIへのリンクが設定されているので、特に作業は必要ないのですが、
次に自分のアプリでYouTube APIを使うときの参考になりました。

Cサンプルを実行して、動画をYouTubeにアップロード

BのXcodeプロジェクトで、設定して完成です。

Utils.h 内にて、@でメモした「クライアントID」「クライアントシークレット」を書き換えます。
static NSString *const kClientID   ← クライアントID
static NSString *const kClientSecret ← クライアントシークレット

XcodeのIdentifierを Google Cloud Consoleで設定した「Bundle Identifier」に合わせます。
Bundle Identifierの変更の仕方は下記の通りです↓

Xcode5でBundle Identifierとプロジェクト名を同時に変更する:
http://blog.be-style.jpn.com/article/87567553.html

これで準備が整いました。
ビルドして実行すると、iPhoneで実行できました。

実行すると、こんなことができます。

・認証画面(二重認証にも対応)
・YouTubeのライブラリ一覧
・動画撮影
・撮影した動画のYouTubeへのアップロード

YouTubeのライブラリ一覧↓

Screenshot 2014.02.19 21.16.03.png

YouTubeにアップロードが成功した画面↓

Screenshot 2014.02.19 21.17.46.png

これでiPhoneからYouTubeへの動画アップロードができました。
次は、自分のアプリに流用することです。

なかなかiPhoneからYouTubeへのアップロード方法が見つからなかったので、解決してよかったです。

最後にハマったことを残しておきます。

■ハマったこと
@認証処理のところで、「invalid_client」が出て認証されない
【原因1】Google Cloud Console で、Google+ API 、YouTube Data API が有効になっていない
【原因2】Google Cloud Console で、以前使っていたプロジェクトを使い回したらダメでした。
     新しくプロジェクトを作ったところうまくいきました。 ※これでハマりました orz

【参考】
http://stackoverflow.com/questions/15702336/how-do-i-use-the-youtube-api-gtlyoutube-to-search-for-a-video-on-iphone-sdk
http://stackoverflow.com/questions/11043840/getting-invalid-client-error-in-sample-gdata-objectivec-client
posted by be-style at 21:26| Comment(0) | iOS
この記事へのコメント
コメントを書く
お名前:

メールアドレス:

ホームページアドレス:

コメント: [必須入力]

※ブログオーナーが承認したコメントのみ表示されます。