2016-05-09 20 views
0

我做了與Facebook登錄在活動如何修正錯誤 - 登錄facebook

private CallbackManager callbackManager; 
private LoginButton loginFBButton; 

@Override 
protected void onCreate(Bundle savedInstanceState) { 
    super.onCreate(savedInstanceState); 
    setContentView(LAYOUT); 

    callbackManager = CallbackManager.Factory.create(); 
    loginFBButton = (LoginButton) findViewById(R.id.loginFBButton); 
    loginFBButton.setReadPermissions(Arrays.asList("email", "public_profile")); 
    loginFBButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 
      final String accessToken = loginResult.getAccessToken().getToken(); 
      LogTag.v("onSuccess - getToken - " + accessToken); 
      GraphRequest request = GraphRequest.newMeRequest(
        loginResult.getAccessToken(), 
        new GraphRequest.GraphJSONObjectCallback() { 
         @Override 
         public void onCompleted(JSONObject object, GraphResponse response) { 
          LogTag.v("onSuccess - " + response.toString()); 

          // Application code 
          try { 
           String email = object.getString("email"); 
           LogTag.v("email - " + email); 
           String name = object.getString("name"); 
           LogTag.v("name - " + name); 
           saveUserData(name, email, accessToken); 
          } catch (JSONException e) { 
           e.printStackTrace(); 
          } 
         } 
        }); 
      Bundle parameters = new Bundle(); 
      parameters.putString("fields", "id,name,email,gender,birthday"); 
      request.setParameters(parameters); 
      request.executeAsync(); 
     } 

     @Override 
     public void onCancel() { 
      LogTag.v("onCancel"); 
     } 

     @Override 
     public void onError(FacebookException error) { 
      LogTag.v("onError - " + error.getMessage()); 
     } 
    }); 
} 

@Override 
protected void onActivityResult(int requestCode, int resultCode, Intent data) { 
    super.onActivityResult(requestCode, resultCode, data); 
    callbackManager.onActivityResult(requestCode, resultCode, data); 
} 
在gradle這個

dependencies { compile 'com.facebook.android:facebook-android-sdk:4.11.0' } 

在AndroidManifest

<?xml version="1.0" encoding="utf-8"?> <manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.example"> 
<uses-permission android:name="android.permission.INTERNET" /> 
<uses-permission android:name="android.permission.ACCESS_NETWORK_STATE" /> 
<uses-permission android:name="android.permission.ACCESS_WIFI_STATE" /> 
<application 
    android:name=".application.MyApp" 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme"> 
    <meta-data 
     android:name="com.facebook.sdk.ApplicationId" 
     android:value="@string/facebook_app_id" /> 
    <activity 
     android:name=".activity.ActivitySignIn" 
     android:label="@string/app_name" 
     android:screenOrientation="portrait"> 
     <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" 
     android:theme="@android:style/Theme.Translucent.NoTitleBar" /> 
</application> 

在MyApp的

public class MyApp extends Application { 
@Override 
public void onCreate() { 
    super.onCreate(); 
    FacebookSdk.sdkInitialize(getApplicationContext()); 
} } 

但它並不總是工作在4.4.2-正常,在電話(5.1)中一個正常,另一個在登錄後掛起一個進度條,在該進度條下有一個確認訪問個人信息的通知數據,然後觸發onCancel

在您的手機,它可能會在日誌中的錯誤顯示的鏈接消息:

{  "error": { 
    "message": "An access token is required to request this resource.", 
    "type": "OAuthException", 
    "code": 104, 
    "fbtrace_id": "AV/53FbmMya"  } } 

問題是什麼?如何解決它?

回答

0

試試這段代碼我在片段中使用。

FacebookSdk.sdkInitialize(getActivity()); 
    callbackManager = CallbackManager.Factory.create(); 
    LoginManager.getInstance().registerCallback(callbackManager, 
      new FacebookCallback<LoginResult>() { 
       @Override 
       public void onSuccess(LoginResult loginResult) { 
        // App code 
        accessToken = loginResult.getAccessToken() 
          .getToken(); 
        Log.i("accessToken", accessToken); 



       } 

       @Override 
       public void onCancel() { 
        // App code 
        Toast.makeText(getActivity(), "on Cancel", Toast.LENGTH_SHORT).show(); 
       } 

       @Override 
       public void onError(FacebookException exception) { 
        // App code 
        Toast.makeText(getActivity(), "on Error", Toast.LENGTH_SHORT).show(); 
        IRoidAppHelper.Log("FacebokkError", exception.toString()); 
       } 
      });` 
+0

運行你的代碼後,我有同樣的問題。 –

+0

它的錯誤是什麼? –

+0

只是刪除應用程序類中初始化的Fb SDK –