这是我第一次尝试登录Google。我研究了很多代码。但是,在日志中,我总是得到:D:/SignInActivity: handleSignInResult:false
。我选择一个帐户的屏幕,在我做出选择后,没有任何反应。我尝试了StackOverflow的一些答案,但它仍然无效。所以,我确定我犯了一个愚蠢的错误。
activity_test_login3.xml
<?xml version="1.0" encoding="utf-8"?>
<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:paddingBottom="@dimen/activity_vertical_margin"
android:paddingLeft="@dimen/activity_horizontal_margin"
android:paddingRight="@dimen/activity_horizontal_margin"
android:paddingTop="64dp"
tools:context="com.sinteksolutions.planningforthefuture.TestLogin3">
<TextView
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/mStatus"/>
<Button
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:id="@+id/siBtn"
android:text="Sign in"/>
</LinearLayout>
TestLogin3.java
package xxx;
import android.content.Intent;
import android.support.v4.app.FragmentActivity;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.util.Log;
import android.view.View;
import android.widget.Button;
import android.widget.TextView;
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.Scopes;
import com.google.android.gms.common.api.Api;
import com.google.android.gms.common.api.GoogleApiClient;
import com.google.android.gms.common.api.OptionalPendingResult;
import com.google.android.gms.common.api.PendingResult;
import com.google.android.gms.common.api.ResultCallback;
import com.google.android.gms.common.api.Scope;
import com.google.android.gms.common.api.Status;
import java.io.FileDescriptor;
import java.io.PrintWriter;
import java.util.concurrent.TimeUnit;
public class TestLogin3 extends AppCompatActivity implements View.OnClickListener, GoogleApiClient.OnConnectionFailedListener {
public TextView mStatusTV;
public Button signInBtn;
public GoogleApiClient myGoogleApi;
private static final String TAG = "SignInActivity";
private static final int RC_SIGN_IN = 1;
@Override
protected void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_test_login3);
mStatusTV = (TextView) findViewById(R.id.mStatus);
signInBtn = (Button) findViewById(R.id.siBtn);
signInBtn.setOnClickListener(this);
//Request id, email and profile
GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
.requestScopes(new Scope(Scopes.EMAIL))
.requestEmail()
.requestIdToken("xxx")
.build();
//API with access to sign in
myGoogleApi = new GoogleApiClient.Builder(this)
.enableAutoManage(this, this)
.addApi(Auth.GOOGLE_SIGN_IN_API, gso)
.build();
}
@Override
public void onStart(){
super.onStart();
OptionalPendingResult<GoogleSignInResult> opr = Auth.GoogleSignInApi.silentSignIn(myGoogleApi);
//Cached credentials?
if(opr.isDone()){
Log.d(TAG, "Cached sign-in");
GoogleSignInResult result = opr.get();
handleSignInResult(result);
} else {
opr.setResultCallback(new ResultCallback<GoogleSignInResult>() {
@Override
public void onResult(GoogleSignInResult googleSignInResult) {
handleSignInResult(googleSignInResult);
}
});
}
}
@Override
public void onActivityResult(int requestCode, int resultCode, Intent data){
super.onActivityResult(requestCode, resultCode, data);
//result from Intent
if(requestCode == RC_SIGN_IN){
GoogleSignInResult result = Auth.GoogleSignInApi.getSignInResultFromIntent(data);
handleSignInResult(result);
}
}
private void handleSignInResult(GoogleSignInResult result){
Log.d(TAG, "handleSignInResult:" + result.isSuccess());
if(result.isSuccess()){
GoogleSignInAccount acct = result.getSignInAccount();
mStatusTV.setText(acct.getEmail());
updateUI(true);
} else {
updateUI(false);
}
}
private void signIn(){
Intent signInIntent = Auth.GoogleSignInApi.getSignInIntent(myGoogleApi);
startActivityForResult(signInIntent, RC_SIGN_IN);
}
private void signOut(){
Auth.GoogleSignInApi.signOut(myGoogleApi).setResultCallback(
new ResultCallback<Status>() {
@Override
public void onResult(Status status) {
updateUI(false);
}
}
);
}
private void revokeAccess(){
Auth.GoogleSignInApi.revokeAccess(myGoogleApi).setResultCallback(
new ResultCallback<Status>() {
@Override
public void onResult(Status status) {
updateUI(false);
}
}
);
}
@Override
public void onClick(View v) {
switch (v.getId()){
case R.id.siBtn:
signIn();
break;
}
}
@Override
public void onConnectionFailed(ConnectionResult connectionResult) {
Log.d(TAG, "onConnectionFailed:" + connectionResult);
}
private void updateUI(boolean signedIn){
if (signedIn){
findViewById(R.id.siBtn).setVisibility(View.GONE);
} else {
mStatusTV.setText("Signed out");
}
}
}
Project Gradle:
buildscript {
repositories {
jcenter()
}
dependencies {
classpath 'com.android.tools.build:gradle:2.1.2'
classpath 'com.google.gms:google-services:2.0.0-alpha6'
// NOTE: Do not place your application dependencies here; they belong
// in the individual module build.gradle files
}
}
allprojects {
repositories {
jcenter()
}
}
task clean(type: Delete) {
delete rootProject.buildDir
}
App Gradle:
apply plugin: 'com.android.application'
android {
compileSdkVersion 23
buildToolsVersion "23.0.3"
defaultConfig {
applicationId "com.sinteksolutions.planningforthefuture"
minSdkVersion 15
targetSdkVersion 23
versionCode 1
versionName "1.0"
}
buildTypes {
release {
minifyEnabled false
proguardFiles getDefaultProguardFile('proguard-android.txt'), 'proguard-rules.pro'
}
}
}
dependencies {
compile fileTree(dir: 'libs', include: ['*.jar'])
testCompile 'junit:junit:4.12'
compile 'com.android.support:design:23.4.0'
apply plugin: 'com.google.gms.google-services'
compile 'com.google.android.gms:play-services-auth:8.3.0'
compile 'com.google.android.gms:play-services-appindexing:8.3.0'
}
app目录中的JSON文件。
我感谢任何帮助。
答案 0 :(得分:0)
我认为SHA1指纹存在问题。
答案 1 :(得分:0)
我需要生成已签名的APK。从Android Studio运行它不起作用。