这在模拟器中工作正常,因为我将重定向URI设置为http:// localhost,并在我的本地机器上运行服务器.
但是,我想在设备上进行测试,同时仍然连接到在桌面上运行的服务器.为了做到这一点,我已经得到了应用程序来发现我的桌面地址(本地子网IP或bonjour地址,如http://foo.local.)连接到服务器.但是,Google Oauth2流程表示它不能使用本地URI作为重定向网址.
有没有办法解决?如果可能的话,我想不用混淆我的IOS设备的本地网络设置或代理请求.理想情况下,我也希望能够使用bonjour服务来发现服务器,因为我们有一个开发团队,我们的应用程序可以让您选择要连接到的本地网络上的哪台服务器.
选项?
解决方法
如果服务器是必须有中间人,那么我调查最简单的方法是获取域名并使服务器公开. www.godaddy.com或任何域名提供商将获得每年约15美元的域名(如果有折扣,将会降低).
之后,只需搜索如何获取动态DNS,并将redirect_uri设置为已选择的域名.
否则我没有看到服务器的作用是在这里玩,只是为了oauth的目的.作为下面列出的第二种方法,设备可以直接与谷歌服务器通信,甚至在严重阻碍的防火墙后面. (令牌将被传递抛出标题栏).
所以在这里可能需要一些澄清.
本地主机服务器是否像中转站一样从Google驱动器中获取文件,然后再分配到iOS设备?或者什么样的网络架构想在这里实现?
==
18/03/2013更新
根据官方文件
https://developers.google.com/accounts/docs/OAuth2InstalledApp#choosingredirecturi
oauth有两种方法.使用localhost作为重定向只是一种方法.
另一个是使用这个字符串
urn:ietf:wg:oauth:2.0:oob
以替换具有本地主机的请求.
例如,使用localhost的先前请求(注意:区别在于以“redirect_uri =”开头的中间行)
https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile& redirect_uri=http://localhost:9004& response_type=code&client_id=812741506391-h38jh0j4fv0ce1krdkiq0hfvt6n5amrf.apps.googleusercontent.com
现在可以改为
https://accounts.google.com/o/oauth2/auth?scope=https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.email+https%3A%2F%2Fwww.googleapis.com%2Fauth%2Fuserinfo.profile& redirect_uri=urn:ietf:wg:oauth:2.0:oob& response_type=code&client_id=812741506391-h38jh0j4fv0ce1krdkiq0hfvt6n5amrf.apps.googleusercontent.com
所以在模拟器中访问前者的URL应该等同于在实际设备中访问后者.
光环