Android中集成google play 登陆来获取用户名、邮件地址、token等用户信息

241 篇文章 5 订阅
订阅专栏

一、打开主界面:

https://developers.google.com/



二、点击最右侧的所有产品

https://developers.google.com/products/



三、点击登陆和身份识别,然后选择Google Sign-In


四、选择ANDROID


五、点击GET STARTED


六、点击ADD SIGN-IN TO YOUR APP


七、将谷歌登陆集成到Android应用

将谷歌登陆集成到你的Android应用

在你将谷歌登陆集成到你的app中之前,你必须在谷歌控API的控制台对该项目进行配置。接下来描述如何将谷歌登陆集成到你的app。


前期准备

-2.3或之上,并且包含Google Play Store的手机,或者Android4.2.2或者更高的Google APIS平台的系统并且有9.8.0或之上的谷歌服务。

-最新的Android SDK版本,包括SDK工具组件。可以通过Android Studio中的Android SDK Manager来进行下载。

-项目的编译版本在2.3或以上

-谷歌服务的SDK:

 1.在Android Studio中,选择Tools>Android>SDK Manager

 2.滑动到选项列表的底部,并选择Extras>Google Repository。软件包将会被下载到你的电脑,并且在SDK的配置目录下进行安装android-sdk-folder/extras/google/google_play_services

本文是推荐的开发工具Android Studio的开发指南


获取配置文件

点击下面的按钮来获取配置文件并添加到你的项目中。

配置文件为app提供了特殊的服务。在获取之前,你必须选择一个已经存在的项目或者重新创建一个。你还必须为你的app提供包名。

