雅虎验证和获取配置文件详细信息iOS

Sag*_*ari 15 objective-c ios yahoo-api

我在这里列出了我遵循的Yahoo Integration步骤.

  • 第1步.我去了http://developer.yahoo.com/social/sdk/objectivec/
  • 第2步.从这里下载整个框架 - http://github.com/yahoo/yos-social-objc
  • 第3步.我将该框架拖放到我的项目中.
  • 步骤4.启用fno-objc-arcyahoo框架文件的标志.
  • 第5步.我#import "YOSSocial.h"在viewController的头文件中做了.
  • 步骤6.在视图中加载,我放置代码块1来创建会话对象.
  • 步骤7.单击按钮,我调用代码块2.
  • 步骤8.在AppDelegate.m中,我将方法实现为代码块3.
  • 第9步.我接收oauth_tokenoauth_verifier重定向.

代码块1

 - (void)viewDidLoad {
    [super viewDidLoad];
    self.session = [YOSSession sessionWithConsumerKey:@"ConsumerKeyHere"
                                           andConsumerSecret:@"ConsumerSecretKeyHere"
                                            andApplicationId:@"AppKey"];
    BOOL hasSession = [self.session resumeSession];
    if(hasSession == FALSE) {
        // custom call back URL which will redirect to our-app.
        // 10.0.0.76/iOS/callback.php redirects 
        // to com.mymobileapps.currentApp.yahoo
        [self.session 
           sendUserToAuthorizationWithCallbackUrl:
           @"http://10.0.0.76/iOS/callback.php"];
    } else {
        [self sendRequests];
    }
}
Run Code Online (Sandbox Code Playgroud)

代码块2

- (void)sendRequests {
    // initialize a user request for the logged-in user
    YOSUserRequest *request = [YOSUserRequest requestWithSession:self.session];

    // fetch the user's profile data
    [request fetchProfileWithDelegate:self];
}

- (void)requestDidFinishLoading:(YOSResponseData *)data {
    // parse the response text string into a dictionary
    NSDictionary *rspData = [NSJSONSerialization JSONObjectWithData:[data.responseText dataUsingEncoding:NSUTF8StringEncoding] options:NSJSONReadingAllowFragments error:nil];
    NSDictionary *profileData = [rspData objectForKey:@"profile"];

    // format a string using the nickname object from the profile.
    NSString *welcomeText = [NSString stringWithFormat:@"Hey %@ %@!",
                             [profileData objectForKey:@"givenName"],
                             [profileData objectForKey:@"familyName"]];
    NSLog(@"welcometext is %@",welcomeText);
    self.lblProfile.text = welcomeText;
}
Run Code Online (Sandbox Code Playgroud)

代码块3

