К сожалению, приложение остановило вход в Facebook - PullRequest
0 голосов
/ 14 сентября 2018

У меня есть вход в Google. И сейчас я пытаюсь добавить вход в Facebook с помощью API Facebook. Но приложение открывается при попытке открыть. "К сожалению, testigninin остановился"

Также Java-тестер отображает предупреждающее сообщение. При сборке ошибки нет.

C:\Users\mertg\Desktop\testsignin\app\src\main\java\com\mertg\testsignin\Anamain.java:
uses or overrides a deprecated API.
Recompile with -Xlint:deprecation for details.

Я видел эту строку в журнале отладки

Caused by: The SDK has not been initialized, make sure to call FacebookSdk.sdkInitialize() first.

но теперь нам не нужно инициализировать SDK facebook (после 4.2), и он автоматически вызывается. Поэтому я не добавляю FacebookSdk.sdkInitialize (getApplicationContext ()) по этой причине. Источник

Я не могу понять, в чем проблема.

Журнал отладки

                      --------- beginning of crash
    E/AndroidRuntime: FATAL EXCEPTION: main
                      Process: com.mertg.testsignin, PID: 4723
                      java.lang.RuntimeException: Unable to start activity ComponentInfo{com.mertg.testsignin/com.mertg.testsignin.Anamain}: android.view.InflateException: Binary XML file line #25: Error inflating class com.facebook.login.widget.LoginButton
                          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2325)
                          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387)
                          at android.app.ActivityThread.access$800(ActivityThread.java:151)
                          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303)
                          at android.os.Handler.dispatchMessage(Handler.java:102)
                          at android.os.Looper.loop(Looper.java:135)
                          at android.app.ActivityThread.main(ActivityThread.java:5254)
                          at java.lang.reflect.Method.invoke(Native Method)
                          at java.lang.reflect.Method.invoke(Method.java:372)
                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903)
                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698)
                       Caused by: android.view.InflateException: Binary XML file line #25: Error inflating class com.facebook.login.widget.LoginButton
                          at android.view.LayoutInflater.createView(LayoutInflater.java:633)
                          at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743)
                          at android.view.LayoutInflater.rInflate(LayoutInflater.java:806)
                          at android.view.LayoutInflater.rInflate(LayoutInflater.java:809)
                          at android.view.LayoutInflater.inflate(LayoutInflater.java:504)
                          at android.view.LayoutInflater.inflate(LayoutInflater.java:414)
                          at android.view.LayoutInflater.inflate(LayoutInflater.java:365)
                          at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287)
                          at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139)
                          at com.mertg.testsignin.Anamain.onCreate(Anamain.java:65)
                          at android.app.Activity.performCreate(Activity.java:5990)
                          at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106)
                          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278)
                          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
                          at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
                          at android.os.Handler.dispatchMessage(Handler.java:102) 
                          at android.os.Looper.loop(Looper.java:135) 
                          at android.app.ActivityThread.main(ActivityThread.java:5254) 
                          at java.lang.reflect.Method.invoke(Native Method) 
                          at java.lang.reflect.Method.invoke(Method.java:372) 
                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
                       Caused by: java.lang.reflect.InvocationTargetException
                          at java.lang.reflect.Constructor.newInstance(Native Method)
                          at java.lang.reflect.Constructor.newInstance(Constructor.java:288)
                          at android.view.LayoutInflater.createView(LayoutInflater.java:607)
                          at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743) 
                          at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
                          at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) 
                          at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
                          at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
                          at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
                          at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287) 
                          at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139) 
                          at com.mertg.testsignin.Anamain.onCreate(Anamain.java:65) 
                          at android.app.Activity.performCreate(Activity.java:5990) 
                          at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
                          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 
                          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
                          at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
                          at android.os.Handler.dispatchMessage(Handler.java:102) 
                          at android.os.Looper.loop(Looper.java:135) 
                          at android.app.ActivityThread.main(ActivityThread.java:5254) 
                          at java.lang.reflect.Method.invoke(Native Method) 
                          at java.lang.reflect.Method.invoke(Method.java:372) 
                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
                       Caused by: The SDK has not been initialized, make sure to call FacebookSdk.sdkInitialize() first.
                          at com.facebook.internal.Validate.sdkInitialized(Validate.java:144)
                          at com.facebook.AccessTokenTracker.<init>(AccessTokenTracker.java:58)
                          at com.facebook.login.widget.LoginButton$2.<init>(LoginButton.java:607)
                          at com.facebook.login.widget.LoginButton.configureButton(LoginButton.java:607)
                          at com.facebook.FacebookButtonBase.<init>(FacebookButtonBase.java:66)
                          at com.facebook.login.widget.LoginButton.<init>(LoginButton.java:220)
                          at java.lang.reflect.Constructor.newInstance(Native Method) 
                          at java.lang.reflect.Constructor.newInstance(Constructor.java:288) 
                          at android.view.LayoutInflater.createView(LayoutInflater.java:607) 
                          at android.view.LayoutInflater.createViewFromTag(LayoutInflater.java:743) 
                          at android.view.LayoutInflater.rInflate(LayoutInflater.java:806) 
                          at android.view.LayoutInflater.rInflate(LayoutInflater.java:809) 
                          at android.view.LayoutInflater.inflate(LayoutInflater.java:504) 
                          at android.view.LayoutInflater.inflate(LayoutInflater.java:414) 
                          at android.view.LayoutInflater.inflate(LayoutInflater.java:365) 
                          at android.support.v7.app.AppCompatDelegateImplV9.setContentView(AppCompatDelegateImplV9.java:287) 
                          at android.support.v7.app.AppCompatActivity.setContentView(AppCompatActivity.java:139) 
                          at com.mertg.testsignin.Anamain.onCreate(Anamain.java:65) 
                          at android.app.Activity.performCreate(Activity.java:5990) 
                          at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1106) 
                          at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2278) 
                          at android.app.ActivityThread.handleLaunchActivity(ActivityThread.java:2387) 
                          at android.app.ActivityThread.access$800(ActivityThread.java:151) 
                          at android.app.ActivityThread$H.handleMessage(ActivityThread.java:1303) 
                          at android.os.Handler.dispatchMessage(Handler.java:102) 
                          at android.os.Looper.loop(Looper.java:135) 
                          at android.app.ActivityThread.main(ActivityThread.java:5254) 
                          at java.lang.reflect.Method.invoke(Native Method) 
                          at java.lang.reflect.Method.invoke(Method.java:372) 
                          at com.android.internal.os.ZygoteInit$MethodAndArgsCaller.run(ZygoteInit.java:903) 
                          at com.android.internal.os.ZygoteInit.main(ZygoteInit.java:698) 
    V/FA: Checking service availability
    V/FA: Service available
          Setting useService: true
    V/FA: Connecting to remote service
    V/FA: Connection attempt already in progress
    I/Process: Sending signal. PID: 4723 SIG: 9
    Connected to the target VM, address: 'localhost:8619', transport: 'socket'
    Disconnected from the target VM, address: 'localhost:8619', transport: 'socket'

