{"action":"created","comment":{"url":"https://api.github.com/repos/leancloud/docs/pulls/comments/27261360","id":27261360,"diff_hunk":"@@ -0,0 +1,1163 @@\n+# Windows Phone 实时通信服务(v2)\n+\n+## 简介\n+\n+在阅读本开发指南之前，请先阅读下[《实时通信开发指南(v2)》](./realtime_v2.html)，了解实时通信的基本概念和模型。\n+\n+目前我们的实时通信服务仅支持 Windows Phone Silverlight 运行时，支持微软新一代的全平台统一运行时的 LeanCloud SDK for Windows Runtime 会尽快发布，本文档所提及的概念以及示例代码都兼容以上提及的 2 个运行时。\n+\n+## 安装\n+为了支持实时聊天，LeanCloud SDK for Windows Phone Silverlight 依赖于一个开源的第三方的 WebSocket 的[库](https://www.nuget.org/packages/WebSocket4Net/)，所以推荐开发者从 [Nuget](https://www.nuget.org/packages/AVOSCloud.Phone/1.2.3.4-beta) 上下载我们的 SDK。\n+\n+## 初始化\n+导入 SDK 之后，在 `App.xaml` 的构造函数中添加如下代码：\n+\n+```c#\n+public App()\n+{\n+   //generated code by visual studio\n+   ...\n+   AVClient.Initialize(\"你的 AppId\", \"你的 AppKey\");\n+   ...\n+}\n+```\n+\n+## 单聊\n+\n+###  发送消息\n+此场景类似于微信的私聊，微博的私信以及 QQ 单聊的场景，我们在 V2 版本内建立了一个统一的概念来描述聊天的各种场景：对话 — AVIMConversation，在[《实时通信开发指南(v2)》](./realtime_v2.html)里面有详细的介绍。\n+\n+刘备想发送一条消息给曹操，下面的代码将帮助他实现这一功能：\n+\n+```c#\n+public async void Sanguo_Episode1()\n+{\n+    AVIMClient client = new AVIMClient(\"Liubei\");//刘备用自己的名字作为 ClientId。\n+    //注：ClientId 在单个应用中保持唯一即可，值为任意长度不超50的字符，由开发者自己维护\n+\n+    await client.ConnectAsync();//刘备登陆到 LeanCloud 服务端\n+\n+    AVIMConversation conversationWithCaocao = await client.CreateConversationAsync(\"Caocao\");\n+    //创建一个只包含 刘备 和 曹操 对话，这就是单聊。\n+\n+    await conversationWithCaocao.SendTextMessageAsync(\"丞相，皇上又赏赐我新手机了！\");\n+    //调用 AVIMConversation.SendTextMessageAsync 方法发送消息。\n+\n+}\n+```\n+\n+### 接受消息\n+\n+曹操如果想收到刘备的消息，他需要如下代码：\n+\n+```c#\n+public async void Sanguo_Episode1_1()\n+{\n+    AVIMClient client = new AVIMClient(\"CaoCao\");//刘备用自己的名字作为 ClientId。\n+    await client.ConnectAsync();\n+    client.OnMessageReceieved += (s, e) =>\n+    {\n+        if (e.Message is AVIMTextMessage)\n+        {\n+            string words = ((AVIMTextMessage)e.Message).TextContent;\n+            //words 的内容就是：丞相，皇上又送我新手机了！\n+        }\n+    };\n+\n+}\n+```\n+运行以上代码之后，在 LeanCloud 网站的控制台找到指定的应用，打开存储管理控制台，可以看到默认表 `_Conversation`中多了一条数据，该条数据的字段解释如下：\n+\n+* name：String，对话唯一的名字。\n+* m：Array，对话中成员的列表。\n+* lm：Date，对话中最后一条消息发送的时间。\n+* c：String，对话的创建者的 ClientId\n+* mu：Array，对话中设置了静音的成员，仅针对 iOS 以及 Windows Phone 用户有效\n+* attr：Object，开发者设置的对话的自定义属性。\n+\n+## 群聊\n+此场景类似于微信的多人聊天群组，以及 QQ 群 ，请注意这里的群聊指的是持久化存储的一个群组的概念，比如 QQ 群，除非群主解散该群，这个群应该是一直存在于 我的QQ群 列表中。关于临时群组聊天（聊天室）会在之后做单独解释。\n+\n+### 发送消息\n+刘备想建立一个群，把自己家里人都拉进这个群，然后给他们发消息，他需要做的事情是：\n+\n+* 第一步：建立一个家庭成员列表\n+* 第二步：新建一个对话，把家庭成员列表里面的成员列为对话的参与人员\n+* 第三步：发送一条消息\n+\n+以下代码将实现这个需求：\n+\n+```c#\n+public async void Sanguo_Eposode2()\n+{\n+    AVIMClient client = new AVIMClient(\"LiuBei\");//刘备用自己的名字作为 ClientId。\n+\n+    await client.ConnectAsync();//刘备登陆到 LeanCloud 服务端\n+\n+    #region 第一步：建立一个家庭成员列表\n+    IList<string> familyMembers = new List<string>();\n+    familyMembers.Add(\"GuanYu\");\n+    familyMembers.Add(\"ZhangFei\");\n+    familyMembers.Add(\"Wife01\");\n+    familyMembers.Add(\"Wife02\");\n+    //把家里人都作为群成员\n+    #endregion\n+\n+    #region 第二步：新建一个对话，把家庭成员列表列为对话的参与人员\n+    AVIMConversation familyConversation = await client.CreateConversationAsync(familyMembers);\n+    //创建一个对话，对话包含了 刘关张以及两位夫人\n+    #endregion\n+\n+    #region 第三步：发送一条消息\n+    await familyConversation.SendTextMessageAsync(\"曹操已对我起了疑心，我们还是赶紧跑路吧……\");\n+    #endregion\n+}\n+```\n+\n+### 接受消息\n+群聊的接受消息于单聊的接受消息是一样的。\n+\n+```c#\n+AVIMConversation NitifiedConversation = null;\n+public async void Sanguo_Episode2_1()\n+{\n+    AVIMClient client = new AVIMClient(\"GuanYu\");//刘备用自己的名字作为 ClientId。\n+    await client.ConnectAsync();\n+    \n+    client.OnMessageReceieved += (s, e) =>\n+    {\n+        if (e.Message is AVIMTextMessage)\n+        {\n+            string words = ((AVIMTextMessage)e.Message).TextContent;\n+            //words 的内容就是：曹操已对我起了疑心，我们还是赶紧跑路吧……\n+            NitifiedConversation = e.Conversation;\n+        }\n+    };\n+}\n+public async void SendToBoss()\n+{\n+    if (NitifiedConversation != null)\n+    {\n+        await NitifiedConversation.SendTextMessageAsync(\"大哥，莫怕！有我和三弟保护你!\");\n+    }\n+}\n+```\n+\n+而以上刘备和关羽发送的消息，张飞上线的时候都会收到。\n+\n+## 消息\n+消息在 v2 版本的 SDK 中做了多层抽象以及封装，详细的我们先从如何发送接收富媒体消息开始。\n+### 富媒体消息\n+富媒体消息的支持是 V2 版本针对 V1 的一个核心提升，我们目前 SDK 已经支持的富媒体消息类型有以下几种：\n+\n+* 图片消息：`AVIMImageMessage`\n+* 音频消息：`AVIMAudioMessage`\n+* 视频消息：`AVIMVideoMessage`\n+*  文件消息：`AVIMFileMessage`\n+* 地理位置消息：`AVIMLocationMessage`\n+\n+\n+#### 图片消息\n+图片消息可以由系统提供的拍照 API，以及媒体库中获取，也可以是可访问的图片有效 Url，只要开发者调用一个构造方法，构造出一个 `AVIMImageMessage`，然后把 `AVIMImageMessage` 对象当做参数交由 `AVConversation` 发送出去即可。\n+\n+##### 发送图片消息\n+比如从微博拷贝了一个图片链接，然后可以通过 SDK 直接构建一个 `AVIMImageMessage`并且发送出去：\n+```c#\n+public async void SendImageMessageAsync_Test()\n+{\n+    AVIMClient client = new AVIMClient(\"Tom\");\n+    \n+    await client.ConnectAsync();//Tom 登陆\n+\n+    AVIMConversation conversation = await client.CreateConversationAsync(\"Jerry\", \"猫和老鼠\");//创建对话\n+\n+    AVIMImageMessage imgMessage = new AVIMImageMessage(\"http://pic2.zhimg.com/6c10e6053c739ed0ce676a0aff15cf1c.gif\");//从外部链接创建图片消息\n+    await conversation.SendImageMessageAsync(imgMessage);//发送给 Jerry\n+}\n+``` \n+\n+系统也提供了 API 去获取媒体库里面的照片，开发者只需要调用系统的 API 获取图片文件的数据流，然后构造出一个 `AVIMImageMessage`，再调用 `AVIMConversation.SendImageMessageAsync`去发送图片：\n+\n+```c#\n+MediaLibrary library = new MediaLibrary();//系统媒体库\n+var photo = library.Pictures[0];//获取第一张照片，运行这段代码，确保手机以及虚拟机里面的媒体库至少有一张照片\n+\n+AVIMImageMessage imgMessage = new AVIMImageMessage(photo.Name, photo.GetImage());//构造 AVIMImageMessage\n+imgMessage.Attributes = new Dictionary<string, object>() \n+{ \n+    {\"location\",\"San Francisco\"}\n+};\n+imgMessage.Title = \"发自我的WP\";\n+await conversation.SendImageMessageAsync(imgMessage);\n+```\n+\n+##### 接受图片消息\n+类似于第一章节中单聊中的接收消息，在 `AVIMClient` 中的 `OnMessageReceived` 可以收到消息，但是假如接收方在客户端也正好加载了这个对话，那么接收方在 `AVIMConversation` 里面也会收到 `OnImageMessageReceived` 的事件响应：","path":"md/wp_realtime_v2.md","position":195,"original_position":195,"commit_id":"a791743b6de7276f40800cc7e18ce53c999bfc07","original_commit_id":"a791743b6de7276f40800cc7e18ce53c999bfc07","user":{"login":"jwfing","id":985038,"avatar_url":"https://avatars.githubusercontent.com/u/985038?v=3","gravatar_id":"","url":"https://api.github.com/users/jwfing","html_url":"https://github.com/jwfing","followers_url":"https://api.github.com/users/jwfing/followers","following_url":"https://api.github.com/users/jwfing/following{/other_user}","gists_url":"https://api.github.com/users/jwfing/gists{/gist_id}","starred_url":"https://api.github.com/users/jwfing/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/jwfing/subscriptions","organizations_url":"https://api.github.com/users/jwfing/orgs","repos_url":"https://api.github.com/users/jwfing/repos","events_url":"https://api.github.com/users/jwfing/events{/privacy}","received_events_url":"https://api.github.com/users/jwfing/received_events","type":"User","site_admin":false},"body":"这两种方式的区别和适用场合需要说明一下。","created_at":"2015-03-26T22:10:25Z","updated_at":"2015-03-26T22:10:25Z","html_url":"https://github.com/leancloud/docs/pull/170#discussion_r27261360","pull_request_url":"https://api.github.com/repos/leancloud/docs/pulls/170","_links":{"self":{"href":"https://api.github.com/repos/leancloud/docs/pulls/comments/27261360"},"html":{"href":"https://github.com/leancloud/docs/pull/170#discussion_r27261360"},"pull_request":{"href":"https://api.github.com/repos/leancloud/docs/pulls/170"}}},"pull_request":{"url":"https://api.github.com/repos/leancloud/docs/pulls/170","id":31988037,"html_url":"https://github.com/leancloud/docs/pull/170","diff_url":"https://github.com/leancloud/docs/pull/170.diff","patch_url":"https://github.com/leancloud/docs/pull/170.patch","issue_url":"https://api.github.com/repos/leancloud/docs/issues/170","number":170,"state":"open","locked":false,"title":"WP realtime v2 doc","user":{"login":"freewing99","id":5119542,"avatar_url":"https://avatars.githubusercontent.com/u/5119542?v=3","gravatar_id":"","url":"https://api.github.com/users/freewing99","html_url":"https://github.com/freewing99","followers_url":"https://api.github.com/users/freewing99/followers","following_url":"https://api.github.com/users/freewing99/following{/other_user}","gists_url":"https://api.github.com/users/freewing99/gists{/gist_id}","starred_url":"https://api.github.com/users/freewing99/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/freewing99/subscriptions","organizations_url":"https://api.github.com/users/freewing99/orgs","repos_url":"https://api.github.com/users/freewing99/repos","events_url":"https://api.github.com/users/freewing99/events{/privacy}","received_events_url":"https://api.github.com/users/freewing99/received_events","type":"User","site_admin":false},"body":"WP realtime v2 doc","created_at":"2015-03-26T04:08:25Z","updated_at":"2015-03-26T22:10:25Z","closed_at":null,"merged_at":null,"merge_commit_sha":"718bfa64041365aafbad7a54e408eb829fdef711","assignee":null,"milestone":null,"commits_url":"https://api.github.com/repos/leancloud/docs/pulls/170/commits","review_comments_url":"https://api.github.com/repos/leancloud/docs/pulls/170/comments","review_comment_url":"https://api.github.com/repos/leancloud/docs/pulls/comments{/number}","comments_url":"https://api.github.com/repos/leancloud/docs/issues/170/comments","statuses_url":"https://api.github.com/repos/leancloud/docs/statuses/a791743b6de7276f40800cc7e18ce53c999bfc07","head":{"label":"freewing99:wp","ref":"wp","sha":"a791743b6de7276f40800cc7e18ce53c999bfc07","user":{"login":"freewing99","id":5119542,"avatar_url":"https://avatars.githubusercontent.com/u/5119542?v=3","gravatar_id":"","url":"https://api.github.com/users/freewing99","html_url":"https://github.com/freewing99","followers_url":"https://api.github.com/users/freewing99/followers","following_url":"https://api.github.com/users/freewing99/following{/other_user}","gists_url":"https://api.github.com/users/freewing99/gists{/gist_id}","starred_url":"https://api.github.com/users/freewing99/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/freewing99/subscriptions","organizations_url":"https://api.github.com/users/freewing99/orgs","repos_url":"https://api.github.com/users/freewing99/repos","events_url":"https://api.github.com/users/freewing99/events{/privacy}","received_events_url":"https://api.github.com/users/freewing99/received_events","type":"User","site_admin":false},"repo":{"id":29326977,"name":"docs","full_name":"freewing99/docs","owner":{"login":"freewing99","id":5119542,"avatar_url":"https://avatars.githubusercontent.com/u/5119542?v=3","gravatar_id":"","url":"https://api.github.com/users/freewing99","html_url":"https://github.com/freewing99","followers_url":"https://api.github.com/users/freewing99/followers","following_url":"https://api.github.com/users/freewing99/following{/other_user}","gists_url":"https://api.github.com/users/freewing99/gists{/gist_id}","starred_url":"https://api.github.com/users/freewing99/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/freewing99/subscriptions","organizations_url":"https://api.github.com/users/freewing99/orgs","repos_url":"https://api.github.com/users/freewing99/repos","events_url":"https://api.github.com/users/freewing99/events{/privacy}","received_events_url":"https://api.github.com/users/freewing99/received_events","type":"User","site_admin":false},"private":false,"html_url":"https://github.com/freewing99/docs","description":"LeanCloud Documentation","fork":true,"url":"https://api.github.com/repos/freewing99/docs","forks_url":"https://api.github.com/repos/freewing99/docs/forks","keys_url":"https://api.github.com/repos/freewing99/docs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/freewing99/docs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/freewing99/docs/teams","hooks_url":"https://api.github.com/repos/freewing99/docs/hooks","issue_events_url":"https://api.github.com/repos/freewing99/docs/issues/events{/number}","events_url":"https://api.github.com/repos/freewing99/docs/events","assignees_url":"https://api.github.com/repos/freewing99/docs/assignees{/user}","branches_url":"https://api.github.com/repos/freewing99/docs/branches{/branch}","tags_url":"https://api.github.com/repos/freewing99/docs/tags","blobs_url":"https://api.github.com/repos/freewing99/docs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/freewing99/docs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/freewing99/docs/git/refs{/sha}","trees_url":"https://api.github.com/repos/freewing99/docs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/freewing99/docs/statuses/{sha}","languages_url":"https://api.github.com/repos/freewing99/docs/languages","stargazers_url":"https://api.github.com/repos/freewing99/docs/stargazers","contributors_url":"https://api.github.com/repos/freewing99/docs/contributors","subscribers_url":"https://api.github.com/repos/freewing99/docs/subscribers","subscription_url":"https://api.github.com/repos/freewing99/docs/subscription","commits_url":"https://api.github.com/repos/freewing99/docs/commits{/sha}","git_commits_url":"https://api.github.com/repos/freewing99/docs/git/commits{/sha}","comments_url":"https://api.github.com/repos/freewing99/docs/comments{/number}","issue_comment_url":"https://api.github.com/repos/freewing99/docs/issues/comments{/number}","contents_url":"https://api.github.com/repos/freewing99/docs/contents/{+path}","compare_url":"https://api.github.com/repos/freewing99/docs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/freewing99/docs/merges","archive_url":"https://api.github.com/repos/freewing99/docs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/freewing99/docs/downloads","issues_url":"https://api.github.com/repos/freewing99/docs/issues{/number}","pulls_url":"https://api.github.com/repos/freewing99/docs/pulls{/number}","milestones_url":"https://api.github.com/repos/freewing99/docs/milestones{/number}","notifications_url":"https://api.github.com/repos/freewing99/docs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/freewing99/docs/labels{/name}","releases_url":"https://api.github.com/repos/freewing99/docs/releases{/id}","created_at":"2015-01-16T01:31:32Z","updated_at":"2015-01-06T06:57:48Z","pushed_at":"2015-03-26T13:55:31Z","git_url":"git://github.com/freewing99/docs.git","ssh_url":"git@github.com:freewing99/docs.git","clone_url":"https://github.com/freewing99/docs.git","svn_url":"https://github.com/freewing99/docs","homepage":"http://leancloud.cn/docs/","size":16646,"stargazers_count":0,"watchers_count":0,"language":null,"has_issues":false,"has_downloads":true,"has_wiki":true,"has_pages":false,"forks_count":0,"mirror_url":null,"open_issues_count":0,"forks":0,"open_issues":0,"watchers":0,"default_branch":"master"}},"base":{"label":"leancloud:master","ref":"master","sha":"35c88643c6eb9871ed7543d3c695c0513d4d918a","user":{"login":"leancloud","id":6660518,"avatar_url":"https://avatars.githubusercontent.com/u/6660518?v=3","gravatar_id":"","url":"https://api.github.com/users/leancloud","html_url":"https://github.com/leancloud","followers_url":"https://api.github.com/users/leancloud/followers","following_url":"https://api.github.com/users/leancloud/following{/other_user}","gists_url":"https://api.github.com/users/leancloud/gists{/gist_id}","starred_url":"https://api.github.com/users/leancloud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/leancloud/subscriptions","organizations_url":"https://api.github.com/users/leancloud/orgs","repos_url":"https://api.github.com/users/leancloud/repos","events_url":"https://api.github.com/users/leancloud/events{/privacy}","received_events_url":"https://api.github.com/users/leancloud/received_events","type":"Organization","site_admin":false},"repo":{"id":25067518,"name":"docs","full_name":"leancloud/docs","owner":{"login":"leancloud","id":6660518,"avatar_url":"https://avatars.githubusercontent.com/u/6660518?v=3","gravatar_id":"","url":"https://api.github.com/users/leancloud","html_url":"https://github.com/leancloud","followers_url":"https://api.github.com/users/leancloud/followers","following_url":"https://api.github.com/users/leancloud/following{/other_user}","gists_url":"https://api.github.com/users/leancloud/gists{/gist_id}","starred_url":"https://api.github.com/users/leancloud/starred{/owner}{/repo}","subscriptions_url":"https://api.github.com/users/leancloud/subscriptions","organizations_url":"https://api.github.com/users/leancloud/orgs","repos_url":"https://api.github.com/users/leancloud/repos","events_url":"https://api.github.com/users/leancloud/events{/privacy}","received_events_url":"https://api.github.com/users/leancloud/received_events","type":"Organization","site_admin":false},"private":false,"html_url":"https://github.com/leancloud/docs","description":"LeanCloud Documentation","fork":false,"url":"https://api.github.com/repos/leancloud/docs","forks_url":"https://api.github.com/repos/leancloud/docs/forks","keys_url":"https://api.github.com/repos/leancloud/docs/keys{/key_id}","collaborators_url":"https://api.github.com/repos/leancloud/docs/collaborators{/collaborator}","teams_url":"https://api.github.com/repos/leancloud/docs/teams","hooks_url":"https://api.github.com/repos/leancloud/docs/hooks","issue_events_url":"https://api.github.com/repos/leancloud/docs/issues/events{/number}","events_url":"https://api.github.com/repos/leancloud/docs/events","assignees_url":"https://api.github.com/repos/leancloud/docs/assignees{/user}","branches_url":"https://api.github.com/repos/leancloud/docs/branches{/branch}","tags_url":"https://api.github.com/repos/leancloud/docs/tags","blobs_url":"https://api.github.com/repos/leancloud/docs/git/blobs{/sha}","git_tags_url":"https://api.github.com/repos/leancloud/docs/git/tags{/sha}","git_refs_url":"https://api.github.com/repos/leancloud/docs/git/refs{/sha}","trees_url":"https://api.github.com/repos/leancloud/docs/git/trees{/sha}","statuses_url":"https://api.github.com/repos/leancloud/docs/statuses/{sha}","languages_url":"https://api.github.com/repos/leancloud/docs/languages","stargazers_url":"https://api.github.com/repos/leancloud/docs/stargazers","contributors_url":"https://api.github.com/repos/leancloud/docs/contributors","subscribers_url":"https://api.github.com/repos/leancloud/docs/subscribers","subscription_url":"https://api.github.com/repos/leancloud/docs/subscription","commits_url":"https://api.github.com/repos/leancloud/docs/commits{/sha}","git_commits_url":"https://api.github.com/repos/leancloud/docs/git/commits{/sha}","comments_url":"https://api.github.com/repos/leancloud/docs/comments{/number}","issue_comment_url":"https://api.github.com/repos/leancloud/docs/issues/comments{/number}","contents_url":"https://api.github.com/repos/leancloud/docs/contents/{+path}","compare_url":"https://api.github.com/repos/leancloud/docs/compare/{base}...{head}","merges_url":"https://api.github.com/repos/leancloud/docs/merges","archive_url":"https://api.github.com/repos/leancloud/docs/{archive_format}{/ref}","downloads_url":"https://api.github.com/repos/leancloud/docs/downloads","issues_url":"https://api.github.com/repos/leancloud/docs/issues{/number}","pulls_url":"https://api.github.com/repos/leancloud/docs/pulls{/number}","milestones_url":"https://api.github.com/repos/leancloud/docs/milestones{/number}","notifications_url":"https://api.github.com/repos/leancloud/docs/notifications{?since,all,participating}","labels_url":"https://api.github.com/repos/leancloud/docs/labels{/name}","releases_url":"https://api.github.com/repos/leancloud/docs/releases{/id}","created_at":"2014-10-11T07:14:37Z","updated_at":"2015-03-26T03:32:56Z","pushed_at":"2015-03-26T13:56:14Z","git_url":"git://github.com/leancloud/docs.git","ssh_url":"git@github.com:leancloud/docs.git","clone_url":"https://github.com/leancloud/docs.git","svn_url":"https://github.com/leancloud/docs","homepage":"http://leancloud.cn/docs/","size":20479,"stargazers_count":37,"watchers_count":37,"language":"HTML","has_issues":true,"has_downloads":true,"has_wiki":false,"has_pages":false,"forks_count":35,"mirror_url":null,"open_issues_count":17,"forks":35,"open_issues":17,"watchers":37,"default_branch":"master"}},"_links":{"self":{"href":"https://api.github.com/repos/leancloud/docs/pulls/170"},"html":{"href":"https://github.com/leancloud/docs/pull/170"},"issue":{"href":"https://api.github.com/repos/leancloud/docs/issues/170"},"comments":{"href":"https://api.github.com/repos/leancloud/docs/issues/170/comments"},"review_comments":{"href":"https://api.github.com/repos/leancloud/docs/pulls/170/comments"},"review_comment":{"href":"https://api.github.com/repos/leancloud/docs/pulls/comments{/number}"},"commits":{"href":"https://api.github.com/repos/leancloud/docs/pulls/170/commits"},"statuses":{"href":"https://api.github.com/repos/leancloud/docs/statuses/a791743b6de7276f40800cc7e18ce53c999bfc07"}}}}