2013-09-04 19 views
7

Đối với G + tài liệu ở đây: https://developers.google.com/+/mobile/ios/sign-inGoogle+ SDK dành cho iOS Thêm | Đăng nhập nút lập trình

Dấu hiệu tại nút có thể được bổ sung bằng một XIB hoặc theo trình tự trong một UIViewController.

Tôi có một TableViewController và tôi sẽ thêm nút G + | Đăng nhập như quan điểm phụ kiện của một dòng của bảng:

subtitleCell.accessoryView = self.googlePlusSignInButton; 

nơi vào nút đăng nhập sẽ được khởi tạo như sau:

-(void) setGooglePlusButtons { 

    self.googlePlusSignInButton = [[UIButton buttonWithType:UIButtonTypeCustom] retain]; 


    UIImage *backgroundButtonImage = [UIImage imageNamed:@"bt_search_cancel.png"]; 

    googlePlusSignInButton_.frame = CGRectMake(0.0f, 
               0.0f, 
               backgroundButtonImage.size.width, 
               backgroundButtonImage.size.height); 

    googlePlusSignInButton_.titleLabel.textColor = [UIColor whiteColor]; 
    googlePlusSignInButton_.titleLabel.font = [UIFont boldSystemFontOfSize:11.0f]; 
    googlePlusSignInButton_.titleLabel.numberOfLines = 2; 

    googlePlusSignInButton_.titleLabel.shadowColor = [UIColor darkGrayColor]; 
    googlePlusSignInButton_.titleLabel.shadowOffset = CGSizeMake(0.0f, 
                   -1.0f); 

    [googlePlusSignInButton_ setTitle:NSLocalizedString(@"UI_BUTTONS_LOGIN", @"") 
          forState:UIControlStateNormal]; 

    [googlePlusSignInButton_ setBackgroundImage:backgroundButtonImage 
             forState:UIControlStateNormal]; 


    // Make sure the GPPSignInButton class is linked in because references from 
    // xib file doesn't count. 
    [GPPSignInButton class]; 

    GPPSignIn *signIn = [GPPSignIn sharedInstance]; 

    signIn.delegate = self; 
    signIn.shouldFetchGoogleUserEmail = signIn.shouldFetchGoogleUserEmail; 
    signIn.actions = [NSArray arrayWithObjects: 
         @"http://schemas.google.com/ListenActivity", 
         nil]; 

} 

nút được thiết lập tại viewDidLoad:

