Вхід на Facebook не відбувається на деяких пристроях

Я реалізував вхід до Facebook, і це добре працює на деяких пристроях/AVDs. Мій пристрій розробки - це телефон Gingerbread, проте тестування його на пристрої 4.1.1, він просто не входить. Після натискання кнопки facebook з'являється порожній екран (намагається підключити Facebook), а через 1-2 секунди він повертається на головний екран. Крім того, помилки не підсмажені або не відображаються в Logcat. О, а приставка Facebook встановлюється в пристрій ... Будь-які ідеї?

UPDATE:

Я ввімкнув журнал як запропонував Марк Венске та використав цю процедуру, і я отримав це попередження (двічі) при кожній спробі входу в систему ( примітка: тестування за допомогою телефону HTC One S):

07-05 20:14:50.582: W/PackageManager(605): Unable to load service info ResolveInfo{4171dbf0 com.htc.socialnetwork.facebook.remote.FacebookSyncService p=0 o=0 m=0x108000}

Зверніть увагу на рядок com.htc.socialnetwork.facebook.remote.FacebookSyncService, чи потрібно додатковий крок для пристроїв HTC?

Крім того, я додаю код, в якому виконується вхід:

private void onSessionStateChange(Session session, SessionState state, Exception exception) {
    if (isResumed) {
        FragmentManager manager = getSupportFragmentManager();
        int backStackSize = manager.getBackStackEntryCount();
        for (int i = 0; i < backStackSize; i++) {
            manager.popBackStack();
        }
        com.facebook.Settings.addLoggingBehavior(LoggingBehavior.REQUESTS);
        if (state.isOpened()) {

            Bundle params = new Bundle();
            params.putString("fields", "id");
            params.putString("limit", "1");             
            Request request = new Request(Session.getActiveSession(), "me", params, HttpMethod.GET, new Callback()
            {

                @Override
                public void onCompleted(Response response)
                {
                    if (response != null)
                    {
                        Log.d("AuthGraphResponse", response.toString());
                        long id;
                        try {
                            id = response.getGraphObject().getInnerJSONObject().getLong("id");
                            app.setFacebookId(id);
                            Log.d("UserID", Long.valueOf(id).toString());
                        } catch (JSONException e) {
                            e.printStackTrace();
                        }
                    }
                }
            });

            RequestAsyncTask task = new RequestAsyncTask(request);
            task.execute();

            showFragment(AUTH, false);
        } else if (state.isClosed()) {
            showFragment(UNAUTH, false);
        }
    }
}

UPDATE 2:

Хіба можливо, що HTC перейменовує ім'я пакета програми Facebook за замовчуванням на всіх пристроях (або деяких з них, що завгодно) на com.htc.socialnetwork.facebook (а не com.facebook.katana), і це призводить до цього конфлікту? Я не думаю, що прийнятним рішенням є деінсталяція додатку за замовчуванням та встановлення Facebook із Google Play (також, я вважаю, що додатків за умовчанням не можна видалити).

UPDATE 3:

Ще не вирішено. 19 годин нагородження 100 репутаційних щедр!

UPDATE 4:

Ще одна цікава рядок журналу LogCat:

07-15 10:55:51.718: E/chromium(30475): external/chromium/net/disk_cache/stat_hub.cc:216: [0715/105551:ERROR:stat_hub.cc(216)] StatHub::Init - App com.facebook.katana isn't supported.
9
Чи можете ви опублікувати якийсь код, будь ласка?
додано Автор Ming Li, джерело
добре, я хочу, але завтра (у мене цього телефону немає зараз). У будь-якому разі, інший цікавий рядок журналу, який я сьогодні помітив: E/chromium (30475): external/chromium/net/disk_cache/stat_hub.cc: 216: [0715/105551: ERROR: stat_hub.cc (216)] StatHub: : Init - App com.facebook.katana не підтримується.
додано Автор Dhanesh Budhrani, джерело
Ой, забув оголосити його тут, я оновив питання :)
додано Автор Dhanesh Budhrani, джерело
Я насправді думав, що це не буде працювати без додатку fb. Але в будь-якому випадку, я протестував, що він встановлений
додано Автор Dhanesh Budhrani, джерело
так! Я бачу, що фейсбук на мобільний, насправді, не дуже хороший (їхні власні програми також дуже багато всосали) ... Я використовую останню SDK, яка, здається, є версією v3.0.1. Якщо це помилка SDK, це було там протягом 3 місяців!
додано Автор Dhanesh Budhrani, джерело
[підкреслено режим] іноді ви просто повинні припустити, що Facebook SDK (принаймні, останній) дійсно проклятий баггі і буде крах багато. Який SDK ви використовуєте?
додано Автор StErMi, джерело
SDK працює по-іншому, коли на телефоні встановлено нативне додаток FB чи ні. Ви розглядаєте цей сценарій?
додано Автор Umair, джерело
Чи можете ви надати решту вихідного журналу SDK журналу Facebook (видалення будь-яких особистих даних)? Можливо, лінія FacebookSyncService не пов'язана, або, принаймні, інша інформація допоможе забезпечити контекст.
додано Автор Mike Venzke, джерело
Вам потрібно опублікувати кодекс, щоб люди могли публікувати важливі відповіді.
додано Автор yams, джерело

