私はこれにかなり長い間苦労してきましたが、運がありませんでした!あなたの一人が私を正しい方向に向けてくれたら嬉しいです! (エラーは私の側のセットアップにあると思いますが、それを見つけることができません)
これは、私のアクティビティのonCreateでSession.openActiveSession(this、true、new Session.StatusCallback())を呼び出した後に表示されるエラーです(私はfacevook開発者チュートリアルで与えられた手順にほぼ従っています)
編集:次の警告メッセージが最初にログに記録され、次のスクリーンショットでエラーメッセージが続きます
09-03 19:26:22.726:W/Bundle(17458):キーcom.facebook.platform.protocol.PROTOCOL_VERSION期待される文字列ですが、値はJava.lang.Integerでした。デフォルト値が返されました。09-03 19:26:22.736:W/Bundle(17458):生成された内部例外をキャストしようとしました:09-03 19:26:22.736:W/Bundle (17458):Java.lang.ClassCastException:Java.lang.IntegerをJava.lang.Stringにキャストできません09-03 19:26:22.736:W/Bundle(17458):Android.os.Bundle.getString(Bundle) .Java:1061)09-03 19:26:22.736:W/Bundle(17458):Android.content.Intent.getStringExtra(Intent.Java:4466)09-03 19:26:22.736:W/Bundle(17458) ):com.facebook.AuthorizationClient $ KatanaLoginDialogAuthHandler.tryAuthorize(AuthorizationClient.Java:821)09-03 19:26:22.736:W/Bundle(17458):com.facebook.AuthorizationClient.tryCurrentHandler(AuthorizationClient.Java:272)
09-02 22:55:04.110:E/AndroidRuntime(13287):致命的な例外:メイン09-02 22:55:04.110:E/AndroidRuntime(13287):Java.lang.RuntimeException:アクティビティを再開できません{com.good.amrfbintegration /com.facebook.LoginActivity}:Java.lang.NullPointerException09-02 22:55:04.110:E/AndroidRuntime(13287):Android.app.ActivityThread.performResumeActivity(ActivityThread.Java:3036) 09-02 22:55:04.110:E/AndroidRuntime(13287):Android.app.ActivityThread.handleResumeActivity(ActivityThread.Java:3077)09-02 22:55:04.110:E/AndroidRuntime(13287):Androidで。 app.ActivityThread.handleLaunchActivity(ActivityThread.Java:2373)
これが私がこれまでにしたことです
Facebookのアプリを次の情報で更新しました(マシンのデバッグキーストアを使用して生成されたハッシュキーを使用しました)
これが私のマニフェストファイルからの関連情報です(@ string/app_idはFacebook開発ポータルからのアプリIDです)
この方法で、FacebookSDKへの参照をプロジェクトに追加しました
これがメインアクティビティのOnCreateメソッドのコードです
@Override
protected void onCreate(Bundle savedInstanceState)
{
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
activity = this;
Session.openActiveSession(this, true, new Session.StatusCallback()
{
@Override
public void call(Session session, SessionState state, Exception exception)
{
if (session.isOpened())
{
Toast.makeText(activity, "Connected to Fb", Toast.LENGTH_SHORT).show();
}
}});
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data)
{
super.onActivityResult(requestCode, resultCode, data);
Session.getActiveSession().onActivityResult(this, requestCode, resultCode, data);
}
Session.openActiveSessionを実行すると、logcatは最初のスクリーンショットに示されているエラーを表示します。
Session.StatusCallback()のcallメソッドは1回実行されますが(セッションの状態が「opening」の場合)、その後アプリがクラッシュします。これがアプリがクラッシュする前に私が見るものです
どんな援助も大歓迎です!
Facebook SDKが原因でこの問題が発生する場合は、次のURLからFacebook SDK 3.5.2をダウンロードして使用してください:- https://developers.facebook.com/docs/Android/
はい。コードを確認してください
Manifest.xmlにこれらのものがあることを確認してください
<activity Android:name="com.facebook.LoginActivity"/>
<meta-data Android:name="com.facebook.sdk.ApplicationId" Android:value="@string/app_id"/>
また、@ string/app_idには、Facebookアプリの構成の詳細から取得したapp_idが含まれている必要があります。また、そこに正しいキーハッシュを配置する必要があります。
だから確認してください-
今日もそうだった。
私の問題は、Facebookアプリがサンドボックスモードになっていることでした。したがって、開発者とテスターだけがそれを使用できました。
アプリのFacebookDeveloperプロパティページから変更します: https://developers.facebook.com/apps
また、ここで私の答えを見つけました: Facebookセッションにアクセスできません-UnknownError:無効なアプリケーション
私は同じエラーを受け取っていました、グーグルはたくさんのことをしました、そして最後にこれは私がそのエラーから逃れるためにしたことです
private void getHashKey()
{
PackageInfo info;
try {
info = getPackageManager().getPackageInfo("Your_Package_Name", PackageManager.GET_SIGNATURES);
for (Signature signature : info.signatures) {MessageDigest md;
md = MessageDigest.getInstance("SHA");
md.update(signature.toByteArray());
//String something = new String(Base64.encode(md.digest(), 0));
String something = new String(Base64.encode(md.digest(),0));
Log.e("** Hash Key", something);
}
}
catch (NameNotFoundException e1) {
Log.e("name not found", e1.toString());
}
catch (NoSuchAlgorithmException e) {
Log.e("no such an algorithm", e.toString());
}
catch (Exception e){
Log.e("exception", e.toString());
}
}
そこで、このコードで生成されたHash_Keyを使用し、Facebook開発者コンソールで更新しました。これで私の問題は解決しました。おそらく、Windowskey_genまたはAndroid key_store
また、FacebookSdkの820行目のAuthorizationClient.Javaファイルも確認してください。
addLoggingExtra(EVENT_EXTRAS_PROTOCOL_VERSION,"" +
intent.getIntExtra(NativeProtocol.EXTRA_PROTOCOL_VERSION, 0));
「getIntExtra」に到達しました。「getStringExtra "」として表示されました。これらの変更を行うことは、私のために働いた。それがあなたのためにも働くことを願っています。
SDK(3.5)を少し掘り下げましたが、EXTRA_PROTOCOL_VERSIONは常に文字列ではなく整数として格納されているようです。つまりNativeProtocol.Javaの場合:
public static Intent createPlatformActivityIntent(Context context, String action, int version, Bundle extras) {
Intent intent = new Intent()
.setAction(INTENT_ACTION_PLATFORM_ACTIVITY)
.setPackage(FACEBOOK_PACKAGE)
.addCategory(Intent.CATEGORY_DEFAULT)
.putExtras(extras)
.putExtra(EXTRA_PROTOCOL_VERSION, version) //version --> int
.putExtra(EXTRA_PROTOCOL_ACTION, action);
return validateKatanaActivityIntent(context, intent);
}
public static Intent createPlatformServiceIntent(Context context) {
Intent intent = new Intent(INTENT_ACTION_PLATFORM_SERVICE)
.setPackage(FACEBOOK_PACKAGE)
.addCategory(Intent.CATEGORY_DEFAULT);
return validateKatanaServiceIntent(context, intent);
}
public static Intent createLoginDialog20121101Intent(Context context, String applicationId, ArrayList<String> permissions,
String audience) {
Intent intent = new Intent()
.setAction(INTENT_ACTION_PLATFORM_ACTIVITY)
.setPackage(FACEBOOK_PACKAGE)
.addCategory(Intent.CATEGORY_DEFAULT)
.putExtra(EXTRA_PROTOCOL_VERSION, PROTOCOL_VERSION_20121101) // PROTOCOL_VERSION_20121101 --> int
.putExtra(EXTRA_PROTOCOL_ACTION, ACTION_LOGIN_DIALOG)
.putExtra(EXTRA_APPLICATION_ID, applicationId)
.putStringArrayListExtra(EXTRA_PERMISSIONS, ensureDefaultPermissions(permissions))
.putExtra(EXTRA_PROTOCOL_CALL_ID, generateCallId())
.putExtra(EXTRA_WRITE_PRIVACY, ensureDefaultAudience(audience));
return validateKatanaActivityIntent(context, intent);
}
そして、開発者が通常このエラーを受け取る場所では、文字列として読み取られます(AuthorizationCLient.Java l:820):
addLoggingExtra(EVENT_EXTRAS_PROTOCOL_VERSION,
intent.getStringExtra(NativeProtocol.EXTRA_PROTOCOL_VERSION));
それはどのような場合でも機能しないので、SDKのバグのままです。状況によっては、そのセグメントが実行されるだけです。
コメントはありますか?
// Just write your code in onResume() rather than onCreate().
@Override
public void onResume() {
super.onResume();
if(Session.getActiveSession()==null){
session = new Session(this);
Session.setActiveSession(session);
}
if (Session.getActiveSession().isOpened())
{
Toast.makeText(activity, "Connected to Fb", Toast.LENGTH_SHORT).show();
}else{
Session.openActiveSession(this, true, new Session.StatusCallback()
{
@Override
public void call(Session session, SessionState state, Exception exception)
{
if (session.isOpened())
{
Toast.makeText(activity, "Connected to Fb", Toast.LENGTH_SHORT).show();
}
}});
}
}
}