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);



 

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

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


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

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

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

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

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


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

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

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


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

  • مطالب مشابه

    • توسط 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(); } }  
    • توسط saeedsektor
      سلام دوستان . خسته نباشید .
      من به تازگی تصمیم به یادگیری اندروید گرفتم ولی خب متاسفانه همین اول را به مشکلی خوردم که درست بشو نیست
      به زبان انگلیسی هم سرچ کردم ولی جایی جواب درستی نبود . مشکل من اینه که همون اولی که اندروید استودیو رو باز میکنم این ارور میاد
      Error:Failed to find Build Tools revision 26.0.2
      پیر شدم سر این .
      حالا روش هایی که امتحان کردم هم زیاد بوده ولی جواب نبوده مثلا تو stackoverflow گفته بود که برو تو project structure بعد تو properties و اونجا ورژن build tools رو عوض کن . در صورتی که اصلا در project structure من اصلا properties نیست .
      یک جای دیگه گفته بود که این خط رو به build.gradle اضافه کن درست میشه buildToolsVersion "24.0.0" اضافه کردم و هیچ عملی نکرد باز هم همون ارور
      وقتی دیدم راهی نداره گفتم باید این فایل رو دانلود کنم چندین جا گشتم و نبود ولی یک جا پیدا کردم دانلود کردم و extract کردم تو پوشه build tools ولی جوابی نبود و همون ارور میومد .
      الان راه چیه ؟ اگی فایلی هست که شما میدونین بگین تا دانلود کنم
    • توسط banker
      سلام خدمت همه متخصصان و برنامه نویسان محترم
      من میخواستم بپرسم من به تنهایی قادرم با دانش ابتدایی از زبان جاوا و اندروید استادیو ، پروژه اندرویدی شارژ موبایل و پرداخت قبض به ثورت پرداخت مستقیم و درگاه بانکی انجام بدم
      اگر جواب مثبت هست موارد مورد نیاز و بیزنس آن را به بنده  را بفرمایید.
      اگر هم جواب منفیست بفرمایید چه کسی میتواند با من همکاری کند و هزینه آن هم مطرح کند ممنون میشوم
    • توسط b.kordtabar
      با سلام
       
      آیا می توان برنامه ای نوشت که memory usage یا cpu usage اپلیکیشن را اندازه بگیرد ؟
      کسی می تواند راهنمایی کند؟
      با تشکر
    • توسط دی تک سیستم
      سلام، من میخوام تصویر اندروید رو وقتی با کابل اچ دی ام ای به تلویزیون متصل میکنم به صورت عمودی(portrait) و تمام صفحه ببینم، با نرم افزارهای آماده ی موجود اینکار شدنی نبود، لطفا راهنمایی فرمایید.

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