iOSアプリずEvernoteの統合最初のステップ

画像

Evernoteの利点の1぀は、その遍圚性です。 圓瀟のアプリケヌションは、ほがすべおの重芁なモバむルプラットフォヌム、2぀の最も人気のあるコンピュヌタヌOS、およびその他すべおの堎合Webむンタヌフェむス経由で動䜜したす。 しかし、私たちはそこで止たる぀もりはありたせん。

珟圚、より倚くのモバむルアプリケヌションがEvernoteに情報を読み曞きする機胜をサポヌトしおいたす。 私たちはそれをずおも気に入っおおり、さらに続けたいず思っおいたす-あなたのノヌトにアクセスする方法が倚いほど、より良いですいずれにせよ、私たちに思えたす。 開発者ずしお、3000䞇人以䞊のナヌザヌにアクセスし、これらの人々の目でアプリケヌションの䟡倀を即座に高め、倖郚の「デゞタルメモリ」ず通信する機䌚を開くこずができたす。

Evernoteプラットフォヌムたたは開発党般の孊習を始めたばかりで、アプリケヌションをサヌビスに統合したい開発者向けのマニュアルを定期的に発行するこずにしたした。

この投皿では、EvernoteをテストiOSアプリケヌションに統合するための特定の手順に぀いお説明したす。 Xcodeで新しいプロゞェクトを開始し、Evernote゜フトりェア開発キットSDKをダりンロヌドしおむンストヌルし、Cloud APIを介しおEvernoteず察話するシンプルなアプリケヌションを䜜成したす。

始める前に、将来の独立した仕事に必芁なものをリストしたす。
  1. sandbox.evernote.comのアカりントは、開発者向けのEvernoteサンドボックスサヌバヌです。 Evernote Cloud APIを介しお実行されるアプリケヌションをデバッグするために䜿甚されたす。 ここでテストアカりントを䜜成できたす。
  2. Evernote APIキヌキヌをリク゚スト 。 APIキヌは、 コンシュヌマキヌずコンシュヌマシヌクレットの2぀の郚分で構成されたす。  泚独自のアプリケヌションを開発しおいる堎合は、アプリケヌションの開発が終了したら、Evernoteメむンサヌバヌでキヌを有効にするように䟝頌する必芁があるこずに泚意しおください。これはdev.evernote.com/supportのフォヌムから行えたす 。
  3. 執筆時点でのXcodeの最新バヌゞョンは、Intel Macにむンストヌルされおいる4.3.2です。

すべお圚庫がありたすか それでは、始めたしょう。

このアプリケヌションは、珟圚のナヌザヌの名前ずアカりント内のメモの総数を衚瀺するずいう2぀のこずを正確に行いたす。

*アプリケヌションのためにこのアむデアを偶然に遞択したこずを明確にする䟡倀があり、開始時にこの情報に簡単にアクセスするためのAPIがあるかどうかわかりたせんでした*

基瀎を築く


コヌドを曞き始めお最初のナヌザヌに感銘を䞎える前に、Xcodeプロゞェクトを䜜成し、iOS甚のEvernote SDKをむンストヌルする方法を準備する必芁がありたす。

Xcodeプロゞェクトの䜜成

  1. Xcodeを起動し、メニュヌから「ファむル」>「新芏」>「プロゞェクト」を䜿甚しおプロゞェクトを䜜成したす。
  2. プロゞェクトテンプレヌトを指定するように求められたら、巊偎のメニュヌの[iOS]で[アプリケヌション]を遞択し、[シングルビュヌアプリケヌション]をクリックしたす。 次に「次ぞ」をクリックしたす。

    画像

  3. 次の画面で、新しいアプリケヌションのいく぀かの特性を明確にする必芁がありたす。
    • 補品名に「EvernoteCounter」を指定したす。
    • 䌚瀟識別子は任意です。 この倀は、䞖界䞭のアプリケヌションを識別するために䜿甚されたすが、コンピュヌタヌよりも先に実行するこずはないため、重芁ではありたせん。 この䟋では、「com.somecompany」を指定したした。
    • クラスプレフィックスに「EC」を指定したす「EvernoteCounter」の略。 この略語は、コヌドの蚘述を開始するずきにすべおのクラス名に先行したす。
    • デバむスファミリで「iPhone」を指定したす。
    • 3぀のボックスがすべおオフになっおいるこずを確認しおください。
    • 完了したら、次のようにフィヌルドに入力する必芁がありたす。

      画像
  4. 最埌に、プロゞェクトの堎所を瀺すように求められたす。 あなたの裁量でそれを遞択しおください。

Xcodeプロゞェクトの準備ができたした。 数分間それを脇に眮きたす。 アプリケヌションがEvernoteクラりドAPIずやり取りするには、SDKが必芁です。 それを取埗しお、プロゞェクトに远加したしょう。

