2015-07-18 6 views
0
public class MainActivity extends ActionBarActivity { 

    // FACEBOOK INTEGRATION INITIALIZATION 
    CallbackManager callbackManager; 
    LoginButton fbLoginButton; 

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

     FacebookSdk.sdkInitialize(getApplicationContext()); 
     callbackManager= CallbackManager.Factory.create(); 

     setContentView(R.layout.activity_main); 
     fbLoginButton=(LoginButton) findViewById(R.id.fb_login_button); 


//FACEBOOK FUNCTION FOR LOGIN 

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

       System.out.println("Facebook Login Successful!"); 
       System.out.println("Logged in user Details : "); 
       System.out.println("--------------------------"); 
       System.out.println("User ID : " + loginResult.getAccessToken().getUserId()); 
       System.out.println("Authentication Token : " + loginResult.getAccessToken().getToken()); 
       Toast.makeText(MainActivity.this, "Login Successful!", Toast.LENGTH_LONG).show(); 
      } 

      @Override 
      public void onCancel() { 
       Toast.makeText(MainActivity.this, "Login cancelled by user!", Toast.LENGTH_LONG).show(); 
       System.out.println("Facebook Login failed!!"); 
      } 

      @Override 
      public void onError(FacebookException e) { 
       Toast.makeText(MainActivity.this, "Login unsuccessful!", Toast.LENGTH_LONG).show(); 
       System.out.println("Facebook Login failed!!"); 
      } 
     }); 



//INITIALIZATION OF BUTTONS 
     Button button; 
     final EditText edit_name,edit_pass,edit_email,edit_phone; 
     final CheckBox check; 
     SharedPreferences pref; 
     final Editor editor; 

//INSTANCES 
     button=(Button)findViewById(R.id.button); 
     edit_name=(EditText)findViewById(R.id.edit_name); 
     edit_pass=(EditText)findViewById(R.id.edit_pass); 
     edit_email=(EditText)findViewById(R.id.edit_email); 
     edit_phone=(EditText)findViewById(R.id.edit_phone); 
     check=(CheckBox)MainActivity.this.findViewById(R.id.checkBox); 
     pref=getSharedPreferences("Registration",0); 
     editor=pref.edit(); 

//CHECKBOX FUNTION 

     check.setOnCheckedChangeListener(new CompoundButton.OnCheckedChangeListener() { 
      @Override 
      public void onCheckedChanged(CompoundButton buttonView, boolean isChecked) { 
       if(!check.isChecked()) 
       { 
        edit_pass.setTransformationMethod(new PasswordTransformationMethod()); 
       } 
       else 
       { 
        edit_pass.setTransformationMethod(null); 
       } 
      } 
     }); 


//BUTTONS 

       button.setOnClickListener(new View.OnClickListener() { 
        @Override 
        public void onClick(View v) { 
         boolean flag =true; 
         String name=edit_name.getText().toString(); 
         String email=edit_email.getText().toString(); 
         String pass=edit_pass.getText().toString(); 
         String phone=edit_phone.getText().toString(); 


         if(!isValidEmail(email)) 
         { 
          edit_email.setError("Invalid Email"); 
          flag=false; 
         } 
         if(!isValidPassword(pass)) 
         { 
          edit_pass.setError("Invalid Password"); 
          flag=false; 
         } 
         if (!isValidPhone(phone)) 
         { 
          edit_phone.setError("Invalid phone"); 
          flag=false; 
         } 



         if(flag==true) 
         { 
          Toast.makeText(getApplicationContext(), "LOGIN SUCCESSFUL", Toast.LENGTH_SHORT).show(); 
          editor.putString("Name", name); 
          editor.putString("Email", email); 
          editor.putString("phone",phone); 
          editor.putString("password",pass); 
          editor.commit(); 
          Intent i = new Intent(MainActivity.this,upload_photo.class); 
          startActivity(i); 

         } 
         else 
         { 
          Toast.makeText(getApplicationContext(),"LOGIN UNSUCCESSFUL",Toast.LENGTH_SHORT).show(); 
         } 
        } 
       }); 

    } 

