1

ユーザーのサークル内のユーザーを取得しようとしています。GPPSignin は廃止されたため、ログインには GIDSignIn を使用しています。ただし、GIDSignIn によって提供される認証は、GTLServicePlus では使用できないタイプ GIDAuthentication です。

GIDSignInButton を使用して正常にサインインしました。ここに人のリストを取得するための私のコードがあります

GTLServicePlus* plusService = [[[GTLServicePlus alloc] init] autorelease];
plusService.retryEnabled = YES;

[plusService setAuthorizer:[GPPSignIn sharedInstance].authentication];  //Problem is here
 GTLQueryPlus *query =
 [GTLQueryPlus queryForPeopleListWithUserId:@"me"
                                collection:kGTLPlusCollectionVisible];
[plusService executeQuery:query
    completionHandler:^(GTLServiceTicket *ticket,
                        GTLPlusPeopleFeed *peopleFeed,
                        NSError *error) {
        if (error) {
          GTMLoggerError(@"Error: %@", error);
        } else {
          // Get an array of people from GTLPlusPeopleFeed
          NSArray* peopleList = [peopleFeed.items retain];
        }
    }];
4

1 に答える 1

0

そのため、現在、GTMOAuth2Authentication オブジェクトを手動で作成し、必要な値を割り当てることで、この問題を解決しています。これが私の現在のコードです。

func fetchGPlusContacts() {

    let plusService = GTLServicePlus()
    plusService.retryEnabled = true

    let user = signIn.currentUser
    let auth = GTMOAuth2Authentication()

    auth.clientID = signIn.clientID
    auth.userEmail = user.profile.email
    auth.userID = user.userID
    auth.accessToken = user.authentication.accessToken
    auth.refreshToken = user.authentication.refreshToken
    auth.expirationDate = user.authentication.accessTokenExpirationDate

    plusService.authorizer = auth

    let query = GTLQueryPlus.queryForPeopleListWithUserId("me", collection: kGTLPlusCollectionConnected) as! GTLQueryPlus


    plusService.executeQuery(query) { (ticket, peopleFeed, error) in
        if (error != nil) {
            print("error: \(error.description)")

            if (self.delegate != nil) {
                if self.delegate?.failedFetchFriendsFromGoogle != nil {
                    self.delegate!.failedFetchFriendsFromGoogle!(error)
                }
            }
        }
        else {
            if let peopleFd = peopleFeed as? GTLPlusPeopleFeed {
                var items : [GTLPlusPerson] = []
                if let itms = peopleFd.items() as? [GTLPlusPerson] {
                    items = itms
                }
            }
        }
    }
}

私はまだこのタスクを実行する正しい方法を探しています。

于 2016-04-14T06:48:34.680 に答える