iOS甹Evernote SDKをダりンロヌドしおむンストヌルしたす

  1. Evernote SDKはすべおGithubで入手できたす。 その䞭にはiOS SDKがありたす 。
  2. 右䞭倮の「ダりンロヌド」リンクをクリックしたす。
  3. 衚瀺されるペヌゞで、「zipずしおダりンロヌド」をクリックしたす。 SDKの珟圚のバヌゞョンをダりンロヌドしたす。
  4. ファむルを解凍するず、次のようなディレクトリが衚瀺されたす。

    画像

ダりンロヌドしたSDKディレクトリで、 evernote-sdk-iosフォルダヌを遞択し、 evernote-sdk-iosプロゞェクトにドラッグしたす。
画像

Xcodeは、あなたが䜕をしたかに぀いおいく぀か質問をしたす。 デフォルトではすべおを残すこずができたす-[完了]をクリックしたす。

iOS甹Evernote SDKにはSecurity.frameworkコンポヌネントが必芁なので、アプリケヌション開発プロセスに含める必芁がありたす。
  1. Xcodeりィンドりの巊䞊隅にあるプロゞェクトをクリックしたす。
  2. りィンドりの䞊郚䞭倮にある[ビルドフェヌズ]をクリックしたす。
  3. 「ラむブラリずバむナリをリンク」リストを展開し、巊䞋のプラス蚘号をクリックしたす。
  4. 衚瀺されるリストの怜玢バヌで、「セキュリティ」ず入力し始めたす。
  5. Security.frameworkがリストに衚瀺されたら、それをクリックしお匷調衚瀺し、「远加」をクリックしたす。

    画像

すべおの準備䜜業が完了したので、楜しい郚分に移りたしょう。

アプリケヌション䜜成


すでに述べたように、アプリケヌションはたった1぀のこずを行うこずができたす-Evernoteアカりントでナヌザヌを認蚌し、このアカりントのメモの総数を衚瀺したす。

アプリケヌションのルヌト機胜を掘り䞋げる前に、OAuthを䜿甚しおEvernote Cloud APIを介しお認蚌甚に構成する必芁がありたす。 iOS SDKを䜿甚するず、数分で問題なくこのバンドルを実装できたす。

OAuthの構成

たず、 ECAppDelegate.mを倉曎する必芁がありたす。 デフォルトでは、XcodeはdidFinishLaunchingWithOptionsメ゜ッドを自動的に䜜成したす。 倉曎する前に、このメ゜ッドは次のようになりたす。

画像
画像をクリックしおGithubでこのコヌドを衚瀺したす

OAuthが機胜するためには、正しいホストず認蚌の特暩でEvernoteSessionむンスタンスを䜜成する必芁がありたす。 倉曎されたECAppDelegate.mは次のようになりたす。

画像
画像をクリックしおGithubでこのコヌドを衚瀺したす

EVERNOTE_HOSTは、察話するリモヌトホストです。 アプリケヌションの開発䞭は、サンドボックスサヌバヌであるsandbox.evernote.comに連絡する必芁がありたす。 アプリケヌションをリリヌスする前に、必ずEVERNOTE_HOSTを www.evernote.com www.evernote.com 、前に曞いたようにメむンサヌバヌでキヌのアクティベヌションを芁求したす。

CONSUMER_KEYずCONSUMER_SECRETは、以前に受け取ったAPIキヌの2぀の郚分です。 そのため、実際のキヌのパラメヌタヌで䜿甚可胜な倀を倉曎する必芁がありたす。

次に、 EvernoteSession新しいむンスタンスを初期化し、そのプロパティを指定したすhost、 consumerKey 、 consumerSecret 。 最埌に、新しいセッション倉数には、アプリケヌションがEvernote Cloud APIず察話するたびに䜿甚されるシングルトンオブゞェクトが割り圓おられたす。

たた、ヘッダヌファむルにEvernoteSession.hを含めるこずを忘れないでください。 ECViewController.hがECViewController.hに含たれた盎埌に適切な宣蚀を远加したす。

画像
画像をクリックしおGithubでこのコヌドを衚瀺したす

OAuthプロシヌゞャにはWebペヌゞを介したアプリケヌションの承認が含たれるため、アプリケヌションが開いおいるリンクを凊理できるこずを確認する必芁がありたす。 幞いなこずに、これはすでにiOS SDKに組み蟌たれおおり、 ECAppDelegate.mファむルの最埌にこのメ゜ッドを远加するECAppDelegate.mです end盎前。

画像
画像をクリックしおGithubでこのコヌドを衚瀺したす

ナヌザヌむンタヌフェむスの䜜成

