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
<?php
require_once(__DIR__ . "/exampleUtils.php");
require_once(__DIR__ . "/../../vendor/autoload.php");
{
public function run($resourceKey, $logger, callable $output, $cloudEndPoint = "")
{
$output("This example shows the details of devices " .
"associated with a given 'native model name'.");
$output("The native model name can be retrieved by " .
"code running on the device (For example, a mobile app).");
$output("For Android devices, see " .
"https://developer.android.com/reference/android/os/Build#MODEL");
$output("For iOS devices, see " .
"https://gist.github.com/soapyigu/c99e1f45553070726f14c1bb0a54053b#file-machinename-swift");
$output("----------------------------------------");
$cloudRequestEngineSettings = array("resourceKey" => $resourceKey);
if (!empty($cloudEndPoint))
{
$cloudRequestEngineSettings["cloudEndpoint"] = $cloudEndPoint;
}
$cloudEngine = new CloudRequestEngine($cloudRequestEngineSettings);
$propertyKeyedEngine = new HardwareProfileCloud();
$pipeline = (new PipelineBuilder())
->addLogger($logger)
->add($cloudEngine)
->add($propertyKeyedEngine)
->build();
$this->analyseModel($this->nativeModel1, $pipeline, $output);
$this->analyseModel($this->nativeModel2, $pipeline, $output);
}
private function analyseModel($nativemodel, $pipeline, callable $output)
{
$data = $pipeline->createFlowData();
$data->evidence->set(CloudConstants::EVIDENCE_QUERY_NATIVE_MODEL_KEY, $nativemodel);
$data->process();
$result = $data->hardware;
$output("Which devices are associated with the " .
"native model name '".$nativemodel."'?");
forEach($result->profiles as $profile) {
$vendor = ExampleUtils::getHumanReadable($profile, "hardwarevendor");
$name = ExampleUtils::getHumanReadable($profile, "hardwarename");
$model = ExampleUtils::getHumanReadable($profile, "hardwaremodel");
$output("\t".$vendor." ".$name." (".$model.")");
}
}
private $nativeModel1 = "SC-03L";
private $nativeModel2 = "iPhone11,8";
}
if (basename(__FILE__) == basename($_SERVER["SCRIPT_FILENAME"]))
{
function main($argv)
{
$resourceKey = isset($argv) && count($argv) > 0 ? $argv[0] : ExampleUtils::getResourceKey();
$logger = new Logger("info");
if (empty($resourceKey) == false)
{
}
else
{
$logger->log("error",
"No resource key specified on the command line or in the " .
"environment variable '".ExampleUtils::RESOURCE_KEY_ENV_VAR."'. " .
"The 51Degrees cloud service is accessed using a 'ResourceKey'. " .
"For more information " .
"see http://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: http://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.");
}
}
main(isset($argv) ? array_slice($argv, 1) : null);
}