使用谷歌+ API在Android中的身份验证和共享
本教程于2017年4月更新为谷歌Play Services的10.2版
在本教程中,我将展示如何将您的Android应用程序连接到谷歌Plus API,并使用它登录,获取和共享数据。
在上找到完成的项目GitHub.
创建Android项目
打开Android Studio并创建一个新项目你可以随意命名。点击下一个,选择最低空气污染指数18并点击下一个一次。选择空白的活动作为第一个活动,命名它LoginActivity并点击完成.
设置gradle
开放构建。gradle(模块)并添加应用插件:'com.google.gms.google-services'
到文件的末尾。在里面添加这些线条依赖关系
:
编译‘google.android.gms:play-services-auth:10.2.0’
现在打开构建。gradle(项目)把这条线加进去依赖关系
:
类路径“com.google.gms:谷歌服务:3.0.0”
下一步是添加文件google-services.json
对你的项目。此文件包含开发人员凭据和连接到谷歌API客户端的配置设置。你可以下载这个文件在这里,移动到应用程序您的项目和文件夹同步gradle。
布局
在布局项目的文件夹,删除content_login.xml文件。
内部activity_login.xml,删除<包括布局= " @layout / content_login " / >
并将浮动操作按钮代码替换为这些行。在这个布局中我们唯一需要的是登录按钮:
<使用android:layout_width="宽和"android:layout_height="match_parent"android:layout_weight="1"><com.google.android.gms.common.SignInButtonandroid:id="@ + id / sign_in_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:layout_centerInParent="真正的"android:可见性="可见"工具:可见性="走了"/><LinearLayoutandroid:id="@ + id / sign_out_and_disconnect"android:layout_width="宽和"android:layout_height="wrap_content"android:layout_centerInParent="真正的"android:取向="水平"android:paddingLeft="16 dp"android:paddingRight="16 dp"android:可见性="走了"工具:可见性="可见"><按钮android:id="@ + id / sign_out_button"android:layout_width="0 dp"android:layout_height="wrap_content"android:layout_weight="1"android:文本="签署了"/>LinearLayout>使用>
打开LoginActivity类中的浮动操作按钮代码onCreate ()
方法。
确保你的公共类LoginActivity扩展了AppCompatActivity
而且实现了GoogleApiClient。OnConnectionFailedListener,视图。OnClickListener {
之前onCreate ()
方法添加以下代码:
私人静态最后字符串标签=“LoginActivity”;私人静态最后intSIGN_IN_CODE=9001;私人GoogleApiClientmGoogleApiClient;私人GoogleSignInAccount账户;
在onCreate
方法,在右括号之前,添加这些设置连接到谷歌API的行,并将它们绑定到登录按钮:
findViewById(R.id.sign_in_button).setOnClickListener(这);findViewById(R.id.sign_out_button).setOnClickListener(这);GoogleSignInOptions静止=新GoogleSignInOptions.构建器(GoogleSignInOptions.DEFAULT_SIGN_IN).requestEmail().构建();mGoogleApiClient=新GoogleApiClient.构建器(这).enableAutoManage(这,这).addApi(身份验证.GOOGLE_SIGN_IN_API,静止).构建();SignInButtonsignInButton=(SignInButton)findViewById(R.id.sign_in_button);signInButton.setSize(SignInButton.SIZE_STANDARD);
后onCreate ()
方法,我们将实现重写的方法。首先是onStart ()
和占位符onConnectionFailed
方法。将它们添加到LoginActivity
类:
@Override公共无效onStart(){超级.onStart();OptionalPendingResult<GoogleSignInResult>optPenRes=身份验证.GoogleSignInApi.silentSignIn(mGoogleApiClient);如果(optPenRes.结束()){日志.e(标签,“Yayy !”);GoogleSignInResult结果=optPenRes.得到();handleSignInResult(结果);}其他的{optPenRes.setResultCallback(新ResultCallback<GoogleSignInResult>(){@Override公共无效onResult(GoogleSignInResultgoogleSignInResult){handleSignInResult(googleSignInResult);}});}}@Override公共无效onConnectionFailed(ConnectionResultconnectionResult){}
不要担心您可能会看到的错误,因为我们稍后将实现这些方法。
第二个重写的方法是onActivityResult ()
.在添加最后一个方法之后添加它。代码如下:
@Override公共无效onActivityResult(intrequestCode,intresultCode,意图数据){超级.onActivityResult(requestCode,resultCode,数据);如果(requestCode= =SIGN_IN_CODE){GoogleSignInResult结果=身份验证.GoogleSignInApi.getSignInResultFromIntent(数据);handleSignInResult(结果);}}}
接下来添加handeSignInResult ()
方法。onActivityResult ()
方法:
私人无效handleSignInResult(GoogleSignInResult结果){日志.e(标签,”handleSignInResult:“+结果.isSuccess());如果(结果.isSuccess()){账户=结果.getSignInAccount();日志.e(标签,账户.getDisplayName());日志.e(标签,账户.getEmail());日志.e(标签,账户.getId());updateUI(真正的);}其他的{updateUI(假);}}
现在我们要添加signIn ()
而且signOut ()
方法:
私人无效signIn(){意图signInIntent=身份验证.GoogleSignInApi.getSignInIntent(mGoogleApiClient);startActivityForResult(signInIntent,SIGN_IN_CODE);}私人无效signOut(){身份验证.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(新ResultCallback<状态>(){@Override公共无效onResult(状态状态){updateUI(假);}});}
下一个方法是updateUI ()
.如果用户已登录,那么它将更改登录和退出按钮的可见性,并创建一个新的意图
被称为主要
它表示成功登录流程后打开的下一个活动。下一个活动是MainActivity
.在切换活动之前,我们应该传递一些作为帐户信息接收的额外数据。我们正在经过displayname
而且imageurl
字符串到新意图作为额外的。
私人无效updateUI(布尔signedIn){如果(signedIn){findViewById(R.id.sign_in_button).setVisibility(视图.走了);findViewById(R.id.sign_out_and_disconnect).setVisibility(视图.可见);意图主要=新意图(这,MainActivity.类);主要.putExtra(“displayname”,账户.getDisplayName());主要.putExtra(“imageurl”,账户.getPhotoUrl().toString());startActivity(主要);完成();}其他的{findViewById(R.id.sign_in_button).setVisibility(视图.可见);findViewById(R.id.sign_out_and_disconnect).setVisibility(视图.走了);}}
我们需要实现的最后一个方法LoginActivity
类是onClick(查看v)
:
@Override公共无效onClick(视图v){开关(v.getId()){情况下R.id.sign_in_button:signIn();打破;情况下R.id.sign_out_button:signOut();打破;}}
的LoginActivity
现在课程结束了。
主要活动类别
我们需要另一个类显示用户信息和头像,并放置谷歌加分享按钮。从创建一个新类开始右击在您的包上(例如:com.example. thehoor .googleplusintegration),并选择到新->活动->空白的活动.保留默认名称MainActivity并点击完成.
删除content_main.xml存档,因为我们不需要它。
开放activity_main.xml和替换<包括布局= " @layout / content_main " / >
:
<LinearLayoutandroid:layout_width="match_parent"android:layout_height="match_parent"android:取向="垂直"android:paddingTop="100 dp"><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:文本="你好"android:id="@ + id / textView"android:layout_gravity="center_horizontal"/><TextViewandroid:layout_width="wrap_content"android:layout_height="wrap_content"android:文本="新文本"android:id="@ + id / nameSurnameText"android:layout_gravity="center_horizontal"/><ImageViewandroid:layout_width="150 dp"android:layout_height="150 dp"android:id="@ + id / imageView"android:layout_gravity="center_horizontal"/><按钮android:id="@ + id / share_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:文本="分享在谷歌+"android:layout_gravity="center_horizontal"/><按钮android:id="@ + id / sign_out_button"android:layout_width="wrap_content"android:layout_height="wrap_content"android:文本="签署了"android:可见性="可见"android:layout_gravity="中心"/>LinearLayout>
删除浮动动作按钮代码,因为我们不会使用它。
现在打开MainActivity
类,我们将添加代码使其工作。
首先,确保类扩展和实现了我们将使用的类:
公共类MainActivity扩展AppCompatActivity实现了GoogleApiClient.OnConnectionFailedListener,视图.OnClickListener{
之前onCreate ()
方法添加以下两行代码:
GoogleApiClientmGoogleApiClient;私人静态最后intSIGN_IN_CODE=9001;
在onCreate ()
方法,用这些行替换浮动动作按钮代码:
findViewById(R.id.sign_out_button).setOnClickListener(这);GoogleSignInOptions静止=新GoogleSignInOptions.构建器(GoogleSignInOptions.DEFAULT_SIGN_IN).requestEmail().构建();mGoogleApiClient=新GoogleApiClient.构建器(这).enableAutoManage(这,这).addApi(身份验证.GOOGLE_SIGN_IN_API,静止).构建();
在这里,我们创建了退出按钮,并构建了一个新的GoogleApiClient
它会设置应用程序使用哪个API。在本例中,我们将使用谷歌身份验证,因为我们正在执行谷歌Plus登录。
在相同的方法中,添加这些行:
意图意图=getIntent();字符串nameSurname=意图.getStringExtra(“displayname”);字符串imageUrl=意图.getStringExtra(“imageurl”);TextViewdisplayName=(TextView)findViewById(R.id.nameSurnameText);displayName.setText(""+nameSurname);
在这里,我们创建了一个意图,并使用它来从最后一个活动of中发送额外的内容displayname
而且imageurl
字符串。
接下来,我们应该添加创建共享按钮的代码:
按钮shareButton=(按钮)findViewById(R.id.share_button);shareButton.setOnClickListener(这);
自视图。OnClickListener
是在这个类中实现的,我们需要它的重写方法。将其添加到onCreate ()
方法:
@Override公共无效onClick(视图v){开关(v.getId()){情况下R.id.sign_in_button:signIn();打破;情况下R.id.sign_out_button:signOut();打破;情况下R.id.share_button:意图shareIntent=新PlusShare.构建器(这).setType(“文本/普通”).getIntent();startActivityForResult(shareIntent,0);打破;}}
该类的其余方法是signIn ()
,signOut ()
和被调用的重写方法onConnectionFailed ()
:
@Override公共无效onConnectionFailed(ConnectionResultconnectionResult){}私人无效signOut(){身份验证.GoogleSignInApi.signOut(mGoogleApiClient).setResultCallback(新ResultCallback<状态>(){@Override公共无效onResult(状态状态){意图登录=新意图(MainActivity.这,LoginActivity.类);startActivity(登录);完成();}});}私人无效signIn(){意图signInIntent=身份验证.GoogleSignInApi.getSignInIntent(mGoogleApiClient);startActivityForResult(signInIntent,SIGN_IN_CODE);}
从LoginActivity
我们收到displayname
而且imageurl
作为字符串。第一个将显示为文本,使用TextView
但是秒需要显示为图像。让我们创建另一个类,它使用imageurl
字符串下载并显示位图图像。
创建一个新类右击您的包装和选择新->Java类.我叫它DownloadImageTask
它的代码如下:
公共类DownloadImageTask扩展AsyncTask<字符串,无效,位图>{ImageViewbmImage;公共DownloadImageTask(ImageViewmImage){这.bmImage=mImage;}受保护的位图doInBackground(字符串...url){字符串url=url[0];位图mBitmap=零;试一试{InputStream在=新java.网.URL(url).openStream();mBitmap=BitmapFactory.decodeStream(在);}抓(异常e){日志.e(“错误”,e.getMessage());e.printStackTrace();}返回mBitmap;}受保护的无效onPostExecute(位图结果){bmImage.setImageBitmap(结果);}}
称之为我们的MainActivity
类中添加此代码行onCreate ()
方法:
新DownloadImageTask((ImageView)findViewById(R.id.imageView)).执行(imageUrl);
启用谷歌播放服务
最后一个任务是将应用程序连接到谷歌api。点击在这里浏览谷歌服务页面。
添加应用程序名称和包名称,然后单击继续.
在下一个视图中添加SHA-1指纹密钥。如果你不知道怎么做,谷歌帮助页面是最好的信息来源。
点击继续要生成所需的配置文件,请下载google-services.json文件和移动到你的YourProjectName / app /或移动/目录中。
现在可以运行应用程序了。
结论
在本教程中,我展示了将谷歌Plus集成到Android应用程序中进行身份验证和共享内容的一些基本步骤。通过这种整合,还可以实现更多功能,如社交图谱信息、深度链接和空中安装。
我很乐意听到你的任何问题、问题和想法.