在创建配置文件的时候,你也必须提供签名证书的SHA-1.查看 Authenticating Your Client(https://developers.google.com/android/guides/client-auth) 获取更多的信息。


添加谷歌服务插件

Gradle的谷歌服务插件用来解析google-services.json中的配置信息。通过在project级的build.gradle中进行配置并且app级的build.gradle文件如下:

1.在project级的build.gradle中添加以下依赖:

classpath 'com.google.gms:google-services:3.0.0'


2.在app级的build.gradle中添加如下文件:

在app级的build.gradle文件中,声明Google Play Services的依赖:

apply plugin: 'com.android.application'
    ...

    dependencies {
        compile 'com.google.android.gms:play-services-auth:9.8.0'
    }

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




获取服务端的OAuth 2.0的客户端ID

1.打开凭证界面(https://console.developers.google.com/apis/credentials?project=test-analytics-f14b6)

2.网页应用类型的客户端ID是你的OAuth2.0客户端ID

注:如果你没有创建新的Android客户端,你可能没有网络应用类型的客户端ID.你可以在凭证界面点击创建凭证-->OAuth客户端ID来进行创建

当创建GoogleSignInOptions对象时,传入到方法requestIdToken或requestServerAuthCode.



配置谷歌登陆和谷歌客户端请求对象

1.在Activity的onCrete方法中,配置谷歌登陆所需的用户请求。例如,配置谷歌登陆请求的客户ID和基本的文件信息,创建一个默认参数的GoogleSignInOptions对象。用GoogleSignInOptions对象来配置用的邮件地址。

// Configure sign-in to request the user's ID, email address, and basic
// profile. ID and basic profile are included in DEFAULT_SIGN_IN.
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
        .requestEmail()
        .build();

注:为了使用enableAutoManage,必须继承Android Support Library下的FragmentActivity或者AppCompatActivity(FragmentActivity的子类)。你可以在Fragment中使用GgoogleApiClient;然而,该fragment的父Activity必须是FragmentActivity.如果你不能继承FragmentActivity,你必须手动管理GoogleApiClient连接的生命周期。

2.在Activityd onCreate方法中,创建要给GoogleApiClient对象来访问Google Sign-In AP和其它定义的信息。

// Build a GoogleApiClient with access to the Google Sign-In API and the
// options specified by gso.
mGoogleApiClient = new GoogleApiClient.Builder(this)
        .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
        .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
        .build();

注:为了自动化管理,activity必须继承Android Support Library包下的FragmentActivity或者AppCompatActivity(FragmentActivity的子类)。你也可以在Fragment中使用GoogleApiClient,然后,该fragment的父activity必须是FragmentActivity.如果不继承FragmentActivity,那么你必须手动管理GoogleApiClient连接的生命周期。



添加谷歌登陆按钮

1.在应用布局中添加登陆按钮

<com.google.android.gms.common.SignInButton
 android:id="@+id/sign_in_button"
 android:layout_width="wrap_content"
 android:layout_height="wrap_content" />

2.可选的:如果你使用了默认的登陆按钮而不是由资源文件中提供的,你可以通过setSize方法来定制按钮的大小

// Set the dimensions of the sign-in button.
SignInButton signInButton = (SignInButton) findViewById(R.id.sign_in_button);
signInButton
.setSize(SignInButton.SIZE_STANDARD);
3.在Activity的onCreate方法中,注册当用户点击时登陆的按钮的点击事件:

findViewById(R.id.sign_in_button).setOnClickListener(this);


开始登陆

1.在Activity的onClick方法中,通过getSingnInIntent方法来创建一个登陆的intent来处理点击,并且通过startActivityForResult来开启intent

@Override
public void onClick(View v) {
    switch (v.getId()) {
        case R.id.sign_in_button:
            signIn();
            break;
        // ...
    }
}

private void signIn() {
    Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
    startActivityForResult(signInIntent, RC_SIGN_IN);
}

弹出提示框让用户选择一个所要登陆的账户。

2.在方法onActivityResult中从getSignInResultFromIntent中检索登陆的结果信息

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

在获取到登陆的结果后,可以通过方法isSuccess来检测是否登陆成功。如果登陆成功,你可以调用方法getSignInAccount来获取登陆用户信息的GoogleSignInAccount对象,例如用户名。

private void handleSignInResult(GoogleSignInResult result) {
    Log.d(TAG, "handleSignInResult:" + result.isSuccess());
    if (result.isSuccess()) {
        // Signed in successfully, show authenticated UI.
        GoogleSignInAccount acct = result.getSignInAccount();
        mStatusTextView.setText(getString(R.string.signed_in_fmt, acct.getDisplayName()));
        updateUI(true);
    } else {
        // Signed out, show unauthenticated UI.
        updateUI(false);
    }
}
可以通过getEmail方法获取email地址,getId方法获取用户的Google ID,用getIdToken方法获取用户的ID token。如果需要通过现在登陆的用户与服务器,通过发送该ID token来进行验证。

package com.gp.download.apk;

import android.content.Context;
import android.content.Intent;
import android.os.Bundle;
import android.support.annotation.NonNull;
import android.support.v4.app.FragmentActivity;
import android.view.View;

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.api.GoogleApiClient;
import com.google.android.gms.common.SignInButton;


public class MainActivity extends FragmentActivity implements GoogleApiClient.OnConnectionFailedListener, View.OnClickListener {

    private Context context;
    private String dirPath;
    private GoogleApiClient mGoogleApiClient;

    private SignInButton SignInButton;

    private int RC_SIGN_IN = 1;


    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        context = getApplicationContext();
        dirPath = context.getFilesDir().toString();

        findViewById();
        initData();
        setOnClickListener();
    }

    private void setOnClickListener() {
        SignInButton.setOnClickListener(this);
    }

    private void findViewById() {
        SignInButton = (com.google.android.gms.common.SignInButton) findViewById(R.id.sign_in_button);
    }

    private void initData() {
        // Configure sign-in to request the user's ID, email address, and basic
        // profile. ID and basic profile are included in DEFAULT_SIGN_IN.
        GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
                .requestEmail()
                .build();

        // Build a GoogleApiClient with access to the Google Sign-In API and the
        // options specified by gso.
        mGoogleApiClient = new GoogleApiClient.Builder(this)
                .enableAutoManage(this /* FragmentActivity */
                        , this /* OnConnectionFailedListener */)
                .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
                .build();
    }


    @Override
    public void onConnectionFailed(@NonNull ConnectionResult connectionResult) {

    }

    @Override
    public void onClick(View view) {
        System.out.println("click 1....................");
        switch (view.getId()) {
            case R.id.sign_in_button:
                System.out.println("click 2....................");
                signIn();
                break;
        }
    }

    private void signIn() {
        System.out.println("click 3....................");
        Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(mGoogleApiClient);
        startActivityForResult(signInIntent, RC_SIGN_IN);
    }

    @Override
    public void onActivityResult(int requestCode, int resultCode, Intent data) {
        super.onActivityResult(requestCode, resultCode, data);

        System.out.println("click 4....................");
        // Result returned from launching the Intent from GoogleSignInApi.getSignInIntent(...);
        if (requestCode == RC_SIGN_IN) {
            System.out.println("click 5....................");
            GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
            handleSignInResult(result);
        }
    }

    private void handleSignInResult(GoogleSignInResult result) {
        System.out.println("handleSignInResult:" + result.isSuccess());
        if (result.isSuccess()) {
            // Signed in successfully, show authenticated UI.
            GoogleSignInAccount acct = result.getSignInAccount();
//            mStatusTextView.setText(getString(R.string.signed_in_fmt, acct.getDisplayName()));
//            updateUI(true);
            System.out.println("login succeed........................" + acct.getIdToken());
        } else {
            // Signed out, show unauthenticated UI.
//            updateUI(false);
            System.out.println("login failed........................");
        }
    }
}

<?xml version="1.0" encoding="utf-8"?>
<RelativeLayout xmlns:android="http://schemas.android.com/apk/res/android"
    xmlns:tools="http://schemas.android.com/tools"
    android:id="@+id/activity_main"
    android:layout_width="match_parent"
    android:layout_height="match_parent"
    android:paddingBottom="@dimen/activity_vertical_margin"
    android:paddingLeft="@dimen/activity_horizontal_margin"
    android:paddingRight="@dimen/activity_horizontal_margin"
    android:paddingTop="@dimen/activity_vertical_margin"
    tools:context="com.gp.download.apk.MainActivity">


    <com.google.android.gms.common.SignInButton
        android:id="@+id/sign_in_button"
        android:layout_width="wrap_content"
        android:layout_height="wrap_content" />

</RelativeLayout>


































注:

1、出现异常:Failed to resolve: com.google.firebase:firebase-core:9.0.0


解决方法:

点击Tools>Android>SDK Manager>Launch Standalone SDK Manager,选择Google Play services 和Google Repository,并且点击install



2.在app级的build.gradle中添加apply plugin: 'com.google.gms.google-services'后报异常

Error:Execution failed for task ':app:processDebugGoogleServices'.
> File google-services.json is missing. The Google Services Plugin cannot function without it. 
   Searched Location: 
  E:\research\gp\downloadApk\app\src\debug\google-services.json
  E:\research\gp\downloadApk\app\google-services.json


解决办法:打开网址https://developers.google.com/mobile/add?platform=android&cntapi=signin&cnturl=https:%2F%2Fdevelopers.google.com%2Fidentity%2Fsign-in%2Fandroid%2Fsign-in%3Fconfigured%3Dtrue&cntlbl=Continue%20Adding%20Sign-In然后点击下载JSON,将下载下来的json放在目录E:\research\gp\downloadApk\app下(E:\research\gp\downloadApk\app为代码su)


3.当把json放到规定目录下后报的异常:

Error:Execution failed for task ':app:processDebugGoogleServices'.
> Missing project_info object


解决办法:应该从创建该json的地方下载该文件,地址:

https://developers.google.com/mobile/add?platform=android&cntapi=signin&cnturl=https:%2F%2Fdevelopers.google.com%2Fidentity%2Fsign-in%2Fandroid%2Fsign-in%3Fconfigured%3Dtrue&cntlbl=Continue%20Adding%20Sign-In


点击choose and configure services->,然后点击ENABLE GOOGLE SIGN-IN


然后点击Generate configuration files ->


点击Continue Adding Sign-In ->


然后重新进入主页:https://developers.google.com/mobile/add?platform=android&cntapi=signin&cnturl=https:%2F%2Fdevelopers.google.com%2Fidentity%2Fsign-in%2Fandroid%2Fsign-in%3Fconfigured%3Dtrue&cntlbl=Continue%20Adding%20Sign-In


点击Choose and configure services ->


点击Generate configuration files->



点击Download gogle-services.json



4.方法handleSignInResult(GoogleSignInResult result)中result.isSuccess()返回false,一般是授权没有正确配置


解决办法:

打开API控制台界面:https://console.developers.google.com/cloud-resource-manager,如果没有项目,则先创建一个项目,如果项目已经存在,则从项目中选择一个




然后点击左上角的三条横岗图标-->API管理器-->信息中心


点击启用API,并搜索Google Play  Android Developer API ,点击该API,然后点击启用



点击在API Explorer中试用此API,然后开启Authorize requests using OAuth 2.0,勾选复选框,并点击Authorize







重新回退到信息API管理器界面https://console.developers.google.com/apis/api/androidpublisher.googleapis.com/overview?project=test-analytics-f14b6&duration=PT1H,并点击创建凭据,选择OAuth客户端ID




选择Android


启动cmd控制台,并输入命令获取签名文件的SHA1值keytool -list -v -keystore E:\research\gp\downloadApk\app\download.keystore,“ E:\research\gp\downloadApk\app\download.keystore”为文件所在的完整路径


拷贝SHA1的值,输入包名,并点击创建


然后重新点击创建凭据-->OAuth客户端ID-->网页应用-->创建




5.获取到的token为空

解决办法:

 gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
//                .requestIdToken(getString(R.string.default_web_client_id))
                .requestIdToken(getString(R.string.default_web_client_id))
                .requestEmail()
                .build();

创建GoogleSignInOptions对象时,加上requestIdToken方法
 .requestIdToken(getString(R.string.default_web_client_id))




Android Google登录获取token(亲测有效)
szdenny的博客
11-01 1828
背景:Android 需要用到Google登录授权,用去token给到服务器,服务器再通过token获取用户信息,实现第三方登录。我们通过登录之后的email来获取token,不需要server_clientId;如果用server_clientId还需要在google的控制台配置测试的账号,否则登录的时候会返回错误码10.实现步骤:1、 手机或者Pad连接可以访问google的网络2、最外层的build.gradle增加依赖app下的build.gradle增加依赖。
Android获取APP的应用程序名称、包名、图标,版本号基本信息
ly969434341的专栏
06-02 1694
Android获取APP的应用程序名称、包名、图标,版本号基本信息 https://blog.csdn.net/jia635/article/details/78722073
[Token获取教程]
m0_62526496的博客
05-15 1324
Token获取教程
Android客户端实现注册/登录详解(一)
热门推荐
benhuo931115的博客
04-06 4万+
前言我们在开发安卓App时难免要与服务器打交道,尤其是对于用户账号信息的注册与登录更是每个android开发人员必须掌握的技能,本文将对客户端的注册/登录功能的实现进行分析,不到之处还请指出。在这里我们仅讨论客户端如何请求服务器进行注册,而服务器在收到客户端请求后进行的一系列操作并不在本文所述范围内,有兴趣大家可以参考请求服务器客户端在进行用户信息的注册和登录时一般使用post请求(携带参数)去服务
android服务端处理登录注册,Android开发简单登录服务器,客户端实现登录服务器...
weixin_32633271的博客
05-25 346
上一遍讲到Android客户端的设计,这边说道Android简单服务器端的设计,本应用只是个简单的设计,故服务器端采用Servlet+Medol+MySql的设计模式;LoginServlet代码如下:protectedvoiddoPost(HttpServletRequestrequest,HttpServletResponseresponse)throwsServletExcep...
Android实现勾选保存用户名登陆信息、进入自动读取用户登陆信息
北方有佳人,绝世而独立。 一顾倾人城,再顾倾人国。 宁不知倾城与倾国? 佳人难再得!
11-10 6163
先上效果图:,进入app登陆界面,自动获取用户上次保存的登陆账号、密码~ 下面说下怎么实现。大神勿拍~ 首先需要一个CheckBox,让用户登陆的时候选择是否保存当前的用户登陆信息,勾选则保存用户登录信息,不勾选则不保存用户登陆信息~ 布局文件CheckBox代码片段:(checked=‘false’ 默认不勾选) 获取CheckBox是否勾选,勾选则保存用户信息,不勾选不保存用户信息
Android使用token维持登陆状态的方法
08-31
本篇文章将深入探讨如何在Android应用使用token来保持用户登录状态,并阐述token的基本概念、作用以及具体实现方法。 **什么是token** Token,即令牌,是一种用于身份验证的字符串。在用户成功登录后,服务器...
Android集成微信登录的步骤详解
01-05
一、首先在Application的onCreate写: // GeneralAppliction.java public static IWXAPI sApi; @Override public void onCreate() { super.onCreate(); sApi = WXEntryActivity.initWeiXin(this, AppConst....
Django如何使用jwt获取用户信息
09-17
Django使用JWT获取用户信息主要是通过JWT库进行配置,设置认证类,创建登录视图来获取JWT,然后在前端通过拦截器在每次请求添加JWT作为认证信息。这种方式避免了传统Cookie和Session在分布式环境的问题,提高了...
微信小程序获取access_token
03-29
起因是想在微信小程序获取access_token。  (此图片来源于网络,如有侵权,请联系删除! )  之前资源只有一个阿里云虚拟主机和一个域名,于是用C#后端写了GET请求的接口,准备调用自己域名下的接口获取access_...
获取当前系统登录用户名(包括以管理员权限启动也能获取到)
jota
01-24 1万+
当程序以管理员权限启动后,如果需要获取当前系统登录非管理员用户名,大部分方法(如 GetUserName)获取到的都是管理员的用户名,以下是获取当前登录用户方法。直接上代码: #include &lt;windows.h&gt; #include &lt;WtsApi32.h&gt; #pragma comment(lib, "WtsApi32.lib") #include &lt;str...
Android 用偏好设置保存和获取用户名,密码
cx415462822的专栏
05-23 707
    private void saveLoginInfo(String username,String password){         SharedPreferences preferences =getSharedPreferences(getString(R.string.pref_login_info), Context.MODE_PRIVATE);         SharedP...
Google登录获取Calendar信息
qq_41680720的博客
09-28 985
Google登录获取Calendar信息
google-services简介
st21a1的博客
04-19 6277
介绍 作为在Android应用程序启用Google API或Firebase服务的一部分,必须将google-services插件添加到build.gradle文件: dependencies { classpath 'com.google.gms:google-services:4.3.5' // ... } google-services插件有两个主要功能: 处理google-services.json文件并生成可在您的应用程序代码使用的Android资源。 请参阅添加JSO
Android Google Play 支付SDK接入指南
路漫漫其修远兮,吾将上下而求索
12-21 1万+
前端 这里要接入的是google应用内支付 1.在app模块下的build.gradle模块下引入最新版本google billing 4.0版本,顺便引入google服务,如下 implementation 'com.google.android.gms:play-services-wallet:19.0.0' implementation 'com.android.support:appcompat-v7:24.1.1' implementation 'com.android.b
Android studio 登录系统
weixin_54284906的博客
05-24 3516
后面的验证码是自己加上去的,如果需要的话也是可以用Random获取随机数 登录流程主要分为两个步骤 获取用户名和密码编辑框的文本进行判断 设置按钮监听事件 用户和密码一般都是放在数据库里面的,这里没有连接数据库,自行定义的用户名和密码 一、获取用户名编辑框及密码编辑框的文本并进行判断 String user="admin";//设置用户名 String passorward="123456";//设置密码 EditText et_1_Logi.
安卓缓存机制存储用户信息
weixin_61892541的博客
02-09 452
这种方式是存值,可通过这种方式将用户登录token存储下来,后续直接读值即可实现登录一次后不需要登录第二次。这种方式是从存储取值,后续直接判断这个值是否为空,不为空的话直接跳转界面即可。记不住,只能靠文章记住了。
google的GCM推送使用简介
newhope1106的博客
01-24 4万+
转载请注明出处:http://blog.csdn.net/newhope1106/article/details/54709916 GCM即Google Cloud Messaging,主要用于消息推送的,即使在应用没有起来的情况下,客户端也能通过GCM收到来自服务器的消息。GCM支持Android、IOS和Chrome。由于GCM需要google service支持,在国内基本不能用,经常
Andriod资源混淆的一次体验
qq_23992393的博客
08-01 1051
通常情况下,Android的混淆有代码混淆和资源混淆。 代码混淆比较简单,只要打开 minifyEnabled开关,并且需要时指定一些混淆规则就可以了; 相比之下,资源混淆没有那么简单,因为不能简单的修改res文件夹下的资源文件的文件名,因为在开发时每一个资源文件都对应了R文件的id, 打包后会生成resource.asrc文件,每一个资源文件都在resource.asrc文件有对应记录...
sa-token获取用户信息
最新发布
05-30
sa-token是一个Java轻量级权限认证框架,可以帮助开发者快速集成权限认证功能。在sa-token获取用户信息,主要有以下几种方式: 1. 获取当前登录用户id:SaTokenContext.getUser() 2. 获取当前登录用户的Session:SaTokenContext.getSession() 3. 获取当前登录用户Token-Session:SaTokenContext.getTokenSession() 4. 获取当前登录用户Token-Session值:SaTokenContext.getTokenValue() 5. 获取指定token对应的用户id:SaHolder.getUserIdByToken(String token) 6. 获取指定token对应的Session:SaHolder.getSessionByToken(String token) 7. 获取指定token对应的Token-Session:SaHolder.getTokenSessionByToken(String token) 8. 获取指定token对应的Token-Session值:SaHolder.getTokenValueByToken(String token) 需要注意的是,在使用sa-token获取用户信息时,需要先进行登录认证,才能获取到对应的用户信息

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
写文章

热门文章

  • Connection to tcp://39.96.3.215:1935 failed: Error number -138 occurred 60257
  • MySQL Workbench 报错 Cannot connect to Database Server 53466
  • MySQL异常:ERROR 1045 (28000): Unknown error 1045 45915
  • 谷歌翻译SDK (Google Translate SDK)的使用 45875
  • Android中集成google play 登陆来获取用户名、邮件地址、token等用户信息 38517

分类专栏

  • Kotlin 47篇
  • JetPack Compase 5篇
  • interview
  • Socket 43篇
  • live 15篇
  • NDK 15篇
  • ffmpeg 10篇
  • OpenGL 4篇
  • linux 21篇
  • JNI 11篇
  • 程序图 2篇
  • C++
  • C语言 4篇
  • 笔记 398篇
  • Android 241篇
  • 异常 65篇
  • RX 23篇
  • 杂想 23篇
  • Lambda 3篇
  • java 189篇
  • 开发工具 10篇
  • 规则和方法 11篇
  • unity3d 8篇
  • AR、VR、MR 38篇
  • web 22篇
  • 建模 4篇
  • Shader 59篇
  • UE4 25篇
  • HTML
  • CSS 4篇
  • JavaScript 4篇
  • HTML5 1篇
  • 读后感 32篇
  • algorithm 162篇
  • flutter 33篇
  • Gradle 2篇

最新评论

  • kotlin项目中从一个Activity跳转到另一个Activity,并传递数据

    尘垢475: ?这都能水一篇文章? 还有人收藏?

  • nginx服务器搭建好但是浏览器却无法访问原因排查

    azhenzhendebuhui: 老哥我这波 <title>Welcome to nginx!</title> If you see this page, the nginx web server is successfully installed and working. Further configuration is required nginx: the configuration file /usr/local/nginx/conf/nginx.conf syntax is ok nginx: configuration file /usr/local/nginx/conf/nginx.conf test is successful 但是 tcp6 0 0 :::12225 :::* LISTEN 914/sshd 这里没有分给nginx怎么搞呢

  • nginx服务器搭建好但是浏览器却无法访问原因排查

    lupe_c: 之前部署京东云一下就成功了 原来阿里云是这个原因 感谢!

  • 错误    36    error LNK2019: 无法解析的外部符号 random

    2301_76837285: 完美的答案

  • nginx服务器搭建好但是浏览器却无法访问原因排查

    北风toto: 换个浏览器,我的就是很无语,谷歌浏览器无法访问,但是360浏览器就可以访问

大家在看

  • SSRF(服务器端请求伪造)漏洞解析
  • 数组,链表,红黑树介绍以及性能对比实验 75
  • P1249 最大乘积【大数+万进制】
  • 【C++修炼之路 第一章:入门】引用& (含多个知识点与面试常考点)
  • 基于springboot汽车租赁管理系统万字文档PPT源码分享

最新文章

  • HTTP FAILED: java.net.UnknownServiceException: CLEARTEXT communication to baobab.kaiyanapp.com not
  • Extension with name ‘android‘ does not exist. Currently registered extension names: [ext, kotlin, ko
  • Failed to calculate the value of task ‘:xxx DebugJavaWithJavac‘ property ‘options.generatedSourceOut
2023年5篇
2022年58篇
2020年47篇
2019年387篇
2018年258篇
2017年121篇
2016年82篇
2014年11篇

目录

目录

评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值

哆哆女性网罗姓男孩起名字好听房地产销售公司起名纯洁轮舞曲舞出我人生2鲍起静服装定制起名店铺免费起名网页科学家故事100个如何调整屏幕亮度排生辰八字起名字の是什么意思电影解说起什么名字好龙字起名大不大上海高桥阀门星际之死神传奇grasshopper下载南方卫视直播去哪飞机票龙江风彩学游泳周易在线起名字建筑劳务有限起名商标起名查询官网起名字 软件公司方姓鼠宝宝起名游戏人物起名字同性恋男姓覃100分的男孩起名完美看看信息咨询公司起名参考淀粉肠小王子日销售额涨超10倍罗斯否认插足凯特王妃婚姻不负春光新的一天从800个哈欠开始有个姐真把千机伞做出来了国产伟哥去年销售近13亿充个话费竟沦为间接洗钱工具重庆警方辟谣“男子杀人焚尸”男子给前妻转账 现任妻子起诉要回春分繁花正当时呼北高速交通事故已致14人死亡杨洋拄拐现身医院月嫂回应掌掴婴儿是在赶虫子男孩疑遭霸凌 家长讨说法被踢出群因自嘲式简历走红的教授更新简介网友建议重庆地铁不准乘客携带菜筐清明节放假3天调休1天郑州一火锅店爆改成麻辣烫店19岁小伙救下5人后溺亡 多方发声两大学生合买彩票中奖一人不认账张家界的山上“长”满了韩国人?单亲妈妈陷入热恋 14岁儿子报警#春分立蛋大挑战#青海通报栏杆断裂小学生跌落住进ICU代拍被何赛飞拿着魔杖追着打315晚会后胖东来又人满为患了当地回应沈阳致3死车祸车主疑毒驾武汉大学樱花即将进入盛花期张立群任西安交通大学校长为江西彩礼“减负”的“试婚人”网友洛杉矶偶遇贾玲倪萍分享减重40斤方法男孩8年未见母亲被告知被遗忘小米汽车超级工厂正式揭幕周杰伦一审败诉网易特朗普谈“凯特王妃P图照”考生莫言也上北大硕士复试名单了妈妈回应孩子在校撞护栏坠楼恒大被罚41.75亿到底怎么缴男子持台球杆殴打2名女店员被抓校方回应护栏损坏小学生课间坠楼外国人感慨凌晨的中国很安全火箭最近9战8胜1负王树国3次鞠躬告别西交大师生房客欠租失踪 房东直发愁萧美琴窜访捷克 外交部回应山西省委原副书记商黎光被逮捕阿根廷将发行1万与2万面值的纸币英国王室又一合照被质疑P图男子被猫抓伤后确诊“猫抓病”

哆哆女性网 XML地图 TXT地图 虚拟主机 SEO 网站制作 网站优化