//FUNCTIONS 

    private boolean isValidEmail(String email) 
    { 
     String EMAIL_PATTERN = "^[_A-Za-z0-9-\\+]+(\\.[_A-Za-z0-9-]+)*@"+ "[A-Za-z0-9-]+(\\.[A-Za-z0-9]+)*(\\.[A-Za-z]{2,})$"; 
     Pattern pattern=Pattern.compile(EMAIL_PATTERN); 
     Matcher matcher=pattern.matcher(email); 
     return matcher.matches(); 
    } 

    private boolean isValidPassword(String password) 
    { 
     if(password!=null && password.length()>6) 
     { 
      return true; 
     } 
     else 
      return false; 
    } 

    private boolean isValidPhone(String phone) 
    { 
     if (phone.length()==10) 
     { 
      return true; 
     } 

     return false; 
    } 




    @Override 
    public boolean onCreateOptionsMenu(Menu menu) { 
     // Inflate the menu; this adds items to the action bar if it is present. 
     getMenuInflater().inflate(R.menu.menu_main, menu); 
     return true; 
    } 

    @Override 
    public boolean onOptionsItemSelected(MenuItem item) { 
     // Handle action bar item clicks here. The action bar will 
     // automatically handle clicks on the Home/Up button, so long 
     // as you specify a parent activity in AndroidManifest.xml. 
     int id = item.getItemId(); 

     //noinspection SimplifiableIfStatement 
     if (id == R.id.action_settings) { 
      return true; 
     } 

     return super.onOptionsItemSelected(item); 
    } 

    @Override 
    protected void onActivityResult(int reqCode, int resCode, Intent i) { 
     callbackManager.onActivityResult(reqCode, resCode, i); 
    }  
} 

это работает отлично на эмуляторе, но фб Логин не работает на телефоне с facebook приложения в нем, я читал где-то, что мне нужно использовать facebook.authorize (это, РАЗРЕШЕНИЯ, Facebook. FORCE_DIALOG_AUTH, это);
, но не знаете, где его использовать, не могли бы вы помочь мне в этом?интеграция facebook в Android App

+0

если ваш хэш-ключ не установлен должным образом, чем и вы можете запустить приложение успешно в мобильном телефоне, который не имеет facebook приложение установлено. Но у вас проблемы с устройством, на котором установлено приложение fb. Проверь это. –

ответ

0

Пожалуйста, перейдите по указанному ниже адресу, так как я думал, что hashkey установлен неправильно с правильным именем пакета.

Android facebook login not working with installed Facebook app

Hashkey Реализация на OnCreate метод вашей основной деятельности:

PackageInfo info; 

    try { 
      info = activity.getPackageManager().getPackageInfo("com.checkmyplanner", PackageManager.GET_SIGNATURES); 
      for (Signature signature : info.signatures) { 
       MessageDigest md; 
       md = MessageDigest.getInstance("SHA"); 
       md.update(signature.toByteArray()); 
       String something = new String(Base64.encode(md.digest(), 0)); 
       //String something = new String(Base64.encodeBytes(md.digest())); 
       Log.e("hash key", something); 
      } 
     } catch (NameNotFoundException e1) { 
      Log.e("name not found", e1.toString()); 
     } catch (NoSuchAlgorithmException e) { 
      Log.e("no such an algorithm", e.toString()); 
     } catch (Exception e) { 
      Log.e("exception", e.toString()); 
     } 

будет необходима любая помощь, дайте мне знать.

+0

Нет, это не относится к хэш-ключу, так как я могу использовать его на эмуляторе, а также на моем samsung s2, где facebook не предварительно установлен, но КНОПКА LOGIN не открывается на моем другом телефоне, где уже установлена ​​facebook, Я где-то читал, что мне нужно использовать facebook.authorize (это, PERMISSIONS, Facebook.FORCE_DIALOG_AUTH, это); но не знаю, где его использовать и как. !! Я прошу вас еще раз посмотреть –

