1

Ich mache Facebook-Integration in meinem Projekt. aber das Problem ist, wenn ich auf die Facebook-Login-Taste klicke, es zeigt Laden und Retrun auf den Hauptbildschirm. Kann mir jemand sagen, was ist das Problem?In Facebook Integration, wenn ich auf den Login-Button klicke, zeigt es Laden und kehrt zum Hauptbildschirm zurück?

Das ist mein MainActivity ist: -

public class MainActivity extends AppCompatActivity { 

    private FacebookData mFacebookData; 
    private Button mLoginButton; 

    @Override 
    protected void onCreate(Bundle savedInstanceState) { 
     super.onCreate(savedInstanceState); 
     setContentView(R.layout.activity_main); 
     mFacebookData = new FacebookData(); 
     mLoginButton = (Button) findViewById(R.id.button); 

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

    private void callFacebookLogin() { 

     Session session = Session.getActiveSession(); 
     if (session != null) { 
      Log.e("session :", "session already build"); 


      Request request = Request.newMeRequest(session, new Request.GraphUserCallback() { 
       @Override 
       public void onCompleted(GraphUser user, Response response) { 

        if (user != null) { 

         String str = user.getName(); 

         try { 


          String id = user.getId(); 
          String firstname = user.getFirstName(); 
          String lastname = user.getLastName(); 
          String pic = "http://graph.facebook.com/" + id + "/picture?type=large"; 
          Log.e("id....", id); 
          Log.e("firstname....", firstname); 

          mFacebookData.setId(id); 
          mFacebookData.setFirstname(firstname); 
          mFacebookData.setLastname(lastname); 
          mFacebookData.setPicture(pic); 


         } catch (Exception e) { 

          e.printStackTrace(); 
         } 


        } 


       } 
      }); 
      Request.executeBatchAsync(request); 
     } else { 

      Session.openActiveSession(MainActivity.this, true, new Session.StatusCallback() { 
       @Override 
       public void call(Session session, SessionState state, Exception exception) { 


        if (session.isOpened()) { 
         if (state == SessionState.OPENED) { 

          Request request = Request.newMeRequest(session, new Request.GraphUserCallback() { 
           @Override 
           public void onCompleted(GraphUser user, Response response) { 


            if (user != null) { 

             String str = user.getName(); 


            } 

            try { 

             String id = user.getId(); 
             String firstname = user.getFirstName(); 
             String lastname = user.getLastName(); 
             String pic = "http://graph.facebook.com/" 
               + id 
               + "/picture?type=large"; 


             mFacebookData.setId(id); 
             mFacebookData.setFirstname(firstname); 
             mFacebookData.setLastname(lastname); 
             mFacebookData.setPicture(pic); 


            } catch (Exception e) { 

             e.printStackTrace(); 
            } 


           } 
          }); 

          Request.executeBatchAsync(request); 
         } 

        } 


       } 
      }); 


     } 

    } 
} 

Das ist mein Manifest ist: -

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

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


    <application 
     android:allowBackup="true" 
     android:icon="@mipmap/ic_launcher" 
     android:label="@string/app_name" 
     android:supportsRtl="true" 
     android:theme="@style/AppTheme"> 
     <activity android:name=".MainActivity"> 
      <intent-filter> 
       <action android:name="android.intent.action.MAIN" /> 

       <category android:name="android.intent.category.LAUNCHER" /> 
      </intent-filter> 
     </activity> 

     <activity 
      android:name="com.facebook.LoginActivity" 
      android:screenOrientation="portrait" /> 

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


    </application> 

</manifest> 

Das ist mein Logcat: -

09-27 10:35:24.405 20441-20615/com.example.aaa.examplepractise E/ActivityThread: Failed to find provider info for com.facebook.katana.provider.AttributionIdProvider 
09-27 10:35:24.582 20441-20441/com.example.aaa.examplepractise E/ActivityThread: Failed to find provider info for com.facebook.katana.provider.PlatformProvider 
09-27 10:35:24.583 20441-20441/com.example.aaa.examplepractise E/ActivityThread: Failed to find provider info for com.facebook.wakizashi.provider.PlatformProvider 
+0

justpost, was Sie bekommen Logcat .. set Anmelden onActivityResult Funktion –

+0

Auch Facebook hat die SDK-Version auf 4 geändert.0 + in denen sie an Fragmenten nicht in Aktivität arbeiten Ich denke, Sie verwenden alte Version –

+0

@PreetikaKaur Ich aktualisierte meinen Code. Bitte sehen Sie sich den Logcat an. Ich denke, es gibt keinen Fehler. Und ich verwende Aktivität nicht das Fragment. Soll ich Fragment anstelle der Aktivität verwenden. – aarav

Antwort

0

Dies aufgrund des folgenden passieren kann Gründe:

