5

Facebookと統合するAndroidアプリを開発しています。LoginButton.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO) を設定すると、アプリは完全に正常に動作します。

SSO を使用しようとすると、問題が発生します。以下のエラーが表示されます。間違ったキーハッシュを使用すると、同様のエラーが発生しました。Webview ログインが正常に機能するため、これはもう当てはまりません。さらに驚くべきことは、アプリが FB にインストールされている場合、Android アプリが動作することです。たとえば、私はアプリ マネージャーであるため、デフォルトで facebook プロファイルにインストールされますが、アプリがインストールされていない別の fb アカウントで試しても機能しません。ログインしようとすると、以下のエラーが表示され、基本的なアクセス許可が付与されるというダイアログが表示されますが、実際には基本的なアクセス許可さえ取得できません。

App Center に表示されるようにするために、レビューのためにアプリを送信しました。これを行うと、アプリが SSO を使用していることを確認するチェックボックスがダイアログに表示されます。SSO を使用する前に、Facebook がアプリを承認する必要がありますか (承認されている場合、これは意味がありません)。

これを解決するために何時間も費やしましたが、解決策が見つかりません。助けてください。

08-24 01:39:16.058: W/Bundle(21880): Key com.facebook.platform.protocol.PROTOCOL_VERSION expected String but value was a java.lang.Integer.  The default value <null> was returned.
08-24 01:39:16.068: W/Bundle(21880): Attempt to cast generated internal exception:
08-24 01:39:16.068: W/Bundle(21880): java.lang.ClassCastException: java.lang.Integer cannot be cast to java.lang.String
08-24 01:39:16.068: W/Bundle(21880):    at android.os.Bundle.getString(Bundle.java:1069)
08-24 01:39:16.068: W/Bundle(21880):    at android.content.Intent.getStringExtra(Intent.java:4350)
08-24 01:39:16.068: W/Bundle(21880):    at com.facebook.AuthorizationClient$KatanaLoginDialogAuthHandler.tryAuthorize(AuthorizationClient.java:821)
08-24 01:39:16.068: W/Bundle(21880):    at com.facebook.AuthorizationClient.tryCurrentHandler(AuthorizationClient.java:272)
08-24 01:39:16.068: W/Bundle(21880):    at com.facebook.AuthorizationClient.tryNextHandler(AuthorizationClient.java:238)
08-24 01:39:16.068: W/Bundle(21880):    at com.facebook.AuthorizationClient$GetTokenAuthHandler.getTokenCompleted(AuthorizationClient.java:772)
08-24 01:39:16.068: W/Bundle(21880):    at com.facebook.AuthorizationClient$GetTokenAuthHandler$1.completed(AuthorizationClient.java:731)
08-24 01:39:16.068: W/Bundle(21880):    at com.facebook.internal.PlatformServiceClient.callback(PlatformServiceClient.java:144)
08-24 01:39:16.068: W/Bundle(21880):    at com.facebook.internal.PlatformServiceClient.handleMessage(PlatformServiceClient.java:128)
08-24 01:39:16.068: W/Bundle(21880):    at com.facebook.internal.PlatformServiceClient$1.handleMessage(PlatformServiceClient.java:54)
08-24 01:39:16.068: W/Bundle(21880):    at android.os.Handler.dispatchMessage(Handler.java:99)
08-24 01:39:16.068: W/Bundle(21880):    at android.os.Looper.loop(Looper.java:137)
08-24 01:39:16.068: W/Bundle(21880):    at android.app.ActivityThread.main(ActivityThread.java:5227)
08-24 01:39:16.068: W/Bundle(21880):    at java.lang.reflect.Method.invokeNative(Native Method)
08-24 01:39:16.068: W/Bundle(21880):    at java.lang.reflect.Method.invoke(Method.java:511)
08-24 01:39:16.068: W/Bundle(21880):    at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:795)
08-24 01:39:16.068: W/Bundle(21880):    at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:562)
08-24 01:39:16.068: W/Bundle(21880):    at dalvik.system.NativeStart.main(Native Method)
4

5 に答える 5

3

わかりました、これが何が起こっていたかです。onCreate() で、「create_event」および「publish_actions」権限を LoginButton に渡していました。LoginButton に onErrorListener を設定すると、次のようになりました。

08-28 14:06:01.679: E/FACEBOOK LOGIN ERROR(28293): UnknownError: The app must ask for a basic_info permission at install time.

結局のところ、インストール時に、アプリは最初に読み取りアクセス許可を要求する必要があり、ログインすると、公開アクセス許可を要求できます。これがFacebookの説明です(公開許可の下):