- (BOOL)application: (UIApplication *)application
            openURL: (NSURL *)url
  sourceApplication: (NSString *)sourceApplication
         annotation: (id)annotation {
    NSString *str = [[url description] stringByReplacingOccurrencesOfString:@"com.mymobileapps.currentApp.yahoo://oauth-response?oauth_token=" withString:@""];
    NSArray *ar = [str componentsSeparatedByString:@"&oauth_verifier="];
    NSLog(@"oauth_token is %@",[ar objectAtIndex:0]);
    NSLog(@"oauth_verifier is %@",[ar objectAtIndex:1]);
    // How my session will get updated now with valid authentication done?
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

我遵循了这里描述的每一步 - http://developer.yahoo.com/social/sdk/objectivec/我还实现了如此处所述的重定向 - 如何在身份验证后从Yahoo重定向到我的IOS应用程序?

问题如下.我仍然无法获取性别,出生日期等用户个人资料详细信息.这是 - 从代码块2,我收到的数据为零.

我的代码中缺少什么来检索用户配置文件的数据?

其他参考.

- (BOOL)application: (UIApplication *)application
            openURL: (NSURL *)url
  sourceApplication: (NSString *)sourceApplication
         annotation: (id)annotation {
    return [GPPURLHandler handleURL:url
                  sourceApplication:sourceApplication
                         annotation:annotation];
}
Run Code Online (Sandbox Code Playgroud)

上面的代码说明了Google+框架如何处理重定向并使用本地会话进行管理.在雅虎的情况下,我找不到任何有助于更新移动应用程序的本地会话的细节.

编辑:
如果无法通过Yahoo OAuth,如何从雅虎获取基本的个人资料详细信息(如性别,出生日期,电子邮件ID,姓名等)?

Sag*_*ari 2

这是解决方案。

注意:为此您需要一个中间服务器。

  • 步骤01.下载PHP yahoo框架http://github.com/yahoo/yos-social-php
  • 步骤02.启动WAMP/XAMPP服务器。
  • 步骤03。获取URL
    • 例子 -http://10.0.0.76/iOS/yos-social-php-master/sample/sampleapp.php
  • 步骤 04.返回 XCode 项目。
  • 步骤 05.打开 XIB,放置 Yahoo 按钮并连接 IBAction 方法。
  • 步骤06.在IBAction方法中,导航到从iOS应用程序获取的URL到URL。请参阅代码块 1
  • 步骤 07.在 AppDelegate.m 中添加方法来处理从服务器到移动应用程序的重定向。请参阅代码块 2
  • 步骤 08.确保您的应用程序能够处理重定向。打开您的 project-info.plist 作为源代码并确保您有有效的URL types, URL identifier& URL Schemes。如代码块 3所示
  • 步骤 09.现在您的移动应用程序已准备好从服务器重定向。
  • 步骤 10.打开yourLocalServer/iOS/yos-social-php-master/sample/sampleapp.php文件。(https://github.com/yahoo/yos-social-php/blob/master/sample/sampleapp.php
  • 步骤11.注释从97到106的代码。
  • 步骤 12.按照代码块 4所示输入代码
  • 步骤 13.运行您的项目,单击 iOS 应用程序中的按钮。
  • 步骤 14.应用程序将导航到您的网站页面。网站页面将进行身份验证并获取个人资料详细信息。
  • 步骤 15.身份验证完成后,网站页面将重定向回您的移动应用程序,其中包含性别、全名、出生日期、guid、个人资料图片 url 等详细信息。

概括

移动应用程序导航到服务器 -> 服务器通过 OAuth-php 管理身份验证。经过身份验证后,服务器会检索个人资料详细信息,并且服务器会指示 safari 导航回您的移动应用程序。您的移动应用程序获取代码块中的所有详细信息

代码块1

- (IBAction)connectYahoo:(id)sender {
      [[UIApplication sharedApplication] 
           openURL:[NSURL URLWithString:
           @"http://yourLocalServer/iOS/yos-social-php-master/sample/sampleapp.php"
      ]];
}
Run Code Online (Sandbox Code Playgroud)

代码块2

- (BOOL)application:(UIApplication *)application
        openURL:(NSURL *)url
   sourceApplication:(NSString *)sourceApplication
     annotation:(id)annotation {

    if([[url scheme] isEqualToString:@"com.yourcompany.app.fsq"]) {
        return [self.obj_LoginHomeVCtr.foursquare handleOpenURL:url];
    } else if([[url scheme] isEqualToString:@"com.yourcompany.app.googleplus"]){
        return [GPPURLHandler handleURL:url
                  sourceApplication:sourceApplication
                         annotation:annotation];

    }else if([[url scheme] isEqualToString:@"fb188315544652080"]){
        return [FBAppCall handleOpenURL:url
                  sourceApplication:sourceApplication
                    fallbackHandler:^(FBAppCall *call) {
                        NSLog(@"In fallback handler");
                    }];
    } else if ([[url scheme] isEqualToString:@"com.yourcompany.app.yahoo"]){
        STLog(@"URL is %@",url);
        return YES;
    }
    return YES;
}
Run Code Online (Sandbox Code Playgroud)

代码块3

<key>CFBundleURLTypes</key>
<array>
    <dict>
        <key>CFBundleTypeRole</key>
        <string>Editor</string>
        <key>CFBundleURLName</key>
        <string>com.yourcompany.app.yahoo</string>
        <key>CFBundleURLSchemes</key>
        <array>
            <string>com.yourcompany.app.yahoo</string>
        </array>
    </dict>
</array>
Run Code Online (Sandbox Code Playgroud)

代码块4

  else if($hasSession && $profile) {
      $string = "com.yourcompany.app.yahoo://response?birthdate=" . $profile->birthdate . "&familyName=" . $profile->familyName. " " . $profile->givenName . "&gender=" . $profile->gender . "&guid=" . $profile->guid . "&image=" . $profile->image->imageUrl;
      echo '<meta http-equiv="Refresh" content="1;URL='. $string .'">';
  }
?>
Run Code Online (Sandbox Code Playgroud)