10 Відповіді

Звичайно, існує конфлікт між вашою фондовою програмою та SDK. Отже, якщо ви не хочете іменувати пристрій HTC App і досі використовуєте SDK 3.0, я думаю, що ваш найкращий варіант, не змінюючи вихідний код sdk, полягає в тому, щоб вимкнути SSO та увійти лише через веб-переглядач.

Це легко можна зробити, додавши SessionLoginBehavior.SUPRESS_SSO щоразу, коли ви намагаєтеся відкрити новий сеанс. Ось приклад, який я змінив із SessionLoginSample (LoginUsingActivityActivity) із SDK Facebook, щоб показати вам, що робити:

@Override
public void onCreate(Bundle savedInstanceState) {
    ...
    Session session = Session.getActiveSession();
    if (session == null) {
        if (savedInstanceState != null) {
            session = Session.restoreSession(this, null, statusCallback, savedInstanceState);
        }
        if (session == null) {
            session = new Session(this);
        }
        Session.setActiveSession(session);

        //add the check, for if session is opened
        if (session.getState().equals(SessionState.CREATED_TOKEN_LOADED) || !session.getState().isOpened()) {
            //Add the suppress SSO behavior to force webview auth dialog to popup
            session.openForRead(new Session.OpenRequest(this).setCallback(statusCallback).setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO));
        }
    }
  ...
}
//then put your code in the statusCallback method or keep it in the session state change listener

В іншому випадку, якщо ви не проти змінювати код sdk facebook, слід перевірити цю .

6
додано
+1 У вас є така ж проблема. Дякуємо, що вказали на конфлікт із HTC акційною програмою. Я отримав роботу, встановивши поведінку на прикладі LoginButton для facebook: authButton.setLoginBehavior (SessionLoginBehavior.SUPPRESS_SS & zwnj; O)
додано Автор akhyar, джерело

Вхід Shirley Facebook не розбитий на всіх пристроях 4.1.1, тому це щось з вашою реалізацією.

Ви впевнені, що ключовий хеш у цьому пристрої однаковий, як те, що ви налаштували на developer.facebook.com? Якщо ви використовували інший ключ dev, або він встановлений стороннім магазином, можливо, хеші ключів не збігаються.

Включіть вхід до налагодження у вихідний код програми Facebook SDK та перебудуйте його. З міркувань безпеки він за замовчуванням вимкнений. Залежно від вашої версії SDK, він може бути в Util.java або в іншому місці, і може бути змінною, яка називається "ENABLE_LOG".

4
додано
шлях! Тепер я бачу, що отримую помилку htc!
додано Автор Dhanesh Budhrani, джерело

Я думаю, що помилка входу до facebook в основному відбувається, щоб вирішити цю проблему, ви слідуєте там підручник крок за кроком знову з терпінням.

Іншим мудрим його дуже важко вирішити вашу проблему тут. Тому ви можете передати цю посилання.

http://developers.facebook.com/android/

Я сподіваюся, що ви будете успішними.

2
додано

Я думаю, проблема з вашим додатком Android app на пристрої. Отже, спочатку видаліть програму facebook android з пристрою та перевірте, чи функціонує вхід до facebook належним чином.

1
додано
Ні. Перевірено на 2 пристроях HTC One S і обидва дають той самий результат
додано Автор Dhanesh Budhrani, джерело

У вашому запиті недостатньо інформації. так, я роблю кілька здогадок тут.

1) Перший погляд на відповідь Майка Венке.

2) Якщо це не працює, спробуйте це: Ви повинні входити на свій пристрій за допомогою SSO (Single Sign On). Отже, ось кроки, які ви можете зробити.

видалити збірку перевстановіть його. і коли запитаєте дозволи з вашого пристрою, дозвольте їм.

Якщо ви не повернетеся до свого додатка, то вам потрібно додати їх до вашого файлу маніфесту:


    
<meta-data android:value="@string/app_id" android:name="com.facebook.sdk.ApplicationId"/>

де app_name і app_id - це ваша відповідна ідентифікатор програми та ім'я додатка на сторінці додатка Facebook.

Ви додали ці речі?

вам потрібен також такий дозвіл





якщо ви розмістите ще одну інформацію, то я можу здогадатися про цю проблему.

1
додано
У мене вже було все, що було налаштовано в маніфесті (за винятком перших 2 дозволів, хоча я додав їх і отримав таку саму поведінку). Також зауважте, що це насправді працює на моєму звичайному пристрої (ZTE Skate, Gingerbread). Я оновив повідомлення, я отримую те, що здається специфічною помилкою HTC (не працює на HTC One S).
додано Автор Dhanesh Budhrani, джерело

