スキップしてメイン コンテンツに移動

Evernote SDK for AndroidのサンプルのOAuthで躓く

環境

経緯など

昨年くらいに、一度WebアプリケーションとかJavaの環境でEvernote連携を試してみようとして、API Keyを発行してノートの一覧やノートの投稿などやったくらいに触った事あったんですけど、今回Androidで連携してみようと久々に触りました。

Androidでは、以下の2種類の方法でEvernoteのリソースへアクセスできるようです。
  • Intents
  • クラウドAPI
これはPattern Calendarアプリの時も、Googleカレンダーで両方使えたんですけどIntentsで実装しました。IntentsはSQLite感覚で使えて楽なんですけど、その分端末内の同期を待たないといけないというデメリットもあり、今回はクラウドAPIを利用してみます。


以前はEvernoteの開発者ページは英語だったような記憶をしていますが、日本語が充実しているのと、わかりやすいデザインになってますね。


問題:APIキーが古かった

去年発行したAPIキーを控えてたのと、APIキー発行に数日かかった記憶があるので、それを使いました。
・evernote/evernote-sdk-android
https://github.com/evernote/evernote-sdk-android
上記に従い、CONSUMER_KEY、CONSUMER_SECRETにAPIキーを設定し、AndroidManifest.xmlのdata android:schemeの項目に、en-(コンシューマーキー)を設定して、いざサンプルアプリ起動!

Sign in to Evernoteというボタンのみ活性化されているので、押下するとブラウザが起動します。そこに、sandbox用のユーザ名とパスワード(これも去年取得)したものを入力すると、ブラウザ版のsandbox Evernoteが表示されログインに成功できました!

??

あれ、アプリは??という事でアプリはほったらかしにされて、何も変化がありません。エラーも出ないので、何が問題かわかりません。と、ググってたら、
・muo-notes: Evernote APIを使ったAndroidアプリを作る(1)
http://www.muo.jp/2012/04/evernote-apiandroid1.html
同じような経緯の人を見つけました!どうやらAPIキーが古かったっぽい...
また数日またされるのかな、と思いながらAPIキーを発行したら、すぐに発行してくれました。


しかも、「開発されるアプリケーション毎に」と書いてあるので、気軽に発行すれば良いようです。このキーでCONSUMER_KEY、CONSUMER_SECRETとAndroidManifest.xmlを修正して、再度アプリを起動!

そうしたら、挙動が変ったので、やっぱりキーが古かったんだなと思いましたが、まだ認証が完了してないようでした。

問題:AndroidManifest.xmlの記述が間違ってた


さきほど入手したAPIキーで、挙動が変ったのですが、やっぱりアプリに返ってこない。

画像はVirtualBoxで動かしてるAndroid 4.0.3ですが、上記環境でも同様


もうこれ以上、どうにも手を加える所はないよと思っていたのですが、どうもこの症状に関してはAndroidManifest.xmlが問題だという書き方ばかりでした。

・Evernote Authentication Callback Problem · Issue #8 · evernote/evernote-sdk-android
https://github.com/evernote/evernote-sdk-android/issues/8

・OAuth 2.0を使うソーシャルなAndroidアプリの作り方 (2/3) - @IT
http://www.atmarkit.co.jp/fsmart/articles/androidmixi/02.htmlAndroid端末上で発生したこのURLへの遷移(暗黙的なIntent)を、アプリケーションで受信するには、「AndroidManifest.xml」にIntent Filterを記述します。URLを受け取る<activity>タグの要素として次のような<intent-filter>タグを記述します。


そんなはずないだろうと思っていたら、APIキーの"_"と"-"を間違えており、これを見落とす凡ミスをしてました。ここを修正するとログイン後の遷移がアプリへ行くようになり、


