Scope:我正在开发一个使用Xamarin (c#)的移动应用程序,针对Android和iPhone(最初是Android)。应用程序逻辑被分离到PCL (c#)中,以尽可能确保最大程度的代码重用。该应用程序集成了YouTube数据API v3,目的是对检索到的视频进行评级,并允许订阅一个频道。
背景:根据文档(http://developer.android.com/google/play-services/auth.html),我使用建议的方法为Android的授权请求生成OAuth2令牌,使用AccountManager。getToken方法,这工作得很好,并返回一个令牌。
下一步是使用这个令牌发出请求(让我们以评价视频为例)。我最初的想法是为YouTube数据Api (https://developers.google.com/api-client-library/dotnet/get_started)使用。net客户端库。然而,这似乎会让我们再次经历整个授权过程,并且可能需要web视图重定向或类似的操作。我曾希望可能有一种方法可以使用已经检索到的令牌来创建凭据对象或直接创建服务,但情况似乎并非如此。
我在客户端库中发现的第二个问题是,在添加NuGet包(即GoogleWebAuthorizationBroker)时,并非所有类都被引用。此外,由于我们在PCL中,我们受到常见对象的限制,例如文档示例中使用的FileStream (https://developers.google.com/api-client-library/dotnet/guide/aaa_oauth)。我确实尝试从一个非PCL项目中使用这个库,以确认它不仅仅是PCL中负责的有限引用(对于GoogleWebAuthorizationBroker引用问题)。
因此,另一种选择是查看URL的手动构造,然后发布数据以我们自己发出HTTP请求。这也遇到了有限的成功,类似于这里列出的问题:像视频与访问令牌在YouTube上使用YouTube数据API v3?,这似乎没有回答(建议使用客户端api)。是否支持这种方法,如果支持,是否有一些文档化的。net示例?这种方法将允许我本地获得令牌(在android, iphone上),然后将其传递给我可以发出请求的PCL库,这将是可取的。
问题:所以我的问题是给出了我在这里想要达到的范围什么是被批准/建议的方法。显然,从代码重用的角度来看,我在PCL中做得越多越好,但现在我对一种实际上只适用于Android的方法相当满意。如果有人有任何成功地从Android向YouTube数据Api (v3)发出身份验证请求的例子,这也将是有用的。我觉得我花了几天的时间浏览了很多文档,但没有找到任何明确的说法来说明"这就是你应该怎么做"。
提前感谢任何帮助。
嗯,我不一定认为这个是对我的问题的的回答,然而,这是我所采取的方法,所以我想我应该回来报告。我在Xamarin Android项目中保留了OAuth2令牌生成代码,然后将其传递给一个PCL,该PCL有一个存储库来处理YouTube集成。因为我只需要进行几个调用(评级、订阅和评论),所以我选择通过HttpClient手动构造POSTs并以这种方式进行。
可能不像客户端库集成那样优雅,但可以完成工作。作为参考,如果您首先使用Google OAuth Playground (https://developers.google.com/oauthplayground/)获取令牌并确认请求的正确JSON,则会容易得多。
如果有人对这种方法有任何问题,请告诉我,我可以发布具体的服务呼叫作为示例。
据我所知,这不是google-api-dotnet-client的功能。
如果你看源代码(https://github.com/google/google-api-dotnet-client),你可以看到GoogleWebAuthorizationBroker是为Windows Store, WP 8等定义的。
这表明该库是为运行在微软操作系统上的。net客户端设计的,而不是Android, iOS等。
这些可能是你正在寻找的机器人:https://github.com/xamarin/GooglePlayServicesComponents (Android)https://github.com/xamarin/GoogleApisForiOSComponents
它们是针对每个平台的Google SDK的Xamarin包装器。
这是有道理的,因为Android上调用Google api的方式。与其依赖不应该嵌入到应用程序中的客户端秘密,不如根据"已安装的应用程序"客户端ID注册应用程序的签名。然后,操作系统在调用google服务时提供此密钥。你不会在PCL中得到这个功能:)