2012-06-21 55 views
3

我正在實施各種各樣的事情,但令我難以置信的一件事是Android登錄機制。我不太確定在不同的應用程序中哪個登錄機制可供選擇(所有這些應用程序都在訪問互聯網)。Android登錄替代品

比方說,我有兩個應用:

  • 答:基本上這個程序應該連接到服務器,讓用戶聊天 - 我們可以看到在線用戶列表(沒有花名冊,大家是朋友與大家)所以這是一個聊天應用程序。
  • B.此應用程序應該向服務器進行身份驗證,並讓用戶將消息發佈到他們的WALL或其他東西,所以當其他用戶上線時,它會立即向他顯示這些消息。

我故意使用

「連接到服務器」試圖成爲通用的,因爲這是我想知道的。我應該使用哪種類型的驗證,讓我的服務器知道用戶是合法的:

  • 1)海關注冊+登錄:我不想使用,因爲用戶不想要註冊另一個用戶名,並有很多可用的選擇。

  • 2)OpenID:我應該使用這個,當我只需要認證的用戶,而不需要訪問他們在任何網站上的私人信息。我不太喜歡這個,因爲瀏覽器需要打開才能工作。

  • 3)OAuth:與OpenID相同,但我也可以訪問用戶的私有資源。這是同樣的問題,瀏覽器需要打開交換密鑰和令牌,所以它不會帶來太好的用戶體驗。

  • 4)的AccountManager:這是一個非常好的選擇,但我不喜歡它,因爲它是不是應用程序的一部分。我甚至不確定當用戶點擊登錄按鈕時會發生什麼,並且AccountManager彈出。我應該選擇AccountManager中列出的現有帳戶alraedy,如果我想選擇其他帳戶(如Yahoo等),AccountManager可以註冊它,登錄並返回應用程序 - 通過身份驗證。


我非常希望聽到所有的4個備選方案,我可以使用現有的實現。我知道他們中有很多人,我不希望他們在這裏列出,我知道他們。唯一的問題是,我不知道他們中的哪一個可以使用,它會以我想要的方式完成工作。以下是事情,我希望有一個清單:

  • 1)在應用中,當用戶點擊登錄按鈕,東西應該打開,讓下面的替代品之間的用戶選擇:谷歌,Facebook,雅虎,Twitter的。用戶應該使用任何帳戶登錄,這應該被記錄爲已驗證。

  • 2)該帳戶應該是用戶作爲訪問令牌來驗證我的服務器 - 所以我的服務器只接受令牌並檢查它是否有效。

的這個整個的一點是,我沒有實現我的服務器上登錄機制,但是用戶仍然對驗證我的服務器,所以我們可以交換一些數據等

回答

-1
package com.myapplication; 

    import android.os.Bundle; 
    import android.os.Handler; 
    import android.support.v7.app.AppCompatActivity; 
    import android.text.Editable; 
    import android.text.InputType; 
    import android.text.TextUtils; 
    import android.text.TextWatcher; 
    import android.text.method.PasswordTransformationMethod; 
    import android.view.Menu; 
    import android.view.MenuItem; 
    import android.view.View; 
    import android.widget.EditText; 
    import android.widget.TextView; 
    import android.widget.Button; 
    import android.widget.Toast; 

    public class LoginActivity extends AppCompatActivity { 
     EditText login_uname, login_pwd; 
     TextView invalid_error; 
     Button login_btn; 
     private boolean canExit; 
     TextView pword_showhide; 

     // string login_un,login_pw; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.login_screen); 

      login_uname = (EditText) findViewById(R.id.login_username); 
      login_pwd = (EditText) findViewById(R.id.login_password); 
      invalid_error = (TextView) findViewById(R.id.InvalidError); 
      login_btn = (Button) findViewById(R.id.login_btn); 
      // loginbutton.setEnabled(false); 
      invalid_error.setVisibility(View.GONE); 
      pword_showhide = (TextView) findViewById(R.id.pwd_showhide); 
      // pword_showhide.setText("show"); 
      pword_showhide.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        if (login_pwd.getInputType() == InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) { 
         login_pwd.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); 
         pword_showhide.setText("show"); 
        } else { 
         login_pwd.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); 
         pword_showhide.setText("hide"); 
        } 
        login_pwd.setSelection(login_pwd.getText().length()); 
       } 
      }); 
      checkValidation(); 
      login_uname.addTextChangedListener(mWatcher); 
      login_pwd.addTextChangedListener(mWatcher); 
     } 

     private void checkValidation() { 
      // TODO Auto-generated method stub 
      if ((TextUtils.isEmpty(login_uname.getText())) || (TextUtils.isEmpty(login_pwd.getText()))) 
       login_btn.setEnabled(false); 
      else { 
       login_btn.setEnabled(true); 
      } 
     } 

     TextWatcher mWatcher = new TextWatcher() { 
      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       // TODO Auto-generated method stub 
       checkValidation(); 
      } 

      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
       // TODO Auto-generated method stub 
      } 

      @Override 
      public void afterTextChanged(Editable s) { 
       // TODO Auto-generated method stub 
      } 
     }; 

     @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 
     public void onBackPressed() { 
      if (canExit) 
       super.onBackPressed(); 
      else { 
       canExit = true; 
       Toast.makeText(getApplicationContext(), "Press again to Exit", Toast.LENGTH_SHORT).show(); 
      } 
      mHandler.sendEmptyMessageDelayed(1, 2000/*time interval to next press in milli second*/);// if not pressed within 2seconds then will be setted(canExit) as false 
     } 

     private Handler mHandler = new Handler() { 
      public void handleMessage(android.os.Message msg) { 
       switch (msg.what) { 
        case 1: 
         canExit = false; 
         break; 
        default: 
         break; 
       } 
      } 
     }; 
    } 