非活性ボタンも活性化されました(;^_^A



追記:2012/10/20

Android 2.1の実機上の認証でException

ブラウザで「承認する」ボタンを押下して以下のExceptionが発生

Uncaught handler: thread main exiting due to uncaught exception
java.lang.NoSuchMethodError: android.content.SharedPreferences$Editor.apply
     at com.evernote.client.oauth.android.EvernoteSession.completeAuthentication(EvernoteSession.java:230)
     at net.takaiwa.tokoroten.MainActivity.onResume(MainActivity.java:97)
     at android.app.Instrumentation.callActivityOnResume(Instrumentation.java:1149)
     at android.app.Activity.performResume(Activity.java:3768)
     at android.app.ActivityThread.performResumeActivity(ActivityThread.java:2944)
     at android.app.ActivityThread.handleResumeActivity(ActivityThread.java:2972)
     at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1896)
     at android.os.Handler.dispatchMessage(Handler.java:99)
     at android.os.Looper.loop(Looper.java:123)
     at android.app.ActivityThread.main(ActivityThread.java:4370)
     at java.lang.reflect.Method.invokeNative(Native Method)
     at java.lang.reflect.Method.invoke(Method.java:521)
     at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:850)
     at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:608)
     at dalvik.system.NativeStart.main(Native Method)


ググってみたらあったけど、3日前くらいに回答が付いてる....
・Not found method - Evernote for Developers - Evernote User Forum
http://discussion.evernote.com/topic/30472-not-found-method/
AndroidのAPI Level9以上じゃないとこのExceptionが出るとのこと。次回のアップデートに修正が盛り込まれるようで、今は自分で修正するか待つしかないようです。
ちなみに、Level9より下の場合Editor.apply()の部分を.commit()にとのこと。

コメント

このブログの人気の投稿

Javaでprivateなfieldやmethodにアクセスする

JUnitでテストしてると、privateなフィールドにアクセスして、値を参照したりセットしたりしたくなるわけですが、よく使うのでメモしておきます。 例えば、次のような対象のクラスがあるとします。 public class ParentClass { private String hoge = "ParentClass!!"; public void dispMsg() { System.out.println("dispMsg:" + hoge); } private void privateDispMsg(String msg) { System.out.println("dispMsg:" + msg); } }

GolangでWindows GUIアプリケーション

GUIアプリ作成の前提 社内ツールとしてexeで配布 開発環境はGoLandを使う 社内ツールとしてexeを配布ということであれば、Visual StudioでC#による開発だと思います。しかしながら、Go言語を習得したいのと、GoLandの補完機能が便利で、Android Studio使っていたこともあり、とっつきやすいという点からGo縛りでGUIアプリケーションを考えたいと思います。 lxn/walk Windows application library kit for Go. Windows向けしか考えていないので、まずこのライブラリなのですが、ボタンやコンボボックスが思ったように並ばなかったり、手軽にイメージボタンを配置したりなど、簡単にレイアウトを変更できない課題に直面しました。レイアウト作成だけで時間を取られてしまいます。そう言えば、Androidアプリ開発のときは、XMLでデザイン部分を切り離してたのを思い出して、今回の調査の運びとなりました。 fyne-io/fyne Cross platform native GUIs designed for Go based on Material Design. Supports: Linux, macOS, Windows, BSD, iOS and Android. walkと比べると、クロスプラットフォームで作成できるのですが、こちらもコードの中にデザインを書いていく形でした。 therecipe/qt therecipe/qt allows you to write Qt applications entirely in Go or JavaScript. Qt Creatorなるものがあるようで、デザイン部分を切り離せる印象はあるものの、最新のPCでもビルドに時間がかかるようで、学習コストもかかるという記事を見かけて断念しました。 どうしたものかとツイートしましたら、下記のようにご助言をいただいた。 同じ課題に対し色々試した結果、PWAのフルキャッシュドに落ち着いた。中身はGo+WASMで。 https://t.co/e60whDTV16 — のぼのぼ📡 (@nobonobo) July 21, 2020 PWA 早速調べてみました。Googleが進めているプロジェクトで、ネイティブアプリのよ

Eclipseの高速化メモ

Eclipseが重いと一言に言っても、いろいろな工程での話があると思いますが、過去記事のなども含めてこの記事にピックアップしておきたいと思います。以下はWindows環境での話です。