mostafa5709

ساخت فرم ورود گوگل با اندروید

4 ارسال در این موضوع قرار دارد

سلام 

میخواستم بدونم چطور میشه فرم ورود با اکانت جیمل برای اندروید ایجاد کرد

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در ۱ ساعت قبل، mostafa5709 گفته است :

سلام 

میخواستم بدونم چطور میشه فرم ورود با اکانت جیمل برای اندروید ایجاد کرد

 

ابتدا به آدرس زیر بروید :

اسم پروژه و PackageName پروژه خودتون رو وارد کنید

https://developers.google.com/mobile/add?platform=android&cntapi=signin&cntapp=Defaolt Demo App&cntpkg=com.google.samples.quickstart.signin&cnturl=https:%2F%2Fdevelopers.google.com%2Fidentity%2Fsign-in%2Fandroid%2Fstart%3Fconfigured%3Dtrue&cntlbl=Continue with Try Sign-In

glogin1-e1460787933537.thumb.png.7bf25cf1cae84b4c7172e4e68e6c25c4.png

در این مرحله میبایستی گزیه Choose and configure services  رو انتخاب کنید و سپس Google Sign In :

glogin3-e1460787982519.thumb.png.9677e51a2bd3c3d7eb374bc6d5459539.png

در مرحله بعد میبایستید sh1 خودتون رو بدست بیارید .به مسیر زیر بروید نصب جاوا برید و فایل keytool رو اجرا کنید

keytool -list -v -keystore "%USERPROFILE%\.android\debug.keystore" -alias androiddebugkey -storepass android -keypass android

دستور مک و لینوکس :

keytool -list -v -keystore ~/.android/debug.keystore -alias androiddebugkey -storepass android -keypass android 

خروجی :

glogin4-1.thumb.png.e530ad13a8e7fc08b47680b265b7dbed.png

اطلاعات SHA1 را کپی کرده  و در بخش پایین وارد میکنیم

glogin5-1.thumb.png.858deaf6087d408122926c2d43e9ca9b.png

در مرحله آخر فایل  google-services.json   را دانلود کنید  و در پروژه خودتون کپی کنید

glogin9-1.thumb.png.11673617969fc28142b710dfef61931e.png

 

سپس در فایل build.gradle : بخش project level

dependencies {
        classpath 'com.android.tools.build:gradle:2.1.0'
        classpath 'com.google.gms:google-services:3.0.0'
    }

سپس در فایل build.gradle : بخش app-level

apply plugin: 'com.google.gms.google-services'

 

طراحی رابط کاربری :

<LinearLayout 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"
    android:orientation="vertical"
    android:padding="16dp"
    tools:context=".MainActivity" >
 
    <LinearLayout
        android:id="@+id/llProfile"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"
        android:orientation="horizontal"
        android:weightSum="3"
        android:visibility="gone">
 
        <ImageView
            android:id="@+id/imgProfilePic"
            android:layout_width="80dp"
            android:layout_height="wrap_content"
            android:layout_weight="1"/>
 
        <LinearLayout
            android:layout_width="wrap_content"
            android:layout_height="wrap_content"
            android:layout_marginLeft="10dp"
            android:orientation="vertical"
            android:layout_weight="2" >
 
            <TextView
                android:id="@+id/txtName"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:textSize="20dp" />
 
            <TextView
                android:id="@+id/txtEmail"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"
                android:padding="5dp"
                android:textSize="18dp" />
        </LinearLayout>
    </LinearLayout>
 
    <com.google.android.gms.common.SignInButton
        android:id="@+id/btn_sign_in"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:layout_marginBottom="20dp"/>
 
    <Button
        android:id="@+id/btn_sign_out"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/btn_logout_from_google"
        android:visibility="gone"
        android:layout_marginBottom="10dp"/>
 
    <Button
        android:id="@+id/btn_revoke_access"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content"
        android:text="@string/btn_revoke_access"
        android:visibility="gone" />
 
</LinearLayout>

 

 
import android.app.ProgressDialog;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v7.app.AppCompatActivity;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.ImageView;
import android.widget.LinearLayout;
import android.widget.TextView;
 
import com.bumptech.glide.Glide;
import com.bumptech.glide.load.engine.DiskCacheStrategy;
import com.google.android.gms.auth.api.Auth;
import com.google.android.gms.auth.api.signin.GoogleSignInAccount;
import com.google.android.gms.auth.api.signin.GoogleSignInOptions;
import com.google.android.gms.auth.api.signin.GoogleSignInResult;
import com.google.android.gms.common.ConnectionResult;
import com.google.android.gms.common.SignInButton;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.OptionalPendingResult;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.common.api.Status;
 