Manifest

<?xml version="1.0" encoding="utf-8"?>
<manifest xmlns:android="http://schemas.android.com/apk/res/android"
    package="com.mertg.testsignin">

    <uses-permission android:name="android.permission.INTERNET" />
    <uses-permission android:name="com.android.vending.BILLING" />

    <application
        android:allowBackup="true"
        android:icon="@mipmap/ic_launcher"
        android:label="@string/app_name"
        android:roundIcon="@mipmap/ic_launcher_round"
        android:supportsRtl="true"
        android:theme="@style/AppTheme">
        <activity android:name=".Anamain">
            <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:label="@string/app_name" />
        <activity
            android:name="com.facebook.CustomTabActivity"
            android:exported="true">
            <intent-filter>
                <action android:name="android.intent.action.VIEW" />
                <category android:name="android.intent.category.DEFAULT" />
                <category android:name="android.intent.category.BROWSABLE" />
                <data android:scheme="@string/fb_login_protocol_scheme" />
            </intent-filter>
        </activity>

    </application>

</manifest>

Gradle (приложение)

apply plugin: 'com.android.application'

android {
    compileSdkVersion 27
    defaultConfig {
        applicationId "com.mertg.testsignin"
        minSdkVersion 17
        targetSdkVersion 27
        versionCode 1
        versionName "1.0"
        testInstrumentationRunner "android.support.test.runner.AndroidJUnitRunner"
    }







    buildTypes {
        release {
            minifyEnabled false
            proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
        }
    }

    lintOptions {
        checkReleaseBuilds false
    }
}