  1. Sie sind nicht mit dem Internet verbunden
  2. Sie haben für den Internetzugang (Manifest.xml)
  3. Sie haben keine korrekte hashkey für die App
  4. Sie haben keine richtige App Id bieten
  5. nicht die Erlaubnis gegeben, verwendet

Probieren Sie die neueste Methode

In Ihrem Fragment Klasse zu tun sind dies:

private FacebookCallback<LoginResult> mFacebookCallback = new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      Log.d("Login", "onSuccess"); 
       GraphRequest.newMeRequest(
         loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { 
          @Override 
          public void onCompleted(JSONObject me, GraphResponse response) { 
           if (response.getError() != null) { 
            // handle error 
           } else { 
            email = me.optString("email"); 
            String id = me.optString("id"); 
            String social_id=me.optString("id"); 
            String name= me.optString("name"); 
            String gender= me.optString("gender"); 
            boolean verified_user= me.optBoolean("is_verified");         
           } 
          } 
         }).executeAsync(); 
      } 


      @Override 
      public void onCancel() { 
       Log.d("Login", "onCancel"); 
      } 

      @Override 
      public void onError (FacebookException e){ 
       Log.d("Login", "onError " + e); 

      } 
     }; 

In oncreateView Verfahren umfassen unter Code:

btn_facebook = (LoginButton) v.findViewById(R.id.btn_fb); 
      btn_facebook.setFragment(this); 
      btn_facebook.setReadPermissions(Arrays.asList("public_profile, email,user_friends")); 
      btn_facebook.registerCallback(mCallbackManager, mFacebookCallback); 

In oncreate Methode folgenden Code hinzu:

FacebookSdk.sdkInitialize(getContext()); 
     mCallbackManager = CallbackManager.Factory.create(); 
     setupTokenTracker(); 
     setupProfileTracker(); 

       mTokenTracker.startTracking(); 
     mProfileTracker.startTracking(); 

     try { 

      PackageInfo info = getActivity().getPackageManager().getPackageInfo("package name here", PackageManager.GET_SIGNATURES); 
      for (Signature signature : info.signatures) { 
       MessageDigest md = MessageDigest.getInstance("SHA"); 
       md.update(signature.toByteArray()); 
       // Log.e("Key", Base64.encodeToString(md.digest(), Base64.DEFAULT)); 
      } 
     } catch (Exception ex) { 
      StringWriter errors = new StringWriter(); 
      ex.printStackTrace(new PrintWriter(errors)); 
      // Log.e("Error", errors.toString()); 

     } 

TokenTracker und PRofileTracker Methoden:

private void setupTokenTracker() { 
     mTokenTracker = new AccessTokenTracker() { 
      @Override 
      protected void onCurrentAccessTokenChanged(AccessToken oldAccessToken, AccessToken currentAccessToken) { 
       // Log.d("VIVZ", "" + currentAccessToken); 
      } 
     }; 
    } 

    private void setupProfileTracker() { 
     mProfileTracker = new ProfileTracker() { 
      @Override 
      protected void onCurrentProfileChanged(Profile oldProfile, Profile currentProfile) { 
       // Log.d("VIVZ", "" + currentProfile); 

      } 
     }; 
    } 

In onActivityResult finden Sie Daten erhalten Fügen Sie also Folgendes hinzu:

@Override 
    public void onActivityResult(int requestCode, int resultCode, Intent data) { 
     super.onActivityResult(requestCode, resultCode, data); 
     // Log.e("info", "onActivityResult:" + requestCode + ":" + resultCode + ":" + data); 
     Bundle bundle = data.getExtras(); 
     for (String key : bundle.keySet()) { 
      Object value = bundle.get(key); 
     }  
      mCallbackManager.onActivityResult(requestCode, resultCode, data); 

    } 

In Gradle Datei fügen Sie die folgende Abhängigkeit:

Kompilierung 'com.facebook.android:facebook-android-sdk:4.0.0'

In xml umfassen Schaltfläche wie unten:

<com.facebook.login.widget.LoginButton 
        android:id="@+id/btn_fb" 
        android:layout_width="0dp" 
        android:layout_height="match_parent" 
        android:layout_margin="1dp" 
        android:layout_weight="1" 
        android:gravity="center" 
        android:singleLine="true" 
        android:textColor="@color/white" 
        android:textSize="16sp" 
        fb:login_text="@string/facebook" 
        fb:logout_text="@string/facebook" /> 

In Manifest hinzufügen unter Berechtigungen und Metadaten und Aktivitäts-Tag:

<uses-permission android:name="android.permission.INTERNET" /> 
    <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/> 
<activity 
      android:name="com.facebook.FacebookActivity" 
      android:label="title_facebook_login" /> 

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

Fügen Sie das Fragment zur Aktivität hinzu und führen Sie den Code aus. Ich hoffe, es hilft mir, wenn es nötig ist, etwas anderes zu fragen.

+0

Ich befolge den oben genannten Schritt richtig. aber in meinem Fall, wenn ich auf den Login-Button klicke, wird das Laden für einige Zeit angezeigt und es wird zum Hauptbildschirm zurückgekehrt. – aarav

+1

com.github.asne.facebook: facebook: 3.17.2 "Sie benutzen das alte, wenn Sie sagen, soll ich Ihnen einen neuen Code geben, den ich benutze? Das Neueste ist 4.0 und Sie verwenden 3.17. Darüber hinaus bietet Facebook einen einfachen Schritt, um soziale Anmeldung zu integrieren, warum es notwendig ist, dritte Partei für diese –

+0

Yeah sure! teile deinen Code bitte! weil ich ein bisschen verwirrt bin. – aarav

Verwandte Themen