public class MainActivity extends AppCompatActivity implements
        View.OnClickListener,
        GoogleApiClient.OnConnectionFailedListener {
 
    private static final String TAG = MainActivity.class.getSimpleName();
    private static final int RC_SIGN_IN = 007;
 
    private GoogleApiClient mGoogleApiClient;
    private ProgressDialog mProgressDialog;
 
    private SignInButton btnSignIn;
    private Button btnSignOut, btnRevokeAccess;
    private LinearLayout llProfileLayout;
    private ImageView imgProfilePic;
    private TextView txtName, txtEmail;
 
    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
 
        btnSignIn = (SignInButton) findViewById(R.id.btn_sign_in);
        btnSignOut = (Button) findViewById(R.id.btn_sign_out);
        btnRevokeAccess = (Button) findViewById(R.id.btn_revoke_access);
        llProfileLayout = (LinearLayout) findViewById(R.id.llProfile);
        imgProfilePic = (ImageView) findViewById(R.id.imgProfilePic);
        txtName = (TextView) findViewById(R.id.txtName);
        txtEmail = (TextView) findViewById(R.id.txtEmail);
 
        btnSignIn.setOnClickListener(this);
        btnSignOut.setOnClickListener(this);
        btnRevokeAccess.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();
 
        // Customizing G+ button
        btnSignIn.setSize(SignInButton.SIZE_STANDARD);
        btnSignIn.setScopes(gso.getScopeArray());
    }
 
 
    private void signIn() {
        Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
        startActivityForResult(signInIntent, RC_SIGN_IN);
    }
 
 
    private void signOut() {
        Auth.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(
                new ResultCallback<Status>() {
                    @Override
                    public void onResult(Status status) {
                        updateUI(false);
                    }
                });
    }
 
    private void revokeAccess() {
        Auth.GoogleSignInApi.revokeAccess(mGoogleApiClient).setResultCallback(
                new ResultCallback<Status>() {
                    @Override
                    public void onResult(Status status) {
                        updateUI(false);
                    }
                });
    }
 
    private void handleSignInResult(GoogleSignInResult result) {
        Log.d(TAG, "handleSignInResult:" + result.isSuccess());
        if (result.isSuccess()) {
            // Signed in successfully, show authenticated UI.
            GoogleSignInAccount acct = result.getSignInAccount();
 
            Log.e(TAG, "display name: " + acct.getDisplayName());
 
            String personName = acct.getDisplayName();
            String personPhotoUrl = acct.getPhotoUrl().toString();
            String email = acct.getEmail();
 
            Log.e(TAG, "Name: " + personName + ", email: " + email
                    + ", Image: " + personPhotoUrl);
 
            txtName.setText(personName);
            txtEmail.setText(email);
            Glide.with(getApplicationContext()).load(personPhotoUrl)
                    .thumbnail(0.5f)
                    .crossFade()
                    .diskCacheStrategy(DiskCacheStrategy.ALL)
                    .into(imgProfilePic);
 
            updateUI(true);
        } else {
            // Signed out, show unauthenticated UI.
            updateUI(false);
        }
    }
 
    @Override
    public void onClick(View v) {
        int id = v.getId();
 
        switch (id) {
            case R.id.btn_sign_in:
                signIn();
                break;
 
            case R.id.btn_sign_out:
                signOut();
                break;
 
            case R.id.btn_revoke_access:
                revokeAccess();
                break;
        }
    }
 
    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);
 
        // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
        if (requestCode == RC_SIGN_IN) {
            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
            handleSignInResult(result);
        }
    }
 
    @Override
    public void onStart() {
        super.onStart();
 
        OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi.silentSignIn(mGoogleApiClient);
        if (opr.isDone()) {
            // If the user's cached credentials are valid, the OptionalPendingResult will be "done"
            // and the GoogleSignInResult will be available instantly.
            Log.d(TAG, "Got cached sign-in");
            GoogleSignInResult result = opr.get();
            handleSignInResult(result);
        } else {
            // If the user has not previously signed in on this device or the sign-in has expired,
            // this asynchronous branch will attempt to sign in the user silently.  Cross-device
            // single sign-on will occur in this branch.
            showProgressDialog();
            opr.setResultCallback(new ResultCallback<GoogleSignInResult>() {
                @Override
                public void onResult(GoogleSignInResult googleSignInResult) {
                    hideProgressDialog();
                    handleSignInResult(googleSignInResult);
                }
            });
        }
    }
 
    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {
        // An unresolvable error has occurred and Google APIs (including Sign-In) will not
        // be available.
        Log.d(TAG, "onConnectionFailed:" + connectionResult);
    }
 
    private void showProgressDialog() {
        if (mProgressDialog == null) {
            mProgressDialog = new ProgressDialog(this);
            mProgressDialog.setMessage(getString(R.string.loading));
            mProgressDialog.setIndeterminate(true);
        }
 
        mProgressDialog.show();
    }
 
    private void hideProgressDialog() {
        if (mProgressDialog != null && mProgressDialog.isShowing()) {
            mProgressDialog.hide();
        }
    }
 
    private void updateUI(boolean isSignedIn) {
        if (isSignedIn) {
            btnSignIn.setVisibility(View.GONE);
            btnSignOut.setVisibility(View.VISIBLE);
            btnRevokeAccess.setVisibility(View.VISIBLE);
            llProfileLayout.setVisibility(View.VISIBLE);
        } else {
            btnSignIn.setVisibility(View.VISIBLE);
            btnSignOut.setVisibility(View.GONE);
            btnRevokeAccess.setVisibility(View.GONE);
            llProfileLayout.setVisibility(View.GONE);
        }
    }
}

 

