小编mel*_*omg的帖子

为什么requestIdToken返回null?

我按照以下步骤进行了此链接

  1. 我将google-services.json下载到我的app文件夹中.
  2. 我的项目级gradle文件:

    dependencies {
        classpath 'com.android.tools.build:gradle:1.3.0'
        classpath 'com.google.gms:google-services:1.5.0-beta2'
    }
    
    Run Code Online (Sandbox Code Playgroud)
  3. 我的应用级gradle文件:

    apply plugin: 'com.android.application'
    apply plugin: 'com.google.gms.google-services'
    
    dependencies {
        compile fileTree(include: ['*.jar'], dir: 'libs')
        compile 'com.google.android.gms:play-services-identity:8.3.0'
        compile 'com.google.android.gms:play-services:8.3.0'
        compile 'com.google.android.gms:play-services-plus:8.3.0'
        compile 'com.google.android.gms:play-services-auth:8.3.0'
        ...
    }
    
    Run Code Online (Sandbox Code Playgroud)
  4. 我为后端服务器创建了OAuth 2.0客户端ID,并将此客户端ID传递给strings.xml文件.

  5. 最后我创建了GoogleSignInOptions和GoogleApiClient对象,如下所示:

    GoogleSignInOptions gso = new GoogleSignInOptions.Builder(GoogleSignInOptions.DEFAULT_SIGN_IN)
            .requestEmail()
            .requestIdToken(getString(R.string.server_client_id))
            .build();
    mGoogleApiClient = new GoogleApiClient.Builder(this)
            .enableAutoManage(this /* FragmentActivity */, this /* OnConnectionFailedListener */)
            .addApi(Auth.GOOGLE_SIGN_IN_API, gso)
            .build();
    
    Run Code Online (Sandbox Code Playgroud)

    但问题是result.isSuccess()总是在handleSignInResult函数中返回false.我想也许我在第1步或第2步错误地做某事.我的代码几乎与此SignInActivity.java类似.任何帮助,将不胜感激.

android google-signin

22
推荐指数
2
解决办法
2万
查看次数

如何在服务器上获取用户的日历信息?

用户在我的Android应用程序中授权.我正在将用户的令牌和其他信息发送到我的服务器.在这个服务器上,我想为用户实现一些逻辑.

我希望得到这个流程.

我按照此链接中的步骤quickstart.php来获取用户在服务器上的日历.

但我得到以下错误:

google oauth exception'with message'无法json解码令牌'

因此我尝试了这个解决方案.但我也犯同样的错误.因此,作为第三个选项我创建的JSON格式自己像这个解决方案如下.

$access_token = '{
    "access_token":'.$access_token.',
    "token_type":"Bearer",
    "expires_in":3600, 
    "id_token":'.$id_token.', 
    "refresh_token":" ",
    "created":'. time() .'
}';
Run Code Online (Sandbox Code Playgroud)

如你所见,我不知道如何交换刷新令牌.我搜索了如何获得刷新令牌并看到了这个问题.并将此解决方案应用于我的代码但没有任何改变.

编辑4:我试图在Android应用程序中根据此答案获取访问令牌并将其发送到应用服务器.我像以前一样接受代码:

GoogleSignInAccount acct = result.getSignInAccount();
code = acct.getServerAuthCode();//sending this code to AsyncTask to get access token
Run Code Online (Sandbox Code Playgroud)

我获取访问令牌的功能:

private void getAccessToken()throws GoogleAuthException, IOException{
    new AsyncTask<Void, Void, String>() {
        @Override
        protected String doInBackground(Void... params) {
            List<String> scopes = new LinkedList<String>();
                scopes.add("https://www.googleapis.com/auth/calendar");
                scopes.add("https://www.googleapis.com/auth/calendar.readonly"); …
Run Code Online (Sandbox Code Playgroud)

php authentication android google-calendar-api google-oauth

6
推荐指数
1
解决办法
340
查看次数