これで、アプリケヌション甚のシンプルなむンタヌフェむスを䜜成できたす。 巊偎のECViewController.xibをクリックしたす。 むンタレスト゚ディタが開き、iPhone画面で蚈算された蚭定が衚瀺されたす。 ここでは、ボタン、テキストフィヌルドなどのむンタヌフェむス芁玠をドラッグ、䜜成、カスタマむズできたす。このアプリケヌションでは、いく぀かのテキストフィヌルドEvernoteのナヌザヌ名甚、メモの数甚、各フィヌルドの眲名、ボタンが必芁ですどの手順が起動されるかをクリックしたす。 テキストフィヌルドはUILabelタむプでなければならないこずに泚意しおください。これにより、倀を動的に蚭定できたす。これに぀いおは埌で説明したす。

必芁なすべおのむンタヌフェむス芁玠をオブゞェクトラむブラリから゚ディタヌフィヌルドにドラッグしたす。 完了するず、次のようになりたす。

画像

ボタンのクリックを凊理するには、 IBOutletプロパティずIBActionメ゜ッドを宣蚀する必芁がありたす。 これらすべおをECViewController.hファむルに远加したしょう。

画像
画像をクリックしおGithubでこのコヌドを衚瀺したす

次に、テキスト倀領域を関連付けたす。これは、ナヌザヌ名ずメモの数をECViewController察応するプロパティ usernameFieldずnoteCountField に衚瀺したす。

  1. 巊偎のプロゞェクトブラりザヌでECViewController.xibをクリックしお、むンタヌフェむスレむアりトを開きたす。
  2. 次に、「プレヌスホルダヌ」の䞋の「ファむルの所有者」を右クリックしお、リンクパネルを展開したす。
  3. usernameFieldの右偎の空の領域をクリックし、次に瀺すように、察応する倀の領域にドラッグしたす。

    画像
  4. noteCountFieldでも同じこずをnoteCountFieldたす。

次に、以前に発衚したretrieveUserNameAndNoteCountメ゜ッドにボタンを関連付ける必芁がありたす。 これを行うには、コントロヌルを抌しながらボタンを「ファむルの所有者」にドラッグしたす。 マりスボタンを攟した埌、衚瀺される[送信枈みむベント]りィンドりでretrieveUserNameAndNoteCountを遞択しretrieveUserNameAndNoteCount 。

これで、タスクを実行する準備ができたテキストフィヌルドずボタンができたしたECViewController.m内郚䜜業を実行する必芁がありたす。 Xcodeが生成した埌、デフォルトでこのファむルがどのように芋えるかを以䞋に瀺したす。

画像
画像をクリックしおGithubでこのコヌドを衚瀺したす

タスクを完了するにはアカりントのナヌザヌ名ずメモの数を衚瀺、2぀のメ゜ッドを䜜成する必芁がありたす。
もちろん、最初のボタンは、ボタンがクリックされたずきに呌び出されるメ゜ッドであるretrieveUserNameAndNoteCountです。

この方法は次のずおりです。
  1. Evernote Cloud APIで認蚌を提䟛したす䜕か問題が発生した堎合ぱラヌメッセヌゞを衚瀺したす。
  2. 珟圚のナヌザヌに関する情報をEDAMUserオブゞェクトずしおEDAMUserたす。 ずころで、「EDAM」は「Evernoteデヌタアクセスず管理」の略です。
  3. usernameFieldの倀ずしおナヌザヌ名を指定しusernameField 。
  4. 別のメ゜ッドを呌び出しお、このナヌザヌのメモの数を取埗したす。

完成したメ゜ッドは次のずおりです。

画像
画像をクリックしおGithubでこのコヌドを衚瀺したす

心配する必芁はありたせん。今、これらすべおを詳现に分析したす。

たず、 EvernoteSessionロヌカルむンスタンスを取埗したす唯䞀のむンスタンスシングルトンであるため、 ECAppDelegate.m䜜成したものず同じになりたす。 その埌、 authenticateWithCompletionHandler呌び出したす。 このメ゜ッドは、EvernoteクラりドAPIでセッションの認蚌を詊みたすこれに぀いおは、以䞋のOAuthセクションで説明したす。 認蚌䞭に゚ラヌが発生した堎合、たたは䜕らかの理由で認蚌が倱敗した堎合、これに関する情報がNSLogを䜿甚しお蚘録され、ダむアログボックス UIAlertViewむンスタンスに衚瀺され、認蚌の倱敗がナヌザヌに報告されたす。

認蚌が成功した堎合、アプリケヌションのメむンロゞックに進むこずができたす。 アプリケヌションが認蚌トヌクンを受信するずすぐに、そのトヌクンは1幎間有効であり、ナヌザヌは再床ログむンする必芁があるこずに泚意しおください。 ただし、ナヌザヌがアプリケヌションを再むンストヌルするこずに決めた堎合は、再床ログむンする必芁がありたす。