دانلود مثال :

G+Login.zip

 

1 کاربر پسند دیده است

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

ممنون از پاسخگویی تون

زمانی که کاربر ورود با گوگل رو زد و وررود تکمیل کرد چطوری باید اطلاعات اون رو مثل نام و شماره تماس رو ذخیره کنیم و و در جای خاصی مثل منو کناری این اطلاعات رو نشون بدیم ؟

همچنین برای بار اول که مراحل ورود با گوگل انجام شد زمانی که به این اکتیوتی می ریم فورس کلوز میده و خط های زیر را اشکال میگره


String personPhotoUrl = acct.getPhotoUrl().toString();
handleSignInResult(result);



 

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر
در 16 ساعت قبل، mostafa5709 گفته است :

ممنون از پاسخگویی تون

زمانی که کاربر ورود با گوگل رو زد و وررود تکمیل کرد چطوری باید اطلاعات اون رو مثل نام و شماره تماس رو ذخیره کنیم و و در جای خاصی مثل منو کناری این اطلاعات رو نشون بدیم ؟

همچنین برای بار اول که مراحل ورود با گوگل انجام شد زمانی که به این اکتیوتی می ریم فورس کلوز میده و خط های زیر را اشکال میگره



String personPhotoUrl = acct.getPhotoUrl().toString();
handleSignInResult(result);



 

لاگ ارور رو بدین چک کنیم

به اشتراک گذاری این پست


لینک به ارسال
به اشتراک گذاری در سایت های دیگر

برای ارسال نظر یک حساب کاربری ایجاد کنید یا وارد حساب خود شوید

برای اینکه بتوانید نظر ارسال کنید نیاز دارید که کاربر سایت شوید

ایجاد یک حساب کاربری

برای حساب کاربری جدید در انجمن ما ثبت نام کنید. عضویت خیلی ساده است !


ثبت نام یک حساب کاربری جدید

ورود به حساب کاربری

دارای حساب کاربری هستید؟ از اینجا وارد شوید