- (void)viewDidLoad { 

    [super viewDidLoad]; 

    [self setGooglePlusButtons]; 

//... 

các UIViewControll ed có một giao diện cho các đại biểu đăng nhập:

@interface MXMSettingsTableViewController() <GPPSignInDelegate> 
@end 

Dường như các đại biểu không được gọi hoặc các dấu hiệu chia sẻ trong nút không được liên kết với trường hợp của bộ điều khiển:

// GPPSignInDelegate 

- (void)finishedWithAuth:(GTMOAuth2Authentication *)auth 
        error:(NSError *)error { 
    ///.... 
} 

tôi giả rằng

// Make sure the GPPSignInButton class is linked in because references from 
// xib file doesn't count. 
[GPPSignInButton class]; 

là liên kết nút dụ ViewController:

// The button that handles Google+ sign-in. 
@property (retain, nonatomic) GPPSignInButton *googlePlusSignInButton; 

nhưng có điều gì đó sai trong việc triển khai này, tôi không thể tìm ra.

Trả lời

15

Trước hết bạn nên gọi là dấu hiệu trong phương pháp trên một hành động của bạn googlePlusSignInButton

Vì vậy, các mã nên là:

-(void) setGooglePlusButtons { 

    self.googlePlusSignInButton = [[UIButton buttonWithType:UIButtonTypeCustom] retain]; 


    UIImage *backgroundButtonImage = [UIImage imageNamed:@"bt_search_cancel.png"]; 

    googlePlusSignInButton_.frame = CGRectMake(0.0f, 
               0.0f, 
               backgroundButtonImage.size.width, 
               backgroundButtonImage.size.height); 

    googlePlusSignInButton_.titleLabel.textColor = [UIColor whiteColor]; 
    googlePlusSignInButton_.titleLabel.font = [UIFont boldSystemFontOfSize:11.0f]; 
    googlePlusSignInButton_.titleLabel.numberOfLines = 2; 

    googlePlusSignInButton_.titleLabel.shadowColor = [UIColor darkGrayColor]; 
    googlePlusSignInButton_.titleLabel.shadowOffset = CGSizeMake(0.0f, 
                   -1.0f); 

    [googlePlusSignInButton_ setTitle:NSLocalizedString(@"UI_BUTTONS_LOGIN", @"") 
          forState:UIControlStateNormal]; 

    [googlePlusSignInButton_ setBackgroundImage:backgroundButtonImage 
             forState:UIControlStateNormal]; 

    [googlePlusSignInButton addTarget:self action:@selector(signInGoogle:) forControlEvents:UIControlEventTouchUpInside]; 
} 

và đăng nhập phải như thế này:

- (void)signInGoogle { 
    GPPSignIn *signIn = [GPPSignIn sharedInstance]; 
    signIn.delegate = self; 
    signIn.shouldFetchGoogleUserEmail = YES; 
    signIn.clientID = kClientID; 
    signIn.scopes = [NSArray arrayWithObjects:kGTLAuthScopePlusLogin,nil]; 
    signIn.actions = [NSArray arrayWithObjects:@"http://schemas.google.com/ListenActivity",nil]; 
    [signIn authenticate]; 
} 

Mã của bạn bị thiếu cuộc gọi [signIn authenticate];, bạn cần phải chuyển qua ID khách hàng, trong đoạn mã trên là giá trị không đổi (bạn cần phải khai báo)

+1

Có tất nhiên!Bằng cách này, tôi cũng có thể tách riêng chế độ xem này với đối tượng "điều khiển" đang xử lý tài khoản G + và đăng nhập (nơi tích hợp kClient Id bị thiếu ở đây). Cảm ơn rất nhiều! – loretoparisi

+0

Điều kỳ lạ. Ứng dụng GooglePlus sẽ mở nhưng không có auth nào được thực hiện cả ứng dụng openURL: (NSURL *) url sourceỨng dụng: đang được gọi. ClientId được định cấu hình đúng trên bảng điều khiển dành cho nhà phát triển. – loretoparisi

+1

Bạn đã thêm loại URL chưa? Đây là bước 4 trong hướng dẫn này: https://developers.google.com/+/mobile/ios/getting-started – Lefteris

0

Mặc dù một số giải pháp không có cách nào để làm cho silentAuthentication để làm việc

- (void)initialize { 
    // Read Google+ deep-link data. 
    [GPPDeepLink setDelegate:self]; 
    [GPPDeepLink readDeepLinkAfterInstall]; 

    // Setup Google+ share dialog. 
    [GPPShare sharedInstance].delegate = self; 

    // Setup Google+ signin 
    [GPPSignIn sharedInstance].clientID = APP_GOOGLEPLUS_APPID; 
    [GPPSignIn sharedInstance].delegate = self; 

    [GPPSignIn sharedInstance].shouldFetchGoogleUserEmail = YES; 
    [GPPSignIn sharedInstance].shouldFetchGoogleUserID = YES; 

    [GPPSignIn sharedInstance].actions = [NSArray arrayWithObjects:[self momentSchemaByType:MXMGooglePlusMomentListen], nil]; 

    [GPPSignIn sharedInstance].scopes = [NSArray arrayWithObjects:kGTLAuthScopePlusLogin, nil]; // defined in GTLPlusConstants.h 

    [[GPPSignIn sharedInstance] trySilentAuthentication]; 

    shareAfterLogin= NO; 
    trackIdToShare = nil; 

    if([[MXMLogger sharedLogger] isDebug]) { 
     NSLog(@"MXMGooglePlusManager initialize login %d keychain %d", [self isGooglePlusLoggedin], [GPPSignIn sharedInstance].hasAuthInKeychain); 
    } 
} 

Lạ một điều, keychain có chứng thực trong

2013-09-13 13:01:35.849 musiXmatch[1090:790b] MXMGooglePlusManager initialize login 0 keychain 1 

nhưng tài khoản không được đăng nhập .

Đối với tài liệu ở đây

https://developers.google.com/+/mobile/ios/api/interface_g_p_p_sign_in

việc triển khai phải chính xác.

Các vấn đề liên quan