2017-02-18 40 views
0

我有一个登录在android的问题。我在android facebook sdk中稍微有点新。在我的模拟器Facebook登录工作正常,但在真实的手机它不起作用。我也试过7.0,它也使模拟器的问题。我在网上找不到任何相同的问题。所以这是我的错误信息。Facebook的登录按钮不能在Android上工作5.0

感谢您的帮助。

java.lang.NoClassDefFoundError: Failed resolution of: Landroid/support/customtabs/CustomTabsIntent$Builder; 
        at com.facebook.internal.CustomTab.openCustomTab(CustomTab.java:47) 
        at com.facebook.CustomTabMainActivity.onCreate(CustomTabMainActivity.java:67) 
        at android.app.Activity.performCreate(Activity.java:6662) 
        at android.app.Instrumentation.callActivityOnCreate(Instrumentation.java:1118) 
        at android.app.ActivityThread.performLaunchActivity(ActivityThread.java:2599) 

也是我在下面的代码..

*

该代码可以使用模拟器和低于5.0版本的机器人。一些人认为它可以与chrome-custom tab相关。但它>适用于镀铬安装设备。

*

这是我的清单文件

<?xml version="1.0" encoding="utf-8"?> 
<manifest xmlns:android="http://schemas.android.com/apk/res/android" 
package="com.wrexsoft.canturgut.mobileclassapp"> 
<uses-permission android:name="android.permission.INTERNET"/> 
<application 
    android:allowBackup="true" 
    android:icon="@mipmap/ic_launcher" 
    android:label="@string/app_name" 
    android:supportsRtl="true" 
    android:theme="@style/AppTheme.NoActionBar"> 
    <meta-data android:name="com.facebook.sdk.ApplicationId" android:value="@string/facebook_app_id"/> 
    <activity 
     android:name=".OpenScreen" 
     android:label="Init Activity" 
     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=".SignInScreen"></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> 

这是我的活动Java文件...

public class OpenScreen extends AppCompatActivity { 


TextView headline; 

Button openScreen_button_signin; 
Button openScreen_button_kusignin; 
private CallbackManager callbackManager; 

private DatabaseReference patideDatabase; 

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

    setContentView(R.layout.activity_open_screen); 

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



    patideDatabase = FirebaseDatabase.getInstance().getReference(); 
    callbackManager = CallbackManager.Factory.create(); 

    loginButton.registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 

      Toast.makeText(getBaseContext(), "SUCCESS", Toast.LENGTH_LONG).show(); 


     } 

     @Override 
     public void onCancel() { 
      Toast.makeText(getBaseContext(), "CANCEL", Toast.LENGTH_LONG).show(); 
     } 

     @Override 
     public void onError(FacebookException exception) { 
      Toast.makeText(getBaseContext(), exception.toString(), Toast.LENGTH_LONG).show(); 
     } 
    }); 

    LoginManager.getInstance().registerCallback(callbackManager, new FacebookCallback<LoginResult>() { 
     @Override 
     public void onSuccess(LoginResult loginResult) { 

      ProgressDialog progressDialog = new ProgressDialog(OpenScreen.this); 
      progressDialog.setMessage("Proceed data..."); 
      progressDialog.show(); 
      String accessToken = loginResult.getAccessToken().getToken(); 
      Log.i("accessToken", accessToken); 

      GraphRequest request = GraphRequest.newMeRequest(loginResult.getAccessToken(), new GraphRequest.GraphJSONObjectCallback() { 

       @Override 
       public void onCompleted(JSONObject object, GraphResponse response) { 
        Log.i("LoginActivity", response.toString()); 
        // Get facebook data from login 
        Bundle bFacebookData = getFacebookData(object); 
        String username = bFacebookData.get("first_name").toString(); 
        String userSurname = bFacebookData.get("last_name").toString(); 
        String email = bFacebookData.get("email").toString(); 

        HashMap<String, String> userData = new HashMap<String, String>(); 
        userData.put("Name",username+" "+userSurname); 
        userData.put("Email",email); 

        patideDatabase.push().setValue(userData); 

       } 
      }); 

      Bundle parameters = new Bundle(); 
      parameters.putString("fields", "id, first_name, last_name, email"); 
      request.setParameters(parameters); 
      request.executeAsync(); 
      progressDialog.cancel(); 
     } 

     @Override 
     public void onCancel() { 
      Toast.makeText(getBaseContext(),"Login Cancelled", Toast.LENGTH_SHORT).show(); 
     } 

     @Override 
     public void onError(FacebookException e) { 
      Toast.makeText(getBaseContext(),"Problem connecting to Facebook", Toast.LENGTH_SHORT).show(); 
     } 
    }); 


    headline = (TextView)findViewById(R.id.headline); 

    openScreen_button_signin = (Button) findViewById(R.id.openscreen_button_signin); 
    openScreen_button_kusignin = (Button) findViewById(R.id.openscreen_button_kusissignin); 

    openScreen_button_signin.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      Intent intent = new Intent(getApplicationContext(), SignInScreen.class); 
      intent.putExtra("signinType","normal"); 
      startActivity(intent); 
     } 
    }); 

    openScreen_button_kusignin.setOnClickListener(new View.OnClickListener() { 

     public void onClick(View v) { 
      Intent intent = new Intent(getApplicationContext(), SignInScreen.class); 
      intent.putExtra("signinType","kusis"); 
      startActivity(intent); 
     } 
    }); 

} 



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

} 

private Bundle getFacebookData(JSONObject object) { 

    try { 
     Bundle bundle = new Bundle(); 
     String id = object.getString("id"); 


     bundle.putString("idFacebook", id); 
     if (object.has("first_name")) 
      bundle.putString("first_name", object.getString("first_name")); 
     if (object.has("last_name")) 
      bundle.putString("last_name", object.getString("last_name")); 
     if (object.has("email")) 
      bundle.putString("email", object.getString("email")); 

     return bundle; 

    } catch (JSONException e) { 
     Bundle bundle = new Bundle(); 
     return bundle; 
    } 
}} 

以防万一我使用FireBase ...

回答

1

原装Facebook应用程序是否安装在您的崩溃设备上? 1.安装FB,不要登录,重新运行你的应用程序,然后重试。 2.尝试预先登录FB