ورود به حساب کاربری

  • مطالب مشابه

    • توسط mehrdadmmb2
      سلام
      میخواستم بدونم دوستان کسی میدونه چجوری وب ویو رو به عکس تبدیل کنم؟
      هر لینکی که توی stackoverflow بود رو باز کردم اما هیچکدوم کار نمیکنه
      قبلا یبار این کار رو کردم اما متاسفانه کد رو ندارم اون موقع هم خیلی سخت پیدا شد
      اگر کسی کد مربوطه رو داره بی زحمت قرار بده 
      با تشکر
    • توسط dihanu
      سلام
      کسی میدونه چطور باید کدی بزنیم که با intent از ussd استفاده کنیم؟
      توضیح اینکه ussd همون کدهایی مثل *141*1# هست. و استادمون ازمون خواسته برنامه ای بنویسیم که باهاش شارژ بخریم
    • توسط farzaneh_mh
      با عرض سلام و وقت بخیر خدمت دوستان عزیز.
      بنده میخوام از دیتابیس Room استفاده کنم و کد های 
      compile 'android.arch.persistence.room:runtime:1.0.0'
          annotationProcessor 'android.arch.persistence.room:compiler:1.0.0'
      رو به gradle ماژول استفاده کردم ولی ارور میده و سینک نمیکنه ,و ارور Failed to resolve 'android.arch.persistence.room:runtime:1.0.0' میده،عکس ارور رو هم قرار دادم.
      لطفا راهنمایی کنید.
      پیشاپیش از راهنمایی هاتون سپاس گذارم

    • توسط saeed1366412
      با سلام من پروژه google map ساختم و API وsh1 رو دریافت کردم وبدون مشکل روی گوشی release انجام میشه زمانی که  generate signed apk انجام میدم میگه به درستی ساخته شد APK(s) generated successfully: اما داخل لوکیشن میرم خالی و فایل apk ساخته نشده پروژه های غیر google map بدون مشکل ساخته میشه لطفا راهنمایی کنید با تشکر

    • توسط Milad_Af4
      سلام 
      قصد من اینه که از داده های (String) دریافتی از کاربر یک فایل PDF تهیه نموده و تقدیم ایشون کنم!
      الان با iText این کار انجام میشه ولی فقط حروف لاتین رو نمایش میده و حروف فارسی تو فایل پی دی اف ناپدید میشن.
      سرچ زدم گفتن از یک فونت مثل Tahoma یا Niloofar استفاده کن ، فونت اِعمال میشه ولی باز هم متن فارسی قابل نمایش نیست!
      ممنون میشم اگه کسی با این iTextPdf کار کرده بنده رو راهنمایی کنه تا کار ما هم راه بیوفته ♥
      --   ورژن لایبرری : itextpdf-5.3.3  --   کد ها : public class ActivityPdfMaker extends AppCompatActivity { private Note note; private PdfWriter pWriter; private BaseFont mBaseFont; Button make; private String stringNote ,stringFileName ,stringTitle ,stringSubject ,stringKeywords ,stringAuthor ,stringCreator; @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_pdf_maker); URL font_path = Thread.currentThread().getContextClassLoader().getResource("niloofar.ttf"); String fPath = String.valueOf(font_path); try { mBaseFont = BaseFont.createFont(fPath,"UTF-8",BaseFont.EMBEDDED); } catch (DocumentException e) { e.printStackTrace(); } catch (IOException e) { e.printStackTrace(); } make = (Button) findViewById(R.id.make); make.setOnClickListener(new View.OnClickListener() { @Override public void onClick(View v) { try { makePdf(); } catch (IOException e) { e.printStackTrace(); } } }); } private void makePdf() throws IOException { String FILE = Environment.getExternalStorageDirectory().toString()+ "/PDF/" +stringFileName+".pdf"; Document document = new Document(PageSize.A4); String root = Environment.getExternalStorageDirectory().toString(); File myDir = new File(root + "/PDF"); myDir.mkdirs(); try { pWriter = PdfWriter.getInstance(document, new FileOutputStream(FILE)); document.open(); document.addTitle(stringTitle); document.addSubject(stringSubject); document.addKeywords(stringKeywords); document.addAuthor(stringAuthor); document.addCreator(stringCreator); addTitlePage(document); } catch (FileNotFoundException e) { // TODO Auto-generated catch block e.printStackTrace(); } catch (DocumentException e) { // TODO Auto-generated catch block e.printStackTrace(); } document.close(); Toast.makeText(this, "فایل شما تهیه شد : " + FILE, Toast.LENGTH_LONG).show(); } public void addTitlePage(Document document) throws DocumentException { Font catFont = new Font(mBaseFont, 18, Font.BOLD, BaseColor.BLACK); Font titleFont = new Font(mBaseFont, 22, Font.BOLD | Font.UNDERLINE, BaseColor.GRAY); Font smallBold = new Font(mBaseFont, 12, Font.BOLD); Font normal = new Font(mBaseFont, 12, Font.NORMAL); Paragraph prHead = new Paragraph(); prHead.setFont(titleFont); prHead.add(stringFileName+"\n"); PdfPTable myTable = new PdfPTable(1); myTable.setWidthPercentage(100.0f); PdfPCell myCell = new PdfPCell(new Paragraph("")); myCell.setBorder(Rectangle.BOTTOM); myTable.addCell(myCell); prHead.setFont(catFont); prHead.add("\n"+stringSubject+"\n"); prHead.setAlignment(Element.ALIGN_CENTER); document.add(prHead); document.add(myTable); document.add(myTable); Paragraph prPersinalInfo = new Paragraph(); prPersinalInfo.setFont(smallBold); prPersinalInfo.add("\n"+stringNote+"\n"); prPersinalInfo.setAlignment(Element.ALIGN_CENTER); document.add(prPersinalInfo); document.add(myTable); document.add(myTable); Paragraph prProfile = new Paragraph(); prProfile.setFont(smallBold); prProfile.add("\n \n Profile : \n "); prProfile.setFont(normal); prProfile.add("\n"+"Author: "+stringAuthor+"\n"+"Creator: "+stringCreator); prProfile.setFont(smallBold); document.add(prProfile); document.newPage(); } }  

  • دوره آموزشی اندروید ایران کانادا آموزش ویدئویی اندروید آموزش برنامه نویسی اندروید اندروید کاپ دوره آنلاین اندروید کتاب های آموزشی اندروید بسته آموزشی اندروید دوره برنامه نویسی اندروید آموزش Kotlin آموزش برنامه نویسی ios مهارت های فروش
    آموزش برنامه نویسی اندروید
  • فایل