Authentication và Sharing trong Android với các API Google+

p_erudite

New Member
Trong hướng dẫn này, tôi sẽ làm thế nào để kết nối với ứng dụng Android của bạn để các API Google Plus và sử dụng nó để đăng nhập, nhận và chia sẻ dữ liệu. Tìm các dự án hoàn thành trên GitHub.

Tạo dự án Android

Mở Android Studio và tạo một dự án mới, đặt tên nó như bạn muốn. Nhấn Next, chọn tối thiểu API cấp 18 và nhấn Next lần nữa. Chọn Lần Trống là hoạt động đầu tiên, đặt tên cho nó LoginActivity và nhấn Finish.

Thiết lập Gradle

Mở build.gradle (Module) và thêm áp dụng plugin: 'com.google.gms.google-services' lên đỉnh của các tập tin. Thêm những dòng sau testCompile 'JUnit: JUnit: 4.12':
Mã:
[/SIZE][/FONT]
[SIZE=4][FONT=Georgia]androidTestCompile 'com.android.support.test:runner:0.2'
androidTestCompile 'com.android.support.test:rules:0.2'
androidTestCompile 'com.android.support.test.uiautomator:uiautomator-v18:2.1.0'
androidTestCompile 'com.android.support:support-annotations:23.1.1'
compile 'com.google.android.gms:play-services-auth:8.3.0'
compile 'com.google.android.gms:play-services-identity:8.3.0'
compile 'com.google.android.gms:play-services:8.3.0'


Bây giờ build.gradle mở (dự án) và thêm dòng này bên trong phụ thuộc:
Mã:
[/SIZE][/FONT]
[SIZE=4][FONT=Georgia]classpath 'com.google.gms:google-services:1.5.0-beta2'


Bước tiếp theo là bổ sung thêm file google-services.json để dự án của bạn. Tập tin này có chứa thông tin nhà phát triển và thiết lập cấu hình để kết nối với Google Api Client. Bạn có thể tải về tập tin này ở đây, di chuyển nó vào trong thư mục ứng dụng của dự án của bạn và Sync gradle.

Layouts

Trong thư mục bố trí các dự án của bạn, xóa các tập tin content_login.xml.

Bên trong activity_login.xml, xóa <include layout="@layout/content_login"/> và thay thế các Floating mã Nút hành động với những dòng này. Điều duy nhất chúng ta cần trong cách bố trí này là nút Login:
Mã:
[/SIZE][/FONT]
[SIZE=4][FONT=Georgia]<RelativeLayout
    android:layout_width="fill_parent"
    android:layout_height="match_parent"
    android:layout_weight="1">
    <com.google.android.gms.common.SignInButton
        android:id="@+id/sign_in_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:visibility="visible"
        tools:visibility="gone" />
    <LinearLayout
        android:id="@+id/sign_out_and_disconnect"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_centerInParent="true"
        android:orientation="horizontal"
        android:paddingLeft="16dp"
        android:paddingRight="16dp"
        android:visibility="gone"
        tools:visibility="visible">
        <Button
            android:id="@+id/sign_out_button"
            android:layout_width="0dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"
            android:text="Sign Out"  />
    </LinearLayout>
</RelativeLayout>


Mở lớp LoginActivity và xóa các Floating mã Nút hành động bên trong phương pháp onCreate() khi lap trinh android

