2014-10-09 55 views
0

我想將Google+登錄功能集成到我的應用中。我使用過Google+ sdk,但它重定向到safari以登錄到Google,我想在我的應用程序中打開該Web對話框。有人能幫助我解決這個問題嗎?Google +在應用內登錄

+0

移除plist中的url方案 – 2014-10-09 05:32:11

+0

@ Anbu.Karthik無法正常工作...它將重定向到goole +,但不會通過刪除url方案返回到我們的應用程序 – vivek 2014-10-09 05:42:05

+0

這不受SDK的支持。 – Steve 2014-10-09 06:40:39

回答

1

我做到了。通過繼承UIApplication類,然後在Web視圖中處理URL。以下是代碼:

將Google+ FrameWork添加到您的項目中。

現在,在身份驗證調用中,通過嵌入UIAPPLICATION類來捕獲該URL。

- (IBAction)btnGooglePlusTap:(id)sender 
{ 
    [[GPPSignIn sharedInstance] authenticate]; 
} 

SubClassUIApplication.h 

#import <UIKit/UIKit.h> 

#define ApplicationOpenGoogleAuthNotification @"GoogleFriendInvitationPosted" 

@interface SubClassUIApplication : UIApplication 

@end 


#import "SubClassUIApplication.h" 

@implementation SubClassUIApplication 

- (BOOL)openURL:(NSURL *)url 
{ 
    if([[url absoluteString] hasPrefix:@"googlechrome-x-callback:"]) 
    { 
     return NO;//This will prevent call to Google Chrome App if installed. 
    } 
    else if([[url absoluteString] hasPrefix:@"https://accounts.google.com/o/oauth2/auth"]) 
    { 
     [[NSNotificationCenter defaultCenter] postNotificationName:ApplicationOpenGoogleAuthNotification object:url]; 

     return NO;// Here we will pass URL to notification and from notification observer , we will load web view. 
    } 
    else if ([[url absoluteString] hasPrefix:@"com.google"]) 
    { 
     return NO; 
    } 

    return [super openURL:url]; 
} 

@end 

將此子類設置爲info.plist文件中的主類。

現在打開URL發送到Web視圖

- (void)catchNotificationforGooglePlusSharing:(NSNotification *)notiofication 
{ 
    NSURL *u=(NSURL *)notiofication.object; 

    UINavigationController *navWebView =(UINavigationController *) [self.storyboard instantiateViewControllerWithIdentifier:@"WebViewNavController"]; 

    WebViewController *vcWebView = navWebView.viewControllers[0]; 
    vcWebView.webURL = u; 
    [self.navigationController presentViewController:navWebView animated:YES completion:Nil]; 
} 

現在webviewcontroller.m

- (void)viewDidLoad 
{ 
    [super viewDidLoad]; 

    NSURLRequest *req= [[NSURLRequest alloc]initWithURL:webURL]; 

    [webvGoogle loadRequest:req]; 
} 
#pragma mark - UIWebViewDelegate method 
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType 
{ 
    BOOL canHandle = [GPPURLHandler handleURL:request.URL sourceApplication:@"com.apple.mobilesafari" annotation:nil]; 

    if(canHandle == YES) 
    { 


     [self dismissViewControllerAnimated:YES completion:^ 
     { 

     }]; 
    } 

    return YES; 
} 

- (void)webView:(UIWebView *)webView didFailLoadWithError:(NSError *)error 
{ 
    NSLog(@"Error in loading : %@",error.description); 
} 

不要忘記註冊您的類ApplicationOpenGoogleAuthNotification通知。

+0

你可以在這裏共享代碼 – 2014-11-13 06:59:26

+0

好的..我會明天分享 – vivek 2014-11-13 17:49:09

+0

沒有共享代碼,只是接受你自己的回答是不好的方式.. – Dharmik 2015-06-15 11:25:47

1

您可以使用Google Toolbox for Mac - OAuth 2 Controllers的GTMOAuth2ViewControllerTouch。

#import <GTMOAuth2ViewControllerTouch.h> 

GTMOAuth2ViewControllerTouch *googleAuthViewController = [[GTMOAuth2ViewControllerTouch alloc] 
         initWithScope:@"https://www.googleapis.com/auth/userinfo#email" 
         clientID:kClientId 
         clientSecret:kSecretId 
         keychainItemName:@"GooglePlus_Sample_App" 
         delegate:self 
         finishedSelector:@selector(viewController:finishedWithAuth:error:)]; 

[self.navigationController pushViewController:googleAuthViewController animated:YES]; 

這是在這裏發現http://blog.krzyzanowskim.com/2015/02/22/google-sign-on-with-1password/樣品,你可以找到完整的示例項目。

+0

我已經從webview處理了我自己的自我同樣的概念,像這樣...它的作品像魅力,也幫助我做出是否我想打開應用程序內的任何網址或在safari中。但是,謝謝你的迴應。 – vivek 2015-02-25 05:34:53