dependencies {
    implementation fileTree(include: ['*.jar'], dir: 'libs')
    implementation 'com.android.support:appcompat-v7:27.1.0'
    implementation 'com.android.support.constraint:constraint-layout:1.1.0'
    implementation 'com.google.firebase:firebase-core:15.0.2'
    implementation 'com.github.jd-alexander:android-flat-button:v1.1'
    implementation 'com.anjlab.android.iab.v3:library:1.0.44'
    implementation 'com.google.firebase:firebase-auth:15.0.0'
    implementation 'com.google.firebase:firebase-database:15.0.0'
    implementation 'com.google.android.gms:play-services-ads:15.0.0'
    implementation 'com.google.android.gms:play-services-auth:15.0.0'
    implementation 'com.google.firebase:firebase-messaging:15.0.2'
    implementation 'com.github.florent37:materialtextfield:1.0.7'
    implementation 'com.facebook.android:facebook-android-sdk:[4,5)'
    testImplementation 'junit:junit:4.12'
    androidTestImplementation 'com.android.support.test:runner:1.0.2'
    androidTestImplementation 'com.android.support.test.espresso:espresso-core:3.0.2'
    implementation 'com.android.support:design:27.1.0'
}
apply plugin: 'com.google.gms.google-services'

Полный код

package com.mertg.testsignin;

import android.app.ProgressDialog;
import android.content.Intent;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;

import android.util.Log;
import android.view.View;
import android.widget.Toast;


import com.facebook.FacebookException;
import com.facebook.login.LoginResult;
import com.facebook.login.widget.LoginButton;
import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignIn;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInClient;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.common.ConnectionResult;

import com.google.android.gms.common.SignInButton;
import com.google.android.gms.common.api.ApiException;
import com.google.android.gms.common.api.CommonStatusCodes;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.GoogleApiClient.ConnectionCallbacks;
import com.google.android.gms.common.api.GoogleApiClient.OnConnectionFailedListener;
import com.google.android.gms.tasks.OnCompleteListener;
import com.google.android.gms.tasks.Task;
import com.google.firebase.auth.AuthCredential;
import com.google.firebase.auth.AuthResult;
import com.google.firebase.auth.FirebaseAuth;
import com.google.firebase.auth.FirebaseUser;
import com.google.firebase.auth.GoogleAuthProvider;
import com.google.firebase.database.DatabaseReference;
import com.google.firebase.database.FirebaseDatabase;
import com.facebook.FacebookSdk;
import com.facebook.appevents.AppEventsLogger;
import com.facebook.AccessToken;
import com.facebook.CallbackManager;
import com.facebook.FacebookCallback;

import java.util.Arrays;


public class Anamain extends AppCompatActivity {