Hãy chắc chắn rằng bạn
Mã:
public class LoginActivity extends AppCompatActivity and implements GoogleApiClient.OnConnectionFailedListener, View.OnClickListener{
Before the onCreate() method add this code:
Mã:
[/SIZE][/FONT]
[SIZE=4][FONT=Georgia]private static final String TAG = "LoginActivity";
private static final int SIGN_IN_CODE = 9001;
private GoogleApiClient mGoogleApiClient;
private ProgressDialog mProgressDialog;
private GoogleSignInAccount account;


Bên trong phương thức onCreate, trước khung đóng, thêm những dòng này mà thiết lập các kết nối đến các API Google và gắn chúng vào một nút đăng nhập:
Mã:
[/SIZE][/FONT]
[SIZE=4][FONT=Georgia]findViewById(R.id.sign_in_button).setOnClickListener(this);
findViewById(R.id.sign_out_button).setOnClickListener(this);

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestEmail()
        .build();
mGoogleApiClient = new GoogleApiClient.Builder(this)
        .enableAutoManage(this , this)
        .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
        .build();
SignInButton signInButton = (SignInButton) findViewById(R.id.sign_in_button);
signInButton.setSize(SignInButton.SIZE_STANDARD);
signInButton.setScopes(gso.getScopeArray());


Sau khi phương pháp onCreate(), chúng tôi sẽ thực hiện các phương pháp ghi đè. Đầu tiên là onStart() và một giữ chỗ cho các phương pháp onConnectionFailed. Thêm họ vào bên trong lớp LoginActivity:
Mã:
[/SIZE][/FONT]
[SIZE=4][FONT=Georgia]@Override
public void onStart() {
    super.onStart();
    OptionalPendingResult<GoogleSignInResult> optPenRes = Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient);
    if (optPenRes.isDone()) {
        Log.d(TAG, "Yayy!");
        GoogleSignInResult result = optPenRes.get();
        handleSignInResult(result);
    } else {
        optPenRes.setResultCallback(new ResultCallback<GoogleSignInResult>() {
            @Override
            public void onResult(GoogleSignInResult googleSignInResult) {
                handleSignInResult(googleSignInResult);
            }
        });
    }
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
}


Đừng lo lắng về các lỗi có thể bạn sẽ thấy, như chúng ta sẽ thực hiện những phương pháp sau.

Phương pháp thứ hai được ghi đè onActivityResult (). Thêm nó sau khi các phương pháp cuối cùng được thêm. Các mã như sau:
Mã:
[/SIZE][/FONT]
[SIZE=4][FONT=Georgia]@Override
public void onActivityResult(int requestCode, int resultCode, Intent data) {
    super.onActivityResult(requestCode, resultCode, data);
    if (requestCode == SIGN_IN_CODE) {
        GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
        handleSignInResult(result);
    }
}


Tiếp thêm handeSignInResult () phương pháp sau khi phương pháp onActivityResult ():
Mã:
[/SIZE][/FONT]
[SIZE=4][FONT=Georgia]private void handleSignInResult(GoogleSignInResult result) {
  Log.d(TAG, "handleSignInResult:" + result.isSuccess());
  if (result.isSuccess()) {
      updateUI(true);
      account = result.getSignInAccount();
  } else {
      updateUI(false);
  }
}


Bây giờ chúng ta sẽ thêm signin() và phương pháp signOut():
Mã:
[/SIZE][/FONT]
[SIZE=4][FONT=Georgia]private void signIn() {
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
    startActivityForResult(signInIntent, SIGN_IN_CODE);
}
private void signOut() {
    Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
            new ResultCallback<Status>() {
                @Override
                public void onResult(Status status) {
                    updateUI(false);
                }
            });
}


Phương pháp tiếp theo là updateUI(). Nếu người dùng đã đăng nhập, sau đó nó thay đổi tầm nhìn của các dấu hiệu và ký ra các nút, và tạo ra một ý định mới gọi là chính đại diện cho các hoạt động tiếp theo mở ra sau khi chúng ta có một dấu hiệu thành công trong quá trình. Hoạt động tiếp theo là MainActivity. Trước khi chúng tôi chuyển đổi hoạt động, chúng tôi cần phải vượt qua một số dữ liệu thêm như nhận được thông tin tài khoản. Chúng tôi đang đi qua các DisplayName và ImageUrl dây để ý định mới như tính năng bổ sung.

Mã:
[/SIZE][/FONT]
[SIZE=4][FONT=Georgia]private void updateUI(boolean signedIn) {
    if (signedIn) {
        findViewById(R.id.sign_in_button).setVisibility(View.GONE);
        findViewById(R.id.sign_out_and_disconnect).setVisibility(View.VISIBLE);
        Intent main = new Intent(this, MainActivity.class);
        main.putExtra("displayname", account.getDisplayName());
        main.putExtra("imageurl", account.getPhotoUrl().toString());
        startActivity(main);
        finish();
    } else {
        findViewById(R.id.sign_in_button).setVisibility(View.VISIBLE);
        findViewById(R.id.sign_out_and_disconnect).setVisibility(View.GONE);
    }
}


Phương pháp cuối cùng chúng ta cần phải thực hiện trong lớp học của chúng tôi là LoginActivity onClick (View v):
Mã:
[/SIZE][/FONT]
[SIZE=4][FONT=Georgia]@Override
public void onClick(View v) {
  switch (v.getId()) {
      case R.id.sign_in_button:
          signIn();
          break;
      case R.id.sign_out_button:
          signOut();
          break;
  }
}


