Внедряване на Facebook Login Button Sdk 4 android

И така, опитвам се да внедря бутон за влизане с помощта на фрагмент. Документацията на сайта на Facebook е малко объркваща. Приложението ми се срива дори в началото. Няма грешка в конструкцията. Ето моя код.. Ако някой може да ми помогне ще съм благодарен!!

MainActivity.java:

public class MainActivity extends FragmentActivity {


    private CallbackManager callbackManager;
   // private Fragment mainfrag=new Fragment();
    private AccessTokenTracker accessTokenTracker;
    private boolean isResumed = false;


    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);


        FacebookSdk.sdkInitialize(getApplicationContext());
        callbackManager = CallbackManager.Factory.create();
        accessTokenTracker = new AccessTokenTracker() {
           @Override
            protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) {

            }
        };

        setContentView(R.layout.activity_main);
 }

activity_main.xml:

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools"
android:layout_width="match_parent"
android:layout_height="match_parent"
android:background="@drawable/bg"
android:orientation="vertical"
android:weightSum="1">

<ImageView
    android:layout_width="300dp"
    android:layout_height="100dp"
    android:layout_gravity="center"
    android:src="@drawable/banner" />

<fragment
    android:layout_width="match_parent"
    android:layout_height="wrap_content"
    android:name="com.moviere.MainFragment"
    android:id="@+id/fragment"
    android:layout_gravity="center_horizontal"
    android:layout_weight="0.17" />

fragment_main.xml:

<FrameLayout xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" android:layout_width="match_parent"
android:layout_height="match_parent" tools:context="com.moviere.MainFragment">


<TextView android:layout_width="match_parent" android:layout_height="match_parent"
    android:text="@string/hello_blank_fragment"
    android:gravity="center_horizontal" />

<com.facebook.widget.LoginButton
    android:id="@+id/login_button"
    android:layout_width="250dp"
    android:layout_height="wrap_content"
    android:layout_gravity="center_horizontal|top"
    android:layout_marginTop="30dp" />

and at last MainFragment.java:

public class MainFragment extends Fragment {

private CallbackManager callbackManager;
private LoginButton loginButton;

public MainFragment() {
    // Required empty public constructor
}

@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container,
Bundle savedInstanceState) {
    View view = inflater.inflate(R.layout.fragment_main, container, false);

    loginButton = (LoginButton) view.findViewById(R.id.login_button);
    loginButton.setReadPermissions("user_friends");
    // If using in a fragment
    loginButton.setFragment(this);
    // Other app specific specialization
// Callback registration
    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
        @Override
        public void onSuccess(LoginResult loginResult) {
            Toast.makeText(getActivity(),"Success",Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onCancel() {
            Toast.makeText(getActivity(),"fail",Toast.LENGTH_SHORT).show();
        }

        @Override
        public void onError(FacebookException exception) {
            Toast.makeText(getActivity(),"error", Toast.LENGTH_SHORT).show();
        }
    });
    return view;
}

Редактиране: Android Manifest.xml

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
package="com.moviere" >
<uses-permission android:name="android.permission.INTERNET"/>
<application
    android:allowBackup="true"
    android:icon="@mipmap/ic_launcher"
    android:label="@string/app_name"
    android:theme="@style/AppTheme" >
    <activity
        android:name=".MainActivity"
        android:label="@string/app_name" >
        <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/>
        <intent-filter>
            <action android:name="android.intent.action.MAIN" />

            <category android:name="android.intent.category.LAUNCHER" />
        </intent-filter>
    </activity>
    <activity android:name="com.facebook.FacebookActivity"
        android:configChanges=
            "keyboard|keyboardHidden|screenLayout|screenSize|orientation"
        android:theme="@android:style/Theme.Translucent.NoTitleBar"
        android:label="@string/app_name" />
</application>