    private String TAG = "Anamain";
    private SignInButton signIn;
    GoogleSignInClient mGoogleSignInClient;
    private int RC_SIGN_IN = 1;
    private FirebaseAuth mAuth;
    FirebaseDatabase database = FirebaseDatabase.getInstance();
    DatabaseReference dataref = database.getReference();
    CallbackManager callbackManager;
    ProgressDialog mDialog;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_anamain);



        signIn = (SignInButton)findViewById(R.id.googleBtn);

        mAuth = FirebaseAuth.getInstance();

        callbackManager = CallbackManager.Factory.create();

        LoginButton loginButton = (LoginButton)findViewById(R.id.login_button);
        loginButton.setReadPermissions(Arrays.asList("public_profile"));

        loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() {
            @Override
            public void onSuccess(LoginResult loginResult) {
                Toast.makeText(Anamain.this, "Welcome", Toast.LENGTH_SHORT).show();
                String accestoken = loginResult.getAccessToken().getToken();
            }

            @Override
            public void onCancel() {
                Toast.makeText(Anamain.this, "Cancaled", Toast.LENGTH_SHORT).show();
            }

            @Override
            public void onError(FacebookException error) {
                Toast.makeText(Anamain.this, "Error", Toast.LENGTH_SHORT).show();
            }
        });

        if(AccessToken.getCurrentAccessToken() != null)
        {
            Toast.makeText(this, "You're already sign-in wih Facebook" , Toast.LENGTH_SHORT).show();
        }

        // Configure sign-in to request the user's ID, email address, and basic
// profile. ID and basic profile are included in DEFAULT_SIGN_IN.
        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestIdToken(getString(R.string.default_web_client_id))
                .requestEmail()
                .build();

        mGoogleSignInClient = GoogleSignIn.getClient(this, gso);

        signIn.setOnClickListener(new View.OnClickListener() {
            @Override
            public void onClick(View view) {
                signIn();
            }
        });


    }



    private void signIn() {
        Intent signInIntent = mGoogleSignInClient.getSignInIntent();
        startActivityForResult(signInIntent, RC_SIGN_IN);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
        if (requestCode == RC_SIGN_IN) {
            Task<GoogleSignInAccount> task = GoogleSignIn.getSignedInAccountFromIntent(data);
            try {
                // Google Sign In was successful, authenticate with Firebase
                GoogleSignInAccount account = task.getResult(ApiException.class);
                firebaseAuthWithGoogle(account);

            } catch (ApiException e) {
                // Google Sign In failed, update UI appropriately
                Log.w(TAG, "Google sign in failed", e);


                // ...
            }
        }
    }



    private void firebaseAuthWithGoogle(GoogleSignInAccount acct) {
        Log.d("TAG", "signInWithCredential:success" + acct.getId());

        AuthCredential credential = GoogleAuthProvider.getCredential(acct.getIdToken(), null);
        mAuth.signInWithCredential(credential).addOnCompleteListener(this, new OnCompleteListener<AuthResult>() {
            @Override
            public void onComplete(@NonNull Task<AuthResult> task) {
                boolean isNewUser = task.getResult().getAdditionalUserInfo().isNewUser();
                if (isNewUser) {
                    Toast.makeText(Anamain.this, "Welcome to the Brotherhood", Toast.LENGTH_SHORT).show();
                    Log.d(TAG, "Is New User!");
                    FirebaseUser user = mAuth.getCurrentUser();
                    //Create defult variable for new user
                    dataref.child("Members").child(mAuth.getCurrentUser().getUid()).child("VIP").setValue("No");
                } else {
                    Toast.makeText(Anamain.this, "Welcome again brother", Toast.LENGTH_SHORT).show();
                    Log.d(TAG, "Is Old User!");
                    FirebaseUser user = mAuth.getCurrentUser();
                }
            }

        });

    }

    private void updateUI(FirebaseUser user) {
        GoogleSignInAccount acct = GoogleSignIn.getLastSignedInAccount(getApplicationContext());
        if(acct != null)    {
            String personName = acct.getDisplayName();

            Toast.makeText(this, "Sen Girdin" + personName, Toast.LENGTH_SHORT).show();
        }
    }

}
...