首先Fork一份GithubClient这个项目到自己的仓库。如图。
你会发现,Fork之后,自己的仓库已经多了一个仓库。

很简单,当你觉得代码可以提交之后,先提交到自己Fork的那个仓库。
然后在仓库主页点击New Pull Request
这时候会出现这个页面。
注意左边的base fork,请选择自己对应的分支,而不是提交到master分支。比如,如果是郑学海提交的pr,他应该选择zhengxuehai这个分支。
这样,我就可以看到你提交的pr,从而审核你的代码。
因为这个OAuth2认证可能略复杂。我也调了很久才调通。在这里简单叙述一下流程。
第一步当然是Register Application了。
这里需要注意的是Authorization callback URL这个东西。
这个东西是什么意思呢?
就是当用户打开Safari,获取用户授权之后,需要回调,回调到哪呢?
当然是回到我们自己的App对吧,所以这里需要填你自己App的URL Scheme。
注册完毕之后,我们获取了一个client_id和client_secret. 我们后面会需要他。
接下来,是通过我们的程序打开Safari并且传递一个url来打开github的授权页面。
那么,这个url是什么样的呢?
这个url应该长这样。
https://github.com/login/oauth/authorize? client_id=...& scope=user,public_repo&redirect_uri=...
这个url附带了三个参数。
- client_id
- scope
- redirect_uri
第一个,我们注册之后就能获取到
第二个,scope是什么意思?很简单,代表着你想要获取的权限,比如,scope=user,public_repo就代表,你想获取两个权限,第一个权限是后去某个用户的个人信息也即user,第二个权限想获取github上公开的仓库信息,也即public_repo.scope还有很多权限,具体内容看https://developer.github.com/v3/oauth/
创建了正确的url了之后,这时候你就应该在你的app里打开safari了,当然,也可以自己创建一个wkwebview,不过不推荐这么做。
想想,怎么在自己的app里打开safari并且传递这个网址?
然后,怎么给自己的App创建一个URL scheme 从而使的safari可以成功回调会我们的app
最后,怎么获取safari回调之后的结果?
获取Token。
Token是什么?简单来说,Token就是在获取用户授权之后,github会给你一个凭证,以后你每发送一个请求之后,都需要在HttpRequest的HttpHeader里附带这个凭证,这个东西就是Token。
那么如何获取Token呢?
在完成第二步的时候,safari回掉到我们的App里。
这时候我们需要在AppDelegate的- (BOOL)application:(UIApplication *)app openURL:(NSURL *)url options:(NSDictionary<NSString *,id> *)options方法里解析url,这个url包含一个叫做code的东西。
需要发送一个Post请求,这个Post请求的baseUrl是这个https://github.com/login/oauth/access_token
他需要附带三个参数。
- client_id
- client_secret
- code
前两个也是注册Application之后就有了。 code是我们在第二步拿到的。
发送完post请求之后,就可以拿到我们想要的token了,这时候应该存在userdefault里。
这时候容易出现的一个错误是,unrecognize content type。
是因为你需要将[_manager.requestSerializer setValue:@"application/json" forHTTPHeaderField:@"Accept"];
以后没法送一个请求,都需要在request的http header里添加一个键值对。
Authorization:token 你的token
OC代码是类似于这样的。
NSString *authorization = [NSString stringWithFormat:@"%@ %@",@"token", token]; [_manager.requestSerializer setValue:authorization forHTTPHeaderField:@"Authorization"];



