Android、Java、Web系、Linux、マラソン等の備忘録

2012/10/12

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

0 件のコメント

環境

経緯など

昨年くらいに、一度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()にとのこと。

0 件のコメント :

コメントを投稿