+0

Фактически позавчера я забыл поставить hashkey, затем facebook подсказывал мне hashkey, и в эту же минуту я обновил его на facebook, а затем он работал, но все же квест то же самое, почему я не могу использовать facebook на моем предустановленном телефоне facebook, но я могу использовать его обычно на моем другом телефоне без приложения facebook в нем –

+0

, для этого вам нужно проверить код, который, если ваше приложение уже установлено в нем , вам нужно открыть facebook с помощью намерения, иначе вам придется использовать заданный код, который вы можете найти в нем, из нескольких URL-адресов, доступных в google. –

0

этот код работает с уже установленным приложением facebook.

callbackManager = CallbackManager.Factory.create(); 
 

 
loginButton = (LoginButton) findViewById(R.id.login_button); 
 

 
List <String> permissionNeeds = Arrays.asList("user_photos", "email", 
 
\t "user_birthday", "public_profile", "AccessToken"); 
 
loginButton.registerCallback(callbackManager, 
 
new FacebookCallback <LoginResult>() {@Override 
 
\t public void onSuccess(LoginResult loginResult) { 
 

 
\t \t System.out.println("onSuccess"); 
 

 
\t \t String accessToken = loginResult.getAccessToken() 
 
\t \t \t .getToken(); 
 
\t \t Log.i("accessToken", accessToken); 
 

 
\t \t GraphRequest request = GraphRequest.newMeRequest(
 
\t \t loginResult.getAccessToken(), 
 
\t \t new GraphRequest.GraphJSONObjectCallback() {@Override 
 
\t \t \t public void onCompleted(JSONObject object, 
 
\t \t \t GraphResponse response) { 
 

 
\t \t \t \t Log.i("LoginActivity", 
 
\t \t \t \t response.toString()); 
 
\t \t \t \t try { 
 
\t \t \t \t \t String id = object.getString("id"); 
 
\t \t \t \t \t try { 
 
\t \t \t \t \t \t URL profile_pic = new URL(
 
\t \t \t \t \t \t \t "http://graph.facebook.com/" + id + "/picture?type=large"); 
 
\t \t \t \t \t \t Log.i("profile_pic", 
 
\t \t \t \t \t \t profile_pic + ""); 
 

 
\t \t \t \t \t } catch (MalformedURLException e) { 
 
\t \t \t \t \t \t e.printStackTrace(); 
 
\t \t \t \t \t } 
 
\t \t \t \t \t String name = object.getString("name"); 
 
\t \t \t \t \t String email = object.getString("email"); 
 
\t \t \t \t \t String gender = object.getString("gender"); 
 
\t \t \t \t \t String birthday = object.getString("birthday"); 
 
\t \t \t \t } catch (JSONException e) { 
 
\t \t \t \t \t e.printStackTrace(); 
 
\t \t \t \t } 
 
\t \t \t } 
 
\t \t }); 
 
\t \t Bundle parameters = new Bundle(); 
 
\t \t parameters.putString("fields", 
 
\t \t \t "id,name,email,gender, birthday"); 
 
\t \t request.setParameters(parameters); 
 
\t \t request.executeAsync(); 
 
\t } 
 

 
\t @Override 
 
\t public void onCancel() { 
 
\t \t System.out.println("onCancel"); 
 
\t } 
 

 
\t @Override 
 
\t public void onError(FacebookException exception) { 
 
\t \t System.out.println("onError"); 
 
\t \t Log.v("LoginActivity", exception.getCause().toString()); 
 
\t } 
 
});

@Override 
 
protected void onActivityResult(int requestCode, int responseCode, 
 
Intent data) { 
 
\t super.onActivityResult(requestCode, responseCode, data); 
 
\t callbackManager.onActivityResult(requestCode, responseCode, data); 
 
}

Смежные вопросы