This example shows how to use the 51Degrees Cloud service to lookup the details of a device based on a given 'native model name'. Native model name is a string of characters that are returned from a query to the device's OS. There are different mechanisms to get native model names for Android devices and iOS devices
using FiftyOne.Pipeline.CloudRequestEngine.FlowElements;
using FiftyOne.Pipeline.Core.FlowElements;
using Microsoft.Extensions.Logging;
using System;
using System.IO;
using System.Net.Http;
{
public class Program
{
public class Example
{
private const string _nativeModel1 = "SC-03L";
private const string _nativeModel2 = "iPhone11,8";
public void Run(string resourceKey, ILoggerFactory loggerFactory,
TextWriter output, string cloudEndPoint = "")
{
output.WriteLine("This example shows the details of devices " +
"associated with a given 'native model name'.");
output.WriteLine($"The native model name can be retrieved by " +
$"code running on the device (For example, a mobile app).");
output.WriteLine($"For Android devices, see " +
$"https://developer.android.com/reference/android/os/Build#MODEL");
output.WriteLine($"For iOS devices, see " +
$"https://gist.github.com/soapyigu/c99e1f45553070726f14c1bb0a54053b#file-machinename-swift");
output.WriteLine("----------------------------------------");
HttpClient httpClient = new HttpClient();
var cloudRequestEngineBuilder = new CloudRequestEngineBuilder(loggerFactory, httpClient)
.SetResourceKey(resourceKey);
if (string.IsNullOrWhiteSpace(cloudEndPoint) == false)
{
cloudRequestEngineBuilder.SetEndPoint(cloudEndPoint);
}
using (var cloudEngine = cloudRequestEngineBuilder.Build())
using (var propertyKeyedEngine = new HardwareProfileCloudEngineBuilder(loggerFactory)
.Build())
using (var pipeline = new PipelineBuilder(loggerFactory)
.AddFlowElement(cloudEngine)
.AddFlowElement(propertyKeyedEngine)
.Build())
{
AnalyseNativeModel(_nativeModel1, pipeline, output);
AnalyseNativeModel(_nativeModel2, pipeline, output);
}
}
static void AnalyseNativeModel(string nativemodel, IPipeline pipeline, TextWriter output)
{
using (var data = pipeline.CreateFlowData())
{
data.AddEvidence(Shared.Constants.EVIDENCE_QUERY_NATIVE_MODEL_KEY, nativemodel);
data.Process();
var result = data.Get<MultiDeviceDataCloud>();
output.WriteLine($"Which devices are associated with the " +
$"native model name '{nativemodel}'?");
foreach (var device in result.Profiles)
{
var vendor = device.HardwareVendor.GetHumanReadable();
var name = device.HardwareName.GetHumanReadable();
var model = device.HardwareModel.GetHumanReadable();
output.WriteLine($"\t{vendor} {name} ({model})");
}
}
}
}
static void Main(string[] args)
{
string resourceKey = args.Length > 0 ? args[0] :
Environment.GetEnvironmentVariable(
ExampleUtils.CLOUD_RESOURCE_KEY_ENV_VAR);
var loggerFactory = LoggerFactory.Create(b => b.AddConsole());
var logger = loggerFactory.CreateLogger<Program>();
if (string.IsNullOrEmpty(resourceKey))
{
logger.LogError($"No resource key specified on the command line or in the " +
$"environment variable '{ExampleUtils.CLOUD_RESOURCE_KEY_ENV_VAR}'. " +
$"The 51Degrees cloud service is accessed using a 'ResourceKey'. " +
$"For more information " +
$"see https://51degrees.com/documentation/_info__resource_keys.html. " +
$"Native model lookup is not available as a free service. This means that " +
$"you will first need a license key, which can be purchased from our " +
$"pricing page: https://51degrees.com/pricing. Once this is done, a resource " +
$"key with the properties required by this example can be created at " +
$"https://configure.51degrees.com/QKyYH5XT. You can now populate the " +
$"environment variable mentioned at the start of this message with the " +
$"resource key or pass it as the first argument on the command line.");
}
else
{
new Example().Run(resourceKey, loggerFactory, Console.Out);
}
loggerFactory.Dispose();
}
}
}