login_screen.xml: 
    ------------------ 
    <RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
     xmlns:tools="http://schemas.android.com/tools" 
     android:layout_width="match_parent" 
     android:layout_height="match_parent" 
     tools:context=".LoginActivity"> 
     <TextView 
      android:layout_width="match_parent" 
      android:layout_height="40dp" 
      android:textAppearance="?android:attr/textAppearanceMedium" 
      android:text="Invalid Login Details" 
      android:id="@+id/InvalidError" 
      android:gravity="center" 
      android:background="#ff3a0f" 
      android:textColor="#FFF" 
      android:layout_alignParentTop="true" 
      android:layout_centerHorizontal="true" /> 
     <RelativeLayout 
      android:layout_width="match_parent" 
      android:layout_height="fill_parent" 
      android:layout_margin="50dp" 
      android:layout_centerVertical="true" 
      android:layout_centerHorizontal="true" 
      android:id="@+id/login_lyt"> 
      <EditText 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:id="@+id/login_username" 
       android:layout_alignParentTop="true" 
       android:layout_alignParentLeft="true" 
       android:layout_alignParentStart="true" 
       android:hint="User Name" 
       android:drawableLeft="@drawable/icon_username" 
       android:layout_marginTop="141dp" /> 
      <EditText 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:inputType="textPassword" 
       android:hint="******" 
       android:drawableLeft="@drawable/icon_password" 
       android:ems="10" 
       android:id="@+id/login_password" 
       android:layout_centerVertical="true" 
       android:layout_alignParentLeft="true" 
       android:layout_alignParentStart="true" 
       android:layout_alignParentRight="true" 
       android:layout_alignParentEnd="true" /> 
      <TextView 
       android:id="@+id/pwd_showhide" 
       android:layout_width="wrap_content" 
       android:layout_height="wrap_content" 
       android:layout_alignBaseline="@+id/login_password" 
       android:layout_alignBottom="@+id/login_password" 
       android:layout_alignParentRight="true" 
       android:text="show" /> 
      <Button 
       android:layout_width="fill_parent" 
       android:layout_height="wrap_content" 
       android:text="Login" 
       android:background="#f0a422" 
       android:id="@+id/login_btn" 
       android:layout_below="@+id/login_password" 
       android:layout_alignParentLeft="true" 
       android:layout_alignParentStart="true" 
       android:layout_marginTop="31dp" 
       android:layout_alignParentRight="true" 
       android:layout_alignParentEnd="true" /> 
     </RelativeLayout> 
    </RelativeLayout> 
