2010-12-12 13 views
5

私はすべてのビジネスを行い、すべての手順を実行しましたが、それでも動作させることはできません。 Facebook SDKに付属しているシンプルなサンプルアプリケーションは、エミュレータとAndroid 1.5搭載デバイスで動作しています。 私の推測はシングルログインのものです。Android用Facebook SDK - アプリケーションの例は動作しません

私が正しいなら、私は、キーハッシュを生成する必要があり、私は

Cの下で右デバッグキーストアが配置されていることを言われてきた:\ Users \ユーザーxxx.android \ debug.keystore

だから私はチュートリアルに従った。

google.codeからOpenSSLをダウンロードし、端末に私が何か書く:

"C:\プログラムファイル\のJava \ jdk1.6.0_22 \ビン\のkeytool.exeが使用" -exportcert -alias をandroiddebugkey -keystore "C:\ Users \ JoeZ.android \ debug.keystore" | "C:\ Users \ xxx \ Downloads \ openssl-0.9.8k_X64 \ bin \ openssl.exe" sha1 - バイナリ| "C: \ Users \ xxx \ Downloads \ openssl-0.9.8k_X64 \ bin \ openssl.exe "base64

と私はinse facebookのAndroid Key Hashボックスに入ってしまったので、出力後に=記号を付けても使わなくても試しましたが、何も動かないようです。

Exampleアプリケーションにサインインしようとするとinvalid_keyが表示されます。 私は署名されたアプリケーションを試してみましたが、動作しませんでした。 私が誤解していない場合、Exampleアプリケーションで記述する唯一のものは自分のAPP_IDです。

私が開発している自分のアプリケーションに全く同じ問題があります。だから誰でも私を助けることができますか?

答えて

15

keytoolコマンドがうまく動作しない場合、私はそのことを回避する方法を見つけました。あなたは、Facebook DeveloperセクションのKey Hashとしてどのキーをリバースエンジニアリングすることができます。あなたの活動の中で、キーハッシュを印刷するだけで、次のことができます:

try { 
    PackageInfo info = getPackageManager().getPackageInfo("[your package name, e.g. com.yourcompany.yourapp]", PackageManager.GET_SIGNATURES); 
    for (Signature signature : info.signatures) { 
     MessageDigest md = MessageDigest.getInstance("SHA"); 
     md.update(signature.toByteArray()); 
     Log.d("Hash Key:", Base64.encode(md.digest())); 
    } 
} catch (NameNotFoundException e) { 

} catch (NoSuchAlgorithmException e) { 

} 

これは私の仕事です。 MessageDigestクラスはJDKに含まれています。 Base64クラスではありません。たとえば、this oneを使用できます。

+0

私のアプリで魅力的に動作します:-) +1 –

+1

これは私にとっては役に立ちません。 Base64.encode(md.digest()))の引数(byte [])にBase64型のメソッドencode(ByteBuffer、ByteBuffer)が適用されません。それを見て、encodeBytesに変更しなければならなかった – easycheese

+0

これは私にとって素晴らしい仕事でした!ありがとうございました! – Mutmatt

5

私にも同様の問題がありました。私にとっては、Facebookアプリの最新のアップデートをアンインストールし、ネイティブFacebookアプリをv1.2にしたときに解決されました。 (市場に出てFacebookを検索すると、「Android用Facebook」は自分のデバイスに「インストールされていません」と表示されます)。

私のNexus One(Android 2.2.1)では、最新のFacebookアプリをインストールしたときに、「アンインストールアプリ」butonはなく、「最新のアップデートをアンインストールする」だけでした。実際、何らかの理由でFacebook(今はv1.2)のアプリ全体をアンインストールすることはできません。アンインストールボタンは無効/グレー表示されています。しかし、この状態では、サンプルがうまくいくように見えます。

少なくとも、私はこのように動作するシンプルでストリームアプリを手に入れることができました。

編集/ソリューション:

[OK]を、私はそれが今取り組みました。私は、Windowsでのkeytoolの奇妙な動作と、Facebook SDKのReadMeファイルでの誤ったコマンド構文のために、間違ったキーハッシュをコピー/貼り付けていることがわかりました。

使用するパラメータは「keytool -exportcert ...」でなく「keytool -export ...」である必要があります。 2番目の/間違ったパラメータを使用すると、keytoolはハッシュ・キーを出力します(ただし、キー・パスワードは要求されません)が、ハッシュは間違っています。

これでSSOが機能しました。

これは、Windows上で私の呼び出しです:

keytool -export -alias androiddebugkey -keystore "C:\Documents and Settings\myuser\.android\debug.keystore" | openssl sha1 -binary | openssl enc -a -e 
+0

これは動作しますが、残念ながら解決策ではありません。私が正しく理解していれば、シングルサインオンとは、サインインなしで動作し、許可を求めるだけであることを意味します。シングルログインがデバイス上に存在しない場合は、単純なWeb-Viewに戻ります。 更新プログラムをアンインストールすると、単一のログイン情報が無効になり、ログインする必要があります。これは、サンプルアプリケーションが動作することを意味します。だから私が正しいなら、私は間違ったことをしなければならない。 –

+0

私はそれをあなたとして理解していますが、それを働かせることもできませんでした。ニュースを受け取ったら更新してください。同じことをします。 –

+0

私は解決策を見つけ出しました。私は単純にFacebookクラスのシングルサインオンをチェックするメソッドの行をコメントアウトしました。このメソッドは、後にあります。 public void authorize(Activity activity、String [] permissions、 int activityCode、final DialogListenerリスナー){ mAuthDialogListener = listener; startDialogAuth(アクティビティ、権限); } –

0

私は、輸出とexportcertの両方を使用して、ソリューションごとにWindows上で試してみましたが、それは同じハッシュを生成します。アプリケーションは以前のように動作し、新しいSSOの方法を使用しません。

私はアンドロイドFB SDKをデバッグしましたが、私は原因を見つけましたが、正確な解決策は見つかりませんでした。なぜfacebookの人がこのようにSSOを実装したのか分かりません。

  1. AndroidアプリにFBアプリの新しいアップデートがインストールされていないと、SSOが動作しません。

  2. この場合、ユーザ名とパスワードで通常のダイアログインターフェイスにルーティングします。 SSOを処理するための

3.In詳細、FBのAndroid SDK、それアップデートが利用可能な場合、それは真を返す意思com.facebook.katana.ProxyAuthを呼んでいます。

  1. ユーザーが新しい更新プログラムを取得し、既にログインしている場合は、ユーザーを検証します。

希望すると、これが役立ちます。