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