Ответ 1
Эта проблема из-за Facebook SDK, пожалуйста, скачайте и используйте Facebook SDK 3.5.2 из этого URL: - https://developers.facebook.com/docs/android/
У меня возникли проблемы с открытием активного сеанса facebook в приложении для Android в соответствии с учебным пособием, опубликованным в https://developers.facebook.com/docs/android/getting-started/facebook-sdk-for-android/
Я уже довольно долго боролся с этим без везения! Буду рад, если один из вас укажет мне в правильном направлении! (Я уверен, что ошибка связана с некоторой настройкой на моей стороне, но я не могу ее заметить)
Вот ошибка, которую я вижу после вызова Session.openActiveSession(this, true, new Session.StatusCallback() в onCreate моей активности (я в значительной степени следую шагам, приведенным в учебниках разработчиков facevook)
РЕДАКТИРОВАТЬ: Следующее предупреждающее сообщение регистрируется первым и сопровождается сообщением об ошибке на следующем снимке экрана
09-03 19: 26: 22.726: W/Bundle (17458): Key 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): at 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): FATAL EXCEPTION: main 09-02 22: 55: 04.110: E/AndroidRuntime (13287): java.lang.RuntimeException: Невозможно возобновить работу{Com.good.amrfbintegration/ com.facebook.LoginActivity}: java.lang.NullPointerException 09-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 со следующей информацией (я использовал hashkey, сгенерированный с помощью моего отладочного хранилища машин)
Вот соответствующая информация из моего файла манифеста (@string/app_id - это идентификатор приложения из портала facebook dev)
Я добавил ссылку на SDK для Facebook таким образом
Вот код в моем методе 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() запускается один раз (в то время как сеанс имеет состояние "открытие" ), но приложение сбрасывает последующее время. вот что я вижу перед тем, как приложение выйдет из строя
Любая помощь будет принята с благодарностью!
Эта проблема из-за Facebook SDK, пожалуйста, скачайте и используйте Facebook SDK 3.5.2 из этого URL: - 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 должен содержать app_id, который вы получаете из сведений о конфигурации вашего приложения в facebook. Также там вы должны поместить правильный keyhash.
Итак, убедитесь, что
Это случилось и со мной сегодня.
Моя проблема заключалась в том, что приложение Facebook было в режиме песочницы. Так что только разработчики и тестеры могли бы использовать его.
Измените его на странице свойств разработчика Facebook вашего приложения: https://developers.facebook.com/apps
Также нашел свой ответ здесь: Не удается получить доступ к сеансу Facebook - UnknownError: Неверное приложение
// 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();
}
}});
}
}
}
Я выкопал бит в 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. Просто в некоторых случаях этот сегмент выполняется.
Любые комментарии?
Я получал ту же ошибку, google'd много вещей, и, наконец, это то, что я сделал, чтобы уйти от этой ошибки
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. Это решило мою проблему. Вероятно, некоторые проблемы с окнами key_gen или андроид key_store
А также проверьте файл AuthorizationClient.java из Facebook Sdk на линии 820
addLoggingExtra(EVENT_EXTRAS_PROTOCOL_VERSION,"" +
intent.getIntExtra(NativeProtocol.EXTRA_PROTOCOL_VERSION, 0));
Я сделал это с getIntExtra ", где у меня было это как" getStringExtra ". Сделав эти изменения, работал на меня. Надеюсь, он тоже сработает для вас.