使用谷歌+ API在Android中的身份验证和共享

Theodhor Pandeli
分享

本教程于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_heightmatch_parentandroid:layout_weight1><com.google.android.gms.common.SignInButtonandroid:id@ + id / sign_in_buttonandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:layout_centerInParent真正的android:可见性可见工具:可见性走了/><LinearLayoutandroid:id@ + id / sign_out_and_disconnectandroid:layout_width宽和android:layout_heightwrap_contentandroid:layout_centerInParent真正的android:取向水平android:paddingLeft16 dpandroid:paddingRight16 dpandroid:可见性走了工具:可见性可见><按钮android:id@ + id / sign_out_buttonandroid:layout_width0 dpandroid:layout_heightwrap_contentandroid:layout_weight1android:文本签署了/>LinearLayout>使用>

打开LoginActivity类中的浮动操作按钮代码onCreate ()方法。

确保你的公共类LoginActivity扩展了AppCompatActivity而且实现了GoogleApiClient。OnConnectionFailedListener,视图。OnClickListener {

之前onCreate ()方法添加以下代码:

私人静态最后字符串标签“LoginActivity”私人静态最后intSIGN_IN_CODE9001私人GoogleApiClientmGoogleApiClient私人GoogleSignInAccount账户

onCreate方法,在右括号之前,添加这些设置连接到谷歌API的行,并将它们绑定到登录按钮:

findViewByIdRidsign_in_buttonsetOnClickListenerfindViewByIdRidsign_out_buttonsetOnClickListenerGoogleSignInOptions静止GoogleSignInOptions构建器GoogleSignInOptionsDEFAULT_SIGN_INrequestEmail构建mGoogleApiClientGoogleApiClient构建器enableAutoManageaddApi身份验证GOOGLE_SIGN_IN_API静止构建SignInButtonsignInButtonSignInButtonfindViewByIdRidsign_in_buttonsignInButtonsetSizeSignInButtonSIZE_STANDARD

onCreate ()方法,我们将实现重写的方法。首先是onStart ()和占位符onConnectionFailed方法。将它们添加到LoginActivity类:

@Override公共无效onStart超级onStartOptionalPendingResult<GoogleSignInResult>optPenRes身份验证GoogleSignInApisilentSignInmGoogleApiClient如果optPenRes结束日志e标签“Yayy !”GoogleSignInResult结果optPenRes得到handleSignInResult结果其他的optPenRessetResultCallbackResultCallback<GoogleSignInResult>@Override公共无效onResultGoogleSignInResultgoogleSignInResulthandleSignInResultgoogleSignInResult@Override公共无效onConnectionFailedConnectionResultconnectionResult

不要担心您可能会看到的错误,因为我们稍后将实现这些方法。

第二个重写的方法是onActivityResult ().在添加最后一个方法之后添加它。代码如下:

@Override公共无效onActivityResultintrequestCodeintresultCode意图数据超级onActivityResultrequestCoderesultCode数据如果requestCode= =SIGN_IN_CODEGoogleSignInResult结果身份验证GoogleSignInApigetSignInResultFromIntent数据handleSignInResult结果

接下来添加handeSignInResult ()方法。onActivityResult ()方法:

私人无效handleSignInResultGoogleSignInResult结果日志e标签”handleSignInResult:“+结果isSuccess如果结果isSuccess账户结果getSignInAccount日志e标签账户getDisplayName日志e标签账户getEmail日志e标签账户getIdupdateUI真正的其他的updateUI

现在我们要添加signIn ()而且signOut ()方法:

私人无效signIn意图signInIntent身份验证GoogleSignInApigetSignInIntentmGoogleApiClientstartActivityForResultsignInIntentSIGN_IN_CODE私人无效signOut身份验证GoogleSignInApisignOutmGoogleApiClientsetResultCallbackResultCallback<状态>@Override公共无效onResult状态状态updateUI

下一个方法是updateUI ().如果用户已登录,那么它将更改登录和退出按钮的可见性,并创建一个新的意图被称为主要它表示成功登录流程后打开的下一个活动。下一个活动是MainActivity.在切换活动之前,我们应该传递一些作为帐户信息接收的额外数据。我们正在经过displayname而且imageurl字符串到新意图作为额外的。

私人无效updateUI布尔signedIn如果signedInfindViewByIdRidsign_in_buttonsetVisibility视图走了findViewByIdRidsign_out_and_disconnectsetVisibility视图可见意图主要意图MainActivity主要putExtra“displayname”账户getDisplayName主要putExtra“imageurl”账户getPhotoUrltoStringstartActivity主要完成其他的findViewByIdRidsign_in_buttonsetVisibility视图可见findViewByIdRidsign_out_and_disconnectsetVisibility视图走了

我们需要实现的最后一个方法LoginActivity类是onClick(查看v)

@Override公共无效onClick视图v开关vgetId情况下Ridsign_in_buttonsignIn打破情况下Ridsign_out_buttonsignOut打破

LoginActivity现在课程结束了。

主要活动类别

我们需要另一个类显示用户信息和头像,并放置谷歌加分享按钮。从创建一个新类开始右击在您的包上(例如:com.example. thehoor .googleplusintegration),并选择到->活动->空白的活动.保留默认名称MainActivity并点击完成

删除content_main.xml存档,因为我们不需要它。

开放activity_main.xml和替换<包括布局= " @layout / content_main " / >:

<LinearLayoutandroid:layout_widthmatch_parentandroid:layout_heightmatch_parentandroid:取向垂直android:paddingTop100 dp><TextViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:文本你好android:id@ + id / textViewandroid:layout_gravitycenter_horizontal/><TextViewandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:文本新文本android:id@ + id / nameSurnameTextandroid:layout_gravitycenter_horizontal/><ImageViewandroid:layout_width150 dpandroid:layout_height150 dpandroid:id@ + id / imageViewandroid:layout_gravitycenter_horizontal/><按钮android:id@ + id / share_buttonandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:文本分享在谷歌+android:layout_gravitycenter_horizontal/><按钮android:id@ + id / sign_out_buttonandroid:layout_widthwrap_contentandroid:layout_heightwrap_contentandroid:文本签署了android:可见性可见android:layout_gravity中心/>LinearLayout>

删除浮动动作按钮代码,因为我们不会使用它。

现在打开MainActivity类,我们将添加代码使其工作。

首先,确保类扩展和实现了我们将使用的类:

公共MainActivity扩展AppCompatActivity实现了GoogleApiClientOnConnectionFailedListener视图OnClickListener

之前onCreate ()方法添加以下两行代码:

GoogleApiClientmGoogleApiClient私人静态最后intSIGN_IN_CODE9001

onCreate ()方法,用这些行替换浮动动作按钮代码:

findViewByIdRidsign_out_buttonsetOnClickListenerGoogleSignInOptions静止GoogleSignInOptions构建器GoogleSignInOptionsDEFAULT_SIGN_INrequestEmail构建mGoogleApiClientGoogleApiClient构建器enableAutoManageaddApi身份验证GOOGLE_SIGN_IN_API静止构建

在这里,我们创建了退出按钮,并构建了一个新的GoogleApiClient它会设置应用程序使用哪个API。在本例中,我们将使用谷歌身份验证,因为我们正在执行谷歌Plus登录。

在相同的方法中,添加这些行:

意图意图getIntent字符串nameSurname意图getStringExtra“displayname”字符串imageUrl意图getStringExtra“imageurl”TextViewdisplayNameTextViewfindViewByIdRidnameSurnameTextdisplayNamesetText""+nameSurname

在这里,我们创建了一个意图,并使用它来从最后一个活动of中发送额外的内容displayname而且imageurl字符串。

接下来,我们应该添加创建共享按钮的代码:

按钮shareButton按钮findViewByIdRidshare_buttonshareButtonsetOnClickListener

视图。OnClickListener是在这个类中实现的,我们需要它的重写方法。将其添加到onCreate ()方法:

@Override公共无效onClick视图v开关vgetId情况下Ridsign_in_buttonsignIn打破情况下Ridsign_out_buttonsignOut打破情况下Ridshare_button意图shareIntentPlusShare构建器setType“文本/普通”getIntentstartActivityForResultshareIntent0打破

该类的其余方法是signIn ()signOut ()和被调用的重写方法onConnectionFailed ()

@Override公共无效onConnectionFailedConnectionResultconnectionResult私人无效signOut身份验证GoogleSignInApisignOutmGoogleApiClientsetResultCallbackResultCallback<状态>@Override公共无效onResult状态状态意图登录意图MainActivityLoginActivitystartActivity登录完成私人无效signIn意图signInIntent身份验证GoogleSignInApigetSignInIntentmGoogleApiClientstartActivityForResultsignInIntentSIGN_IN_CODE

LoginActivity我们收到displayname而且imageurl作为字符串。第一个将显示为文本,使用TextView但是秒需要显示为图像。让我们创建另一个类,它使用imageurl字符串下载并显示位图图像。

创建一个新类右击您的包装和选择->Java类.我叫它DownloadImageTask它的代码如下:

公共DownloadImageTask扩展AsyncTask<字符串无效位图>ImageViewbmImage公共DownloadImageTaskImageViewmImagebmImagemImage受保护的位图doInBackground字符串url字符串urlurl0位图mBitmap试一试InputStreamjavaURLurlopenStreammBitmapBitmapFactorydecodeStream异常e日志e“错误”egetMessageeprintStackTrace返回mBitmap受保护的无效onPostExecute位图结果bmImagesetImageBitmap结果

称之为我们的MainActivity类中添加此代码行onCreate ()方法:

DownloadImageTaskImageViewfindViewByIdRidimageView执行imageUrl

启用谷歌播放服务

最后一个任务是将应用程序连接到谷歌api。点击在这里浏览谷歌服务页面。

添加应用程序名称和包名称,然后单击继续

在下一个视图中添加SHA-1指纹密钥。如果你不知道怎么做,谷歌帮助页面是最好的信息来源。

点击继续要生成所需的配置文件,请下载google-services.json文件和移动到你的YourProjectName / app /移动/目录中。

现在可以运行应用程序了。

最终的应用程序"loading=

结论

在本教程中,我展示了将谷歌Plus集成到Android应用程序中进行身份验证和共享内容的一些基本步骤。通过这种整合,还可以实现更多功能,如社交图谱信息、深度链接和空中安装。

我很乐意听到你的任何问题、问题和想法

使用AIDL在Android应用程序之间共享功能"></a>
         <div class= 使用AIDL在Android应用程序之间共享功能 阿巴斯Suterwala
开始Android:启动Android虚拟设备"></a>
         <div class= 开始Android:启动Android虚拟设备 杰夫·弗瑞森
开始Android:创建一个Android虚拟设备"></a>
         <div class= 开始Android:创建一个Android虚拟设备 杰夫·弗瑞森
开始Android:安装Android平台"></a>
         <div class= 开始Android:安装Android平台 杰夫·弗瑞森
Baidu