Lớp LoginActivity đã hoàn tất.

Hoạt động chính của lớp

Chúng tôi cần một lớp học khác để hiển thị thông tin người dùng và hình ảnh cá nhân và để đặt một nút Google Plus Chia sẻ. Bắt đầu với việc tạo ra một lớp mới bằng cách kích chuột phải vào gói của bạn(e.g: com.example.theodhor.googleplusintegration) and selecting to New -> Activity -> Blank Activity.Để lại tên mặc định của MainActivity và nhấn Finish.

Xóa các tập tin content_main.xml bởi vì chúng tôi không cần nó.

Mở activity_main.xml và thay thế <include layout="@layout/content_main"/> với:
Mã:
[/SIZE][/FONT]
[SIZE=4][FONT=Georgia]<LinearLayout
  android:layout_width="match_parent"
  android:layout_height="match_parent"
  android:orientation="vertical"
  android:paddingTop="100dp">
  <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Hello"
      android:id="@+id/textView"
      android:layout_gravity="center_horizontal"/>
  <TextView
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="New Text"
      android:id="@+id/nameSurnameText"
      android:layout_gravity="center_horizontal"/>
  <ImageView
      android:layout_width="150dp"
      android:layout_height="150dp"
      android:id="@+id/imageView"
      android:layout_gravity="center_horizontal"/>
  <Button
      android:id="@+id/share_button"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Share on Google+"
      android:layout_gravity="center_horizontal"/>
  <Button
      android:id="@+id/sign_out_button"
      android:layout_width="wrap_content"
      android:layout_height="wrap_content"
      android:text="Sign Out"
      android:visibility="visible"
      android:layout_gravity="center"/>
</LinearLayout>


Xóa nổi Action mã nút như chúng ta sẽ không sử dụng nó.

Bây giờ mở lớp MainActivity và chúng tôi sẽ thêm code để làm cho nó làm việc.

Trước hết hãy đảm bảo các lớp mở rộng và thực hiện các lớp học, chúng tôi sẽ sử dụng:
Mã:
[/SIZE][/FONT]
[SIZE=4][FONT=Georgia]public class MainActivity extends AppCompatActivity implements GoogleApiClient.OnConnectionFailedListener, View.OnClickListener {


Trước khi các phương pháp onCreate () thêm hai dòng mã:
Mã:
[/SIZE][/FONT]
[SIZE=4][FONT=Georgia]GoogleApiClient mGoogleApiClient;
private static final int SIGN_IN_CODE = 9001;


Bên trong onCreate () phương pháp, thay thế nổi mã Nút hành động với những dòng này:
Mã:
[/SIZE][/FONT]
[SIZE=4][FONT=Georgia]findViewById(R.id.sign_out_button).setOnClickListener(this);

GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
  .requestEmail()
  .build();

mGoogleApiClient = new GoogleApiClient.Builder(this)
  .enableAutoManage(this , this)
  .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
  .build();

Ở đây chúng ta tạo ra các dấu hiệu ra nút và xây dựng một GoogleApiClient mới sẽ thiết lập mà API chúng ta sẽ sử dụng cho các ứng dụng của chúng tôi. Trong trường hợp này chúng tôi sẽ sử dụng Google xác kể từ khi chúng tôi đang thực hiện một Google Plus Login.

Bên trong các phương pháp tương tự, thêm những dòng này:

Mã:
[/SIZE][/FONT]
[SIZE=4][FONT=Georgia]Intent intent = getIntent();
  String nameSurname = intent.getStringExtra("displayname");
  String imageUrl = intent.getStringExtra("imageurl");
  TextView displayName = (TextView)findViewById(R.id.nameSurnameText);
  displayName.setText("" + nameSurname);

>> Khóa học lập trình android cơ bản nâng cao tại hà nội !
Ở đây chúng ta tạo ra một ý định và sử dụng nó để có được các tính năng bổ sung hình thức gửi các hoạt động vừa qua, các DisplayName và ImageUrl dây.

Tiếp theo chúng ta nên thêm mã tạo ra các nút chia sẻ:
Mã:
[/SIZE][/FONT]
[SIZE=4][FONT=Georgia]Button shareButton = (Button) findViewById(R.id.share_button);
shareButton.setOnClickListener(this);


Kể từ View.OnClickListener được thực hiện trong lớp học này, chúng ta cần những phương pháp ghi đè cho nó. Thêm nó sau khi các phương pháp onCreate ():
Mã:
[/SIZE][/FONT]
[SIZE=4][FONT=Georgia]@Override
public void onClick(View v) {
  switch (v.getId()) {
      case R.id.sign_in_button:
          signIn();
          break;
      case R.id.sign_out_button:
          signOut();
          break;
      case R.id.share_button:
          Intent shareIntent = new PlusShare.Builder(this)
                  .setType("text/plain")
                  .getIntent();
          startActivityForResult(shareIntent, 0);
          break;
  }
}


Các phương pháp còn lại cho lớp này là signin (), signOut () và một phương pháp ghi đè được gọi là onConnectionFailed ():
Mã:
[/SIZE][/FONT]
[SIZE=4][FONT=Georgia]@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
}
private void signOut() {
  Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
          new ResultCallback<Status>() {
              @Override
              public void onResult(Status status) {
                  Intent login = new Intent(MainActivity.this, LoginActivity.class);
                  startActivity(login);
                  finish();
              }
          });
}
private void signIn() {
  Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
  startActivityForResult(signInIntent, SIGN_IN_CODE);
}


