public async Task <string> GetReceipt(AndroidCheckinResponse credentials) { _logger?.LogDebug($"{nameof(GetReceipt)}"); var requestParams = GetRequestParams(credentials.AndroidId.ToString()); var content = new FormUrlEncodedContent(requestParams); var response = await "https://android.clients.google.com/c2dm/register3" .WithHeader("Authorization", $"AidLogin {credentials.AndroidId}:{credentials.SecurityToken}") .WithHeader("User-Agent", GcmUserAgent) .PostAsync(content) .ConfigureAwait(false); response.EnsureSuccessStatusCode(); var responseString = await response.Content.ReadAsStringAsync().ConfigureAwait(false); var result = responseString.Split(new[] { "|ID|2|:" }, StringSplitOptions.None)[1]; if (result == "PHONE_REGISTRATION_ERROR") { throw new InvalidOperationException($"{nameof(GetReceipt)} bad response: {result}\n{content}"); } return(result); }
private async Task <CheckinData> CheckIn(ulong androidId, ulong securityToken) { AndroidCheckinRequest request = new AndroidCheckinRequest() { UserSerialNumber = 0, Checkin = new AndroidCheckinProto() { Type = DeviceType.DeviceChromeBrowser, ChromeBuild = new ChromeBuildProto() { Platform = ChromeBuildProto.Types.Platform.Mac, ChromeVersion = "63.0.3234.0", Channel = ChromeBuildProto.Types.Channel.Stable }, }, Version = 3, Id = Convert.ToInt64(androidId), SecurityToken = securityToken }; using (var httpClient = new HttpClient()) using (var memoryStream = new MemoryStream()) { httpClient.DefaultRequestHeaders.Clear(); httpClient.DefaultRequestHeaders.ConnectionClose = true; request.WriteTo(memoryStream); memoryStream.Position = 0; StreamContent content = new StreamContent(memoryStream); content.Headers.ContentType = protobufContentType; HttpResponseMessage response = await httpClient.PostAsync(checkinUrl, content).ConfigureAwait(false); using (var responseStream = await response.Content.ReadAsStreamAsync().ConfigureAwait(false)) { AndroidCheckinResponse result = AndroidCheckinResponse.Parser.ParseFrom(responseStream); return(new CheckinData(result.AndroidId, result.SecurityToken)); } } }
public async Task <string> Register(AndroidCheckinResponse credentials) { var requestParams = GetRegisterRequestParams(RandomString.Generate(22), credentials.AndroidId.ToString()); var content = new FormUrlEncodedContent(requestParams); var httpRequestMessage = new HttpRequestMessage(HttpMethod.Post, "https://android.clients.google.com/c2dm/register3") { Content = content }; httpRequestMessage.Headers.TryAddWithoutValidation("Authorization", $"AidLogin {credentials.AndroidId}:{credentials.SecurityToken}"); var response = await _httpClient.SendAsync(httpRequestMessage).ConfigureAwait(false); response.EnsureSuccessStatusCode(); var registerResponse = await response.Content.ReadAsStringAsync().ConfigureAwait(false); return(registerResponse); }