アプリは、読み取りアクセス許可と公開アクセス許可の要求を分離する必要があります。最初のログイン時に最小限の読み取りアクセス許可を要求し、アプリ内から Open Graph ストーリーを作成する場合など、ユーザーが実際に必要とするときに公開アクセス許可を要求するようにアプリを計画します。これにより、最高のユーザー エクスペリエンスが提供され、変換が最適化されます。

アプリが読み取り権限と公開権限を連続して要求すると、デベロッパー アラートを受け取ることがあります。これらのアラートの受信を停止するには、リクエストを分割するか、以下の例外的なケースのガイドラインに従ってください。

まれに、アプリが事前に公開権​​限を必要とする場合 (たとえば、ユーザーの気分を Facebook に公開するだけのアプリなど) は、最初のログイン時に最小限の読み取り権限を最初に要求します。ユーザーが Facebook でログインした後、アプリに公開許可が必要な理由を説明する画面をユーザーに表示し、ユーザーがボタンをクリックして公開許可要求にオプトインできるようにします。これにより、ユーザーにより多くのコンテキストが提供され、コンバージョンが向上します。

読み取りと公開のアクセス許可を連続して要求するもう 1 つの正当なケースは、ユーザーがメールまたは Facebook 以外のログイン オプションを使用してアプリにログインする場合です。これらのユーザーが Facebook に公開したい場合、アプリは読み取りアクセス許可を要求してアカウントを接続し、続けて公開アクセス許可を要求する必要があります。この場合、要求する読み取りアクセス許可が公開プロフィールとフレンド リストだけであることを確認してください。ユーザーは単にアプリから公開することを望んでおり、追加の読み取りアクセス許可を提供することに関心がないため、これにより最高のユーザー エクスペリエンスが提供されます。また、コンバージョンも向上します。

私の問題を解決するために、起動時に許可を要求しなかっただけで(デフォルトで「basic_info」読み取り許可を取得します)、次に使用しました

 helper = new UiLifecycleHelper(this, new StatusCallback() {

            @Override
            public void call(Session session, SessionState state, Exception exception) {
                // TODO Auto-generated method stub
                if(state.isOpened()&&!session.getPermissions().contains("publish_actions"))
                    session.requestNewPublishPermissions(new NewPermissionsRequest(SplashScreen.this, "publish_actions"));

            }
        });

onCreate() で。call() はセッションに変更があるたびに呼び出されるため、session.isOpen() は true になります。許可が設定されているかどうかを確認しないと、無限ループに入ります。

どうやら、上記の警告は実際のエラーとは何の関係もありませんでした。提案として、このような問題を抱えている人は、onErrorListener を設定してログに記録してください。

Log.e("FACEBOOK LOGIN ERROR", error.getLocalizedMessage());
于 2013-08-28T19:40:46.833 に答える
3

問題はハッシュキーがウォンです

Linux の場合

ターミナルを開く:

デバッグビルド用

keytool -exportcert -alias androiddebugkey -keystore debug.keystore | openssl sha1 -binary | openssl base64

「.android」フォルダからdebug.keystoreを見つけて、それをコピーしてデスクトップに貼り付け、上記のコマンドを実行します

リリース用ビルド

keytool -exportcert -alias <aliasName> -keystore <keystoreFilePath> | openssl sha1 -binary | openssl base64

注:どちらの場合でも、パスワードを要求する必要があることを確認してください。パスワードを要求されない場合は、コマンドに問題があることを意味します。

于 2013-08-24T07:08:53.573 に答える
0

これが役立つかどうかはわかりませんが、新しい SDK リリースに関連している可能性があります。Android Facebook SDK v3.5 を使用していますか? SDK の以前のバージョンである 3.0.2 を使用してみてください。github リポジトリを参照すると見つかります。

編集:

私の場合は問題を修正しましたが、実際の問題が何であるかを知っているとは言えません。

  • ハッシュと app_id を確認し、サンプル アプリケーションではなく、開発者の Web サイトでハッシュ キーをアプリケーションに追加してください。

  • マニフェストにこのアクティビティが指定どおりに含まれているか、サンプルに表示されていることを確認してください

    アクティビティ android:name="com.facebook.LoginActivity" android:theme="@android:style/Theme.Translucent.NoTitleBar"
    android:label="@string/app_name"

  • マニフェストの < application> タグ内にメタデータを追加してください。

    メタデータ android:name="com.facebook.sdk.ApplicationId" android:value="@string/app_id"

  • Facebook 開発者アカウントで、デプロイするアプリケーションが正しいパッケージとメイン クラス名を指定していることを確認してください。

  • また、マニフェストのメインのログイン アクティビティから次の属性を削除しました。

    android:exported="true" android:noHistory="true"

これは私が行ったことであり、今のところうまくいくようです。これが普遍的な修正であるかどうかはわかりませんが、少なくともそれらすべてが正しいことを確認する価値があります.

于 2013-08-24T20:56:14.823 に答える