Оскільки Honeycomb ви не можете робити інтернет-дзвінки в основній течії, спробуйте скористатись Android AsyncTask або створити нову нитку самостійно.

http://developer.android.com/reference/android/os/AsyncTask.html

1
додано
Що ви маєте на увазі за допомогою "com.htc.socialnetwork.facebook" - це фондовий Facebook для деяких пристроїв htc "? Тож деінсталювати та повторно встановити Facebook з Google Play слід вирішити цю проблему?
додано Автор Dhanesh Budhrani, джерело
RequestAsyncTask (див. Код) - клас Facebook, який теоретично працює на AsyncTask, тому мережевий дзвінок не повинен виконуватися в потоці інтерфейсу користувача
додано Автор Dhanesh Budhrani, джерело
Ну, може, це допоможе, але в будь-якому випадку, виявив, що com.htc.socialnetwork.facebook є акцій Facebook для деяких пристроїв htc, і вилучення, і встановлення з магазину Play, можливо, допоможе вам ...
додано Автор Thiago Romano, джерело
Вибачте, я більше не впевнений, але, ймовірно, проблема пов'язана з вашою службою підтримки Facebook для служби HTC, спробуйте очистити дані чи видалити обліковий запис синхронізації, ймовірно, це призведе до видалення ваших друзів з ваших контактів, але це може допомогти.
додано Автор Thiago Romano, джерело

підключити пристрій до затемнення для перегляду logcat. якщо log cat не запускається відкритим підказкою cmd у вікнах та запустіть restart, (спочатку встановіть шлях adb). то ви можете бачити logcat працює. Тепер відкрийте додаток і натисніть кнопку входу до facebook. ви можете отримати правильний хеш-ключ у жовтому кольорі в лог-кот. покладіть цей ключ на Facebook, і тепер вхід на Facebook буде працювати на кожному пристрої. Дякую.

0
додано

Я отримав цю помилку при використанні пристрою зі старою версією facebook. Видалення фейсбука повністю або оновлення програми Facebook, фіксованого.

Я впевнений, що це трапляється тому, що Facebook для Android - це просто загальний веб-переглядач мобільного сайту.

Також зауважте, що деякі пристрої (моя неймовірна 4G LTE) перевстановлюють стару версію facebook (веб-перегляду), якщо ви спробуєте її видалити.

0
додано
List permissions = new ArrayList();
permissions.add("email");



//start Facebook session
openActiveSession(this, true, new Session.StatusCallback() {
    @Override
    public void call(Session session, SessionState state, Exception exception) {
        if (session.isOpened()) {
            //make request to the /me API

            Request.executeMeRequestAsync(session, new Request.GraphUserCallback() {
                @Override
                public void onCompleted(GraphUser user, Response response) {
                    if (user != null) {
                        String firstName = user.getFirstName();
                        String lastName = user.getLastName();
                        String id = user.getId();
                        String email=null;
                        try {
                            email = user.getProperty("email").toString();
                        } catch (Exception e) {
                           //TODO: handle exception
                        }

                        String gender = (String) user.getProperty("gender");
                        String birthday = user.getBirthday();



                    //welcome.setText("Hello \n" + firstName+"\n"+lastName+"\n"+email+"\n"+gender+"\n"+birthday+"!");




                    if(firstName!=null)
                    {


                          SharedPreferences.Editor editor = settings.edit();

                            editor.putString("fligin", "1");
                            editor.putString("firstName", firstName);
                            editor.putString("lastName", lastName);
                            editor.putString("email", email);
                            editor.putString("gender", gender);
                            editor.putString("birthday", birthday);
                            editor.commit();

                        Intent intent=new Intent(getApplicationContext(), RegistrationOneActivity.class);
                        startActivity(intent);
                        //overridePendingTransition( R.anim.slide_in_up, R.anim.slide_out_up );

                        finish();
                    }
                    else {

                        Toast.makeText(getApplicationContext(),"Person information is null", Toast.LENGTH_SHORT).show();

                    finish();
                        }



                    }
                }
            });
         }
     }
 }, permissions);
0
додано

Спробуйте вставити цей рядок, де ви визначите свою реєстраційну кнопку у вихідному коді Java

LoginButton fb_button = (LoginButton)findViewById(//your resource id);
fb_button.setLoginBehavior(SessionLoginBehavior.SUPPRESS_SSO);
0
додано
Спробуйте вставити 4 пробіли перед двома рядками, щоб форматувати код.
додано Автор DanM7, джерело
android_jobs_ua
android_jobs_ua
120 учасників

Публикуем вакансии и запросы на поиск работы по направлению Android. Здесь всё: full-time, part-time, remote и разовые подработки.

Mobile Dev Jobs UA
Mobile Dev Jobs UA
20 учасників

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin, RN и т.д.