person linous    schedule 29.03.2015    source източник
comment
Опитайте се да погледнете вашия LogCat дневник, вместо дневник за изграждане. Може да намерите съобщение за грешка там. Също така опитайте да поискате разрешение за public_profile вместо user_friends.   -  person VadymVL    schedule 30.03.2015
comment
Logcat показва само това: threadid=1: нишката излиза с неуловено изключение (group=0x41c96c50) . Потърсих го в Google и той казва, че може би използвам персонализиран пакет и го декларирам в Android Manifest. Освен фейсбук, не използвам нищо друго.   -  person linous    schedule 30.03.2015
comment
Декларирахте ли SDK за facebook в Манифест?   -  person VadymVL    schedule 30.03.2015
comment
да, прикачих манифеста и в оригиналната си публикация.   -  person linous    schedule 30.03.2015
comment
Това, което виждам, е, че сте добавили meta-data във вашата дейност, вместо application таг. От връзката по-горе: 5. Добавете елемент с метаданни към елемента на приложението:   -  person VadymVL    schedule 30.03.2015
comment
Прав си, добавих го в ‹приложение›, но изключението е все същото.   -  person linous    schedule 30.03.2015
comment
Трудно е да се каже какво не е наред, без определена грешка в кода. Това, което мога да кажа, е, че последният 4.0 SDK за Android е доста бъгав, и аз имам някои проблеми с него.   -  person VadymVL    schedule 30.03.2015
comment
Този видеоклип ми помогна да създам бутон за влизане във Facebook за моето приложение ‹ youtube.com/watch?v =myWu-q8Q2NA › надявам се, че може да помогне на някой друг :) ...   -  person Anitha    schedule 19.05.2015


Отговори (4)


Също така срещам този проблем, когато изучавам facebook 4.0 и опитам отново с android studio, установих, че приложението ще се срине, ако

loginButton.registerCallback(callbackManager.....

callbackManager е null, затова сложих

callbackManager = CallbackManager.Factory.create();

преди

loginButton.registerCallback(callbackManager.....

след това го стартирайте, работи, надявам се, че може да ви помогне

моята проста демонстрация: https://github.com/oliguo/android-facebook

person Oliver Guo    schedule 31.03.2015
comment
Може би поставете 'callbackManager = CallbackManager.Factory.create();' във вашия фрагмент oncreateview функция - person Oliver Guo; 31.03.2015
comment
@linous може би можете да разклоните моята демонстрация, за да го тествате - person Oliver Guo; 07.04.2015

Добавихте всичко необходимо за интегриране на Facebook SDK, но има малък проблем с позиционирането на кода.

Използвате LoginButton във фрагмент, но инициализирате FacebookSdk с екземпляр на Activity. Не е нужно да правите нищо в дейността, просто актуализирайте кода на вашия фрагмент по следния начин:

...
@Override
public View onCreateView(LayoutInflater inflater,ViewGroup container, Bundle savedInstanceState) {
    FacebookSdk.sdkInitialize(this);
    callbackManager = CallbackManager.Factory.create();        
    View view = inflater.inflate(R.layout.fragment_main, container, false);

    loginButton = (LoginButton) view.findViewById(R.id.login_button);
    loginButton.setReadPermissions("user_friends");
    loginButton.setFragment(this);

    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
    ...
    }
}

@Override
... onActivityResult(...) {
    super.onActivityResult(...);
    callbackManager.onActivityResult(...);
}

Освен това стартирайте метода ProfileTracker/AccessTokenTracker от onSuccess() за обратно извикване при влизане, спрете в onCancel() и onDestroy().

person Ankit Bansal    schedule 31.03.2015

може би ви липсва атрибутът на facebook "xmlns:facebook="http://schemas.android.com/apk/res-auto" във fragment_main.xml.

<FrameLayout 
xmlns:android="http://schemas.android.com/apk/res/android"
xmlns:tools="http://schemas.android.com/tools" 
xmlns:facebook="http://schemas.android.com/apk/res-auto
android:layout_width="match_parent"
android:layout_height="match_parent" tools:context="com.moviere.MainFragment">

Ако не работи, току-що отговорих на въпрос с помощта на бутона за влизане.

Въпрос с отговор

person schwertfisch    schedule 05.04.2015

Отговорих на този въпрос в тази публикация, моля, проверете отговорът съответно и сравнете с вашия код.

person Community    schedule 31.03.2015