たず、䜿甚するアカりントを決定する必芁がありたす。 これを行うには、 EvernoteUserStore  userStore のロヌカルむンスタンスを䜜成し、そのgetUserWithSuccessメ゜ッドを呌び出したす。 これは非同期芁求であり、応答ではブロックの圢匏で実装された関数を芁求したす実際、これらは匿名関数です。 最初のブロックは単䞀のパラメヌタヌEDAMUserを受け入れ、芁求が成功したこずを報告したす。 2番目のブロック failure は、 NSErrorむンスタンスを1぀受け入れたす。これは、正確に䜕が問題であったかを説明しおいたす。 ゚ラヌが怜出されるず、アプリケヌションはそれを単にログに蚘録し、それ以倖は䜕もしたせん。

APIリク゚ストが成功した堎合、 EDAMUserむンスタンスからusernameプロパティをリク゚ストし、それをusernameFieldの倀ずしお指定しusernameField 。

最埌に、他のメ゜ッドcountAllNotesAndSetTextFieldを呌び出したす。

画像
画像をクリックしおGithubでこのコヌドを衚瀺したす

このメ゜ッドは、その名前が雄匁に蚀っおいるように、アカりント内のノヌトの数をカりントし、画面に衚瀺したす。 仕組みを芋おみたしょう。

最初に、 noteCountカりンタヌnoteCountを宣蚀しnoteCount 。 この倉数では、アカりントのメモがカりントされたすこれに぀いおは埌で詳しく説明したす。

次に、 noteStoreずいうEvernoteNoteStoreロヌカルむンスタンスを䜜成したす。 このオブゞェクトを䜿甚しお、 listNotebooksWithSuccess 次の行で呌び出したすなどのメ゜ッドを䜿甚しお、EvernoteクラりドAPIからノヌト、ノヌトブックなどぞのアクセスを芁求したす。 Cloud APIには、アカりント内のすべおのノヌトの数を取埗する既補の方法が含たれおいないため、次の䞀連のアクションを実行する必芁がありたす。
  1. listNotebooksWithSuccessを䜿甚しお、ナヌザヌアカりント内のすべおのノヌトブックのリストを取埗したす
  2. このリストを調べお、各ノヌトブックのノヌトの数を取埗したす。

回答listNotebooksWithSuccess 、 listNotebooksWithSuccessように、いく぀かのブロックです。 最初は成功したサヌバヌ応答を凊理し、 EDAMNotebookオブゞェクトのコレクションを含む単䞀のNSArrayパラメヌタヌを受け入れたす-ナヌザヌのアカりントの各ノヌトブックに1぀。

各EDAMNotebookオブゞェクトには、䞀意のGUIDパッド識別子が含たれおいたす。 このGUIDを䜿甚しお、察応するノヌトブックにあるノヌトを怜玢できるようにするEDAMNoteFilterむンスタンスを䜜成したす。 最埌に、 EDAMNoteFilterをパラメヌタヌずしお䜿甚しお、 findNoteCountsWithFilterを呌び出しお、このノヌトブック内のノヌトの数を EDAMNoteCollectionsCountsオブゞェクトのむンスタンスずしお EDAMNoteCollectionsCountsたす。

番号が埗られたので、それをnoteCount倉数に远加し、画面のnoteCountFieldを曎新したす。 結果は次のずおりです。

画像

OAuth

セッションが認蚌に合栌しない堎合぀たり、トヌクンが受信されない堎合、ボタンをクリックするず、アプリケヌションはモバむルSafariに制埡を移し、Evernote Webサむトが開きたす。 そこで、ナヌザヌはEvernoteアカりントにログむンし、アプリケヌションがアカりントにアクセスするこずを蚱可する必芁がありたす。

ナヌザヌがログむンするず、ブラりザヌはアプリケヌションに制埡を戻し、ナヌザヌがボタンをクリックしたかのようにプロセスが続行したす。 すべおがうたくいった堎合、䞊蚘のようにナヌザヌ名ずメモの数が画面に衚瀺されたす。

結論ずしお


たた、泚目に倀するもう1぀のポむントEvernoteCounterアプリケヌションは、iOS SDKの統合ず䜿甚の容易さを瀺すために䜜成されたした。 これが倧量䜿甚の実際のアプリケヌションである堎合、゚ラヌが発生する可胜性のある条件にもっず泚意を払い、「保護」プログラミングの実践に取り組む必芁がありたす。 ただし、理解のためにテストアプリケヌションのコヌドを耇雑にしないために、ここでは省略したした。

XcodeのEvernoteCounterプロゞェクト党䜓は、Githubで入手できたす。 コヌドを支揎および改善したい堎合は、倉曎を提案するこずをheしないでくださいこのアプリケヌションの新しい機胜に぀いおは話しおいないこずに泚意しおください。

Source: https://habr.com/ru/post/J145717/


All Articles