Từ LoginActivity chúng tôi nhận được DisplayName và ImageUrl như dây đàn. Việc đầu tiên sẽ được hiển thị dưới dạng văn bản bằng cách sử dụng một TextView nhưng giây cần phải được hiển thị như là một hình ảnh. Hãy tạo ra một lớp có sử dụng chuỗi ImageUrl của chúng tôi để tải về và hiển thị một hình ảnh bitmap.

Tạo một lớp mới bằng cách kích chuột phải vào gói và chọn New -> Java Class. Tôi gọi nó là DownloadImageTask và mã của nó là dưới đây:
Mã:
[/SIZE][/FONT]
[SIZE=4][FONT=Georgia]public class DownloadImageTask extends AsyncTask<String, Void, Bitmap> {
  ImageView bmImage;
  public DownloadImageTask(ImageView mImage) {
      this.bmImage = mImage;
  }
  protected Bitmap doInBackground(String... urls) {
      String url = urls[0];
      Bitmap mBitmap = null;
      try {
          InputStream in = new java.net.URL(url).openStream();
          mBitmap = BitmapFactory.decodeStream(in);
      } catch (Exception e) {
          Log.e("Error", e.getMessage());
          e.printStackTrace();
      }
      return mBitmap;
  }
  protected void onPostExecute(Bitmap result) {
      bmImage.setImageBitmap(result);
  }
}


Để gọi nó trong lớp học của chúng tôi MainActivity thêm dòng mã này trong các phương thức onCreate ():

Mã:
[/SIZE][/FONT]
[SIZE=4][FONT=Georgia]new DownloadImageTask((ImageView) findViewById(R.id.imageView)).execute(imageUrl);


Tạo điều kiện cho dịch vụ Google play

Nhiệm vụ cuối cùng là kết nối các ứng dụng của chúng tôi để Google APIs. Nhấn vào đây để duyệt Google Dịch vụ trang.

Thêm tên ứng dụng của bạn và tên gói và nhấn Continue.

Trên quan điểm tiếp theo thêm SHA-1 chìa khóa vân tay của bạn. Nếu bạn không biết làm thế nào để làm điều này, trang trợ giúp của Google là nguồn thông tin tốt nhất.

Nhấp vào Tiếp tục để tạo ra các tập tin cấu hình chúng ta cần, tải về các tập tin google-services.json và di chuyển nó bên YourProjectName/app/ hoặc mobile/directory.

Bây giờ bạn có thể chạy các ứng dụng.

 
Загрузка...

Members online

No members online now.

Forum statistics

Threads
261,412
Bài viết
336,822
Thành viên
39,962
Thành viên mới nhất
gổ Hà Nguyễn
Chuyển nhà trọn gói | Xe tải chở hàng giá rẻ | thi công bảng hiệu hộp đèn quảng cáo | Chuyển nhà trọn gói Bình Dương | Thi công bảng hiệu hộp đèn | thi công nhôm kính bình dương | thi công quán cafe trọn gói | chuyển nhà trọn gói Bình Dương | Tỏi Lý Sơn
Top