0
package com.myapplication; 

    import android.os.Bundle; 
    import android.os.Handler; 
    import android.support.v7.app.AppCompatActivity; 
    import android.text.Editable; 
    import android.text.InputType; 
    import android.text.TextUtils; 
    import android.text.TextWatcher; 
    import android.text.method.PasswordTransformationMethod; 
    import android.view.Menu; 
    import android.view.MenuItem; 
    import android.view.View; 
    import android.widget.EditText; 
    import android.widget.TextView; 
    import android.widget.Button; 
    import android.widget.Toast; 

    public class LoginActivity extends AppCompatActivity { 

     EditText login_uname, login_pwd; 
     TextView invalid_error; 
     Button login_btn; 
     private boolean canExit; 
     TextView pword_showhide; 

     // string login_un,login_pw; 
     @Override 
     protected void onCreate(Bundle savedInstanceState) { 
      super.onCreate(savedInstanceState); 
      setContentView(R.layout.login_screen); 

      login_uname = (EditText) findViewById(R.id.login_username); 
      login_pwd = (EditText) findViewById(R.id.login_password); 
      invalid_error = (TextView) findViewById(R.id.InvalidError); 
      login_btn = (Button) findViewById(R.id.login_btn); 
      // loginbutton.setEnabled(false); 
      invalid_error.setVisibility(View.GONE); 
      pword_showhide = (TextView) findViewById(R.id.pwd_showhide); 
      // pword_showhide.setText("show"); 
      pword_showhide.setOnClickListener(new View.OnClickListener() { 
       @Override 
       public void onClick(View view) { 
        if (login_pwd.getInputType() == InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD) { 
         login_pwd.setInputType(InputType.TYPE_CLASS_TEXT | InputType.TYPE_TEXT_VARIATION_PASSWORD); 
         pword_showhide.setText("show"); 
        } else { 
         login_pwd.setInputType(InputType.TYPE_TEXT_VARIATION_VISIBLE_PASSWORD); 
         pword_showhide.setText("hide"); 
        } 
        login_pwd.setSelection(login_pwd.getText().length()); 
       } 
      }); 
      checkValidation(); 
      login_uname.addTextChangedListener(mWatcher); 
      login_pwd.addTextChangedListener(mWatcher); 
     } 
     private void checkValidation() { 
      // TODO Auto-generated method stub 
      if ((TextUtils.isEmpty(login_uname.getText())) || (TextUtils.isEmpty(login_pwd.getText()))) 
       login_btn.setEnabled(false); 
      else { 
       login_btn.setEnabled(true); 
      } 
     } 
     public void login(View view) { 
      if (login_uname.getText().toString().equals("a") && login_pwd.getText().toString().equals("a")) { 
       invalid_error.setVisibility(View.GONE); 
       Toast.makeText(getApplicationContext(), "Login Success", Toast.LENGTH_LONG).show(); 
       login_uname.setCompoundDrawablesWithIntrinsicBounds(R.drawable.icon_username, 0, 0, 0); 
       login_pwd.setCompoundDrawablesWithIntrinsicBounds(R.drawable.icon_password, 0, 0, 0); 
       //correcct password 
      } else { 
       //wrong password 
       invalid_error.setVisibility(View.VISIBLE); 
       Toast.makeText(getApplicationContext(), "Login fail", Toast.LENGTH_LONG).show(); 
       login_uname.setCompoundDrawablesWithIntrinsicBounds(R.drawable.error_username, 0, 0, 0); 
       login_pwd.setCompoundDrawablesWithIntrinsicBounds(R.drawable.error_password,0, 0, 0); 
      } 
     } 
     TextWatcher mWatcher = new TextWatcher() { 
      @Override 
      public void onTextChanged(CharSequence s, int start, int before, int count) { 
       // TODO Auto-generated method stub 
       checkValidation(); 
      } 
      @Override 
      public void beforeTextChanged(CharSequence s, int start, int count, int after) { 
       // TODO Auto-generated method stub 
      } 
      @Override 
      public void afterTextChanged(Editable s) { 
       // TODO Auto-generated method stub 
      } 
     }; 
     @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 
     public void onBackPressed() { 
      if (canExit) 
       super.onBackPressed(); 
      else { 
       canExit = true; 
       Toast.makeText(getApplicationContext(), "Press again to Exit", Toast.LENGTH_SHORT).show(); 
      } 
      mHandler.sendEmptyMessageDelayed(1, 2000/*time interval to next press in milli second*/);// if not pressed within 2seconds then will be setted(canExit) as false 
     } 
     private Handler mHandler = new Handler() { 

      public void handleMessage(android.os.Message msg) { 

       switch (msg.what) { 
        case 1: 
         canExit = false; 
         break; 
        default: 
         break; 
       } 
      } 
     }; 

    } 

login_screen.xml 
---------------- 
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android" 
    xmlns:tools="http://schemas.android.com/tools" 
    android:layout_width="match_parent" 
    android:layout_height="match_parent" 
    tools:context=".LoginActivity"> 
    <TextView 
     android:layout_width="match_parent" 
     android:layout_height="40dp" 
     android:textAppearance="?android:attr/textAppearanceMedium" 
     android:text="Invalid Login Details" 
     android:id="@+id/InvalidError" 
     android:gravity="center" 
     android:background="#ff3a0f" 
     android:textColor="#FFF" 
     android:layout_alignParentTop="true" 
     android:layout_centerHorizontal="true" /> 
    <RelativeLayout 
     android:layout_width="match_parent" 
     android:layout_height="fill_parent" 
     android:layout_margin="50dp" 
     android:layout_centerVertical="true" 
     android:layout_centerHorizontal="true" 
     android:id="@+id/login_lyt"> 
     <EditText 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:id="@+id/login_username" 
      android:layout_alignParentTop="true" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" 
      android:hint="User Name" 
      android:drawableLeft="@drawable/icon_username" 
      android:layout_marginTop="141dp" /> 
     <EditText 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:inputType="textPassword" 
      android:hint="******" 
      android:drawableLeft="@drawable/icon_password" 
      android:ems="10" 
      android:id="@+id/login_password" 
      android:layout_centerVertical="true" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentEnd="true" /> 
     <TextView 
      android:id="@+id/pwd_showhide" 
      android:layout_width="wrap_content" 
      android:layout_height="wrap_content" 
      android:layout_alignBaseline="@+id/login_password" 
      android:layout_alignBottom="@+id/login_password" 
      android:layout_alignParentRight="true" 
      android:text="show" /> 
     <Button 
      android:layout_width="fill_parent" 
      android:layout_height="wrap_content" 
      android:text="Login" 
      android:onClick="login" 
      android:background="#f0a422" 
      android:id="@+id/login_btn" 
      android:layout_below="@+id/login_password" 
      android:layout_alignParentLeft="true" 
      android:layout_alignParentStart="true" 
      android:layout_marginTop="31dp" 
      android:layout_alignParentRight="true" 
      android:layout_alignParentEnd="true" /> 
    </RelativeLayout> 
</RelativeLayout>