<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Sherlock</title>
    <description>The latest articles on DEV Community by Sherlock (@sherloc78676146).</description>
    <link>https://dev.to/sherloc78676146</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F425079%2F47c253e3-3788-4626-9b10-22f9de2ca18b.jpg</url>
      <title>DEV Community: Sherlock</title>
      <link>https://dev.to/sherloc78676146</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/sherloc78676146"/>
    <language>en</language>
    <item>
      <title>Grow your app business to new levels with AppGallery Connect</title>
      <dc:creator>Sherlock</dc:creator>
      <pubDate>Fri, 26 Mar 2021 08:27:09 +0000</pubDate>
      <link>https://dev.to/sherloc78676146/grow-your-app-business-to-new-levels-with-appgallery-connect-3j16</link>
      <guid>https://dev.to/sherloc78676146/grow-your-app-business-to-new-levels-with-appgallery-connect-3j16</guid>
      <description>&lt;p&gt;The success of an app is not just dependent on the value it offers users, but also how efficiently it reaches them. HUAWEI AppGallery Connect app service platform is designed to help app developers improve development and operations efficiency, attract a wider range of users and generates greater revenue, by offering end-to-end services at every step along the way, from app innovation and development, to distribution, operations, and analysis, with support for a broad range of devices.&lt;/p&gt;

&lt;p&gt;App developers share a number of common challenges when releasing an app. For example, how to acquire most users? How to reach target users with optimal precision? How to improve monetization while continuing to acquire users? All of these challenges, and many others, are addressed at the &lt;strong&gt;AppGallery Connect Academy · Live&lt;/strong&gt; event, offering actionable insights on how to grow your app business to new levels.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Partner with AppGallery Connect to grow your business, by harnessing global app distribution and broad-based device support.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;As a top-3 global app marketplace, HUAWEI AppGallery provides access to a wide variety of both global and locally-oriented apps across 18 app categories and has attracted over 530 million MAU in 170+ countries and regions by the end of 2020.&lt;/p&gt;

&lt;p&gt;In order to continuously provide quality and safe app experience for users, AppGallery has launched AppGallery Connect, a one-stop app service platform that empowers developers' app creativity and business growth. As of the end of 2020, AppGallery Connect had already partnered with 2.3 million developers across the globe, facilitating 384 billion app distributions on AppGallery in 2020 alone.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;A/B Testing: Conduct group experiments to determine the best variant for your app.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;A/B Testing enables you to make informed operations decisions based on specific data. It conducts group experiments to determine user preferences related to UI design, written content, and product functions. A/B Testing does not directly boost user activity, but its experiment results help you determine user preferences, and improve indicators such as DAU and MAU.&lt;/p&gt;

&lt;p&gt;In one notable example, an app team split users into two groups to determine whether a new function could facilitate user engagement. This function was only made available to one group. Two weeks later, the daily active duration of users in the treatment group was half an hour longer than that for users in the control group. In light of this, the team ultimately decided to release the function, and was proven correct, as the daily user activity duration rose by 15%.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Remote Configuration: Change how your app looks and works, without requiring users to update the app.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sleep Sounds is an app that provides lullabies and natural white noise to help users fall asleep with greater ease. The Sleep Sounds team utilized AppGallery Connect Remote Configuration to make changes to their app, while also avoiding the need to release a new version. The team simply made changes on the cloud, and the changes took effect on the app side. This enabled Sleep Sounds to make targeted recommendations to users based on their local market, age, gender, and other attributes, upon obtaining the user's consent. Just two weeks into using the service, Sleep Sounds saw an 8% increase in its number of users, and a 10% increase in user engagement.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;App Linking: Provide a consistent link access across platforms and versions, for higher conversion rates.&lt;/strong&gt;&lt;br&gt;
App Linking helps you create deep links for in-app content, and display them across a wide range of channels, including those on social media. By tapping a link, the user can directly access the in-app content. Those users who have not installed the app will be redirected to HUAWEI AppGallery for download and installation.&lt;/p&gt;

&lt;p&gt;For example, if you are planning a promotion in your app, App Linking can help you place the promotional link on a diverse range of ad platforms. Existing users can then launch the app and open the specific page with just a tap; new users will be redirected to AppGallery to download and install the app, and then to the specific promotional page upon launching the app.&lt;/p&gt;

&lt;p&gt;Linking premium in-app content enables you to convert mobile web users into native app users, which provides a way to grow your user base. App Linking also supports tracing parameters, which means that you can view data analysis and trace traffic sources across different channels.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;App Messaging: Send contextual messages to engage users.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;With the Call Screen app, users can choose from a range of customized incoming call skins, some of which have visual alerts to ensure that important calls aren't missed. But the developer found that some of the new skins they had released were not being downloaded by very many users, and reviews of the skin were mixed. To address this, the developer used the App Messaging service in AppGallery Connect to notify users of new available skins, after obtaining their consent. Now, when a user signs in, Call Screen provides them with skin recommendations based on their preferences. The service helped increase the number of app users by 11% in just three weeks.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;AppGallery Connect Academy · Live: We Connect, You Grow&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you'd like to learn more about the operations and growth services in AppGallery Connect, you simply can't miss AppGallery Connect Academy · Live held from 11:00 UTC+02:00 on March 31, 2021. This event will walk you through how to harness AppGallery's global distribution capabilities to grow your user base, and how to better monetize your app by using AppGallery Connect's operations services to target and activate users. These services, and many others, can help your app stand out from the competition.&lt;/p&gt;

&lt;p&gt;Any doubts about this LIVE, &lt;strong&gt;&lt;a href="https://forums.developer.huawei.com/forumPortal/en/topic/0201521280799110078"&gt;click here to leave your reply&lt;/a&gt;&lt;/strong&gt;. &lt;br&gt;
We'll answer some questions during the FAQs session.&lt;/p&gt;

</description>
    </item>
    <item>
      <title> [Invitation] Grow your user base and revenue with AppGallery Connect Academy · Live</title>
      <dc:creator>Sherlock</dc:creator>
      <pubDate>Thu, 25 Mar 2021 02:01:40 +0000</pubDate>
      <link>https://dev.to/sherloc78676146/invitation-grow-your-user-base-and-revenue-with-appgallery-connect-academy-live-2oml</link>
      <guid>https://dev.to/sherloc78676146/invitation-grow-your-user-base-and-revenue-with-appgallery-connect-academy-live-2oml</guid>
      <description>&lt;p&gt;Dear developer&lt;br&gt;
As a mobile app developer, you must be fully aware of how important app distributions, targeted operations, and monetization are in cultivating a strong user base. But this can be difficult to achieve in practice. That's why HUAWEI AppGallery Connect has decided to host AppGallery Connect Academy · Live. This unique live event focuses on the growth services in AppGallery Connect that can help you acquire new users and grow your business to new levels. This AppGallery Connect Academy · Live is an event that should never be missed by developers who intend to distribute apps on AppGallery.&lt;/p&gt;

&lt;p&gt;Live content: This event can give you crucial insights into how to grow your business, by harnessing the global app distribution capabilities on HUAWEI AppGallery, which cover a wide range of device models.&lt;/p&gt;

&lt;p&gt;You can also learn from illuminating case studies on how AppGallery Connect's operations and growth services have been a game changer. The following FAQs session will address the most relevant challenges you may face when using the services.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Time:&lt;/strong&gt; March 31st, 2021 11:00-11:45 UTC+2&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Duration:&lt;/strong&gt; Around 45 minutes&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Target audience:&lt;/strong&gt; Developers who are eager to increase their apps users and revenue.&lt;/p&gt;

&lt;p&gt;Click here to subscribe on &lt;strong&gt;&lt;a href="https://m.youtube.com/watch?v=Da2K4otTyec&amp;amp;list=PLy7rmPPfUv3a7hFThXofcMhkjG8VKLiZH&amp;amp;index=21"&gt;YouTube&lt;/a&gt;:&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;If you have any questions, please leave your reply below the post or send us an email via &lt;a href="https://forums.developer.huawei.com/forumPortal/en/topic/0201518690567230063"&gt;agconnect@huawei.com&lt;/a&gt;. We'll answer some questions during the FAQs session.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>Using Huawei Map Kit on Flutter Applications</title>
      <dc:creator>Sherlock</dc:creator>
      <pubDate>Tue, 20 Oct 2020 02:12:32 +0000</pubDate>
      <link>https://dev.to/sherloc78676146/using-huawei-map-kit-on-flutter-applications-2ai</link>
      <guid>https://dev.to/sherloc78676146/using-huawei-map-kit-on-flutter-applications-2ai</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Flutter is a mobile application development kit for crafting high-quality native experiences on iOS and Android platforms in record time. Even though Flutter is enough to build great mobile apps, interactivity, such as map integration, is needed in order to increase the user experience.&lt;/p&gt;

&lt;h2&gt;
  
  
  Huawei Map Kit
&lt;/h2&gt;

&lt;p&gt;&lt;strong&gt;Huawei Map Kit&lt;/strong&gt; is a development kit and map service developed by Huawei to easily integrate map-based functions into your apps. The kit currently covers map data of more than &lt;strong&gt;200 countries and regions&lt;/strong&gt;, supports &lt;strong&gt;40+ languages&lt;/strong&gt;, provides UI elements such as &lt;strong&gt;markers, shapes&lt;/strong&gt;, and &lt;strong&gt;layers&lt;/strong&gt; to customize your map, and also enables users to interact with the map in your app through gestures and buttons in different scenarios.&lt;/p&gt;

&lt;p&gt;With the recently released &lt;strong&gt;Huawei Map Kit Flutter Plugin&lt;/strong&gt;, Huawei developers now can use these features and integrate map-based functions to their Flutter projects. Hence, in this article, to explore the kit and Huawei Services, we will try to build a mobile app featuring Huawei Map using the plugin and Flutter SDK.&lt;/p&gt;

&lt;p&gt;HMS Core Github:&lt;br&gt;
&lt;a href="https://github.com/HMS-Core/hms-flutter-plugin/tree/master/flutter-hms-map"&gt;https://github.com/HMS-Core/hms-flutter-plugin/tree/master/flutter-hms-map&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Required Configurations
&lt;/h2&gt;

&lt;p&gt;Before we get started, to use Huawei Map Kit, and also other Huawei Mobile Services, you should be a &lt;strong&gt;Huawei Developer Account&lt;/strong&gt; holder. For more detailed information on Developer Accounts and how to apply for them, please refer to &lt;a href="https://developer.huawei.com/consumer/en/doc/10104"&gt;this link&lt;/a&gt;.&lt;/p&gt;
&lt;h2&gt;
  
  
  Creating an App
&lt;/h2&gt;

&lt;p&gt;· Sign in to &lt;a href="https://developer.huawei.com/consumer/en/service/josp/agc/index.html"&gt;AppGallery Connect&lt;/a&gt; using your Huawei ID and create a new project to work with, by clicking &lt;strong&gt;My projects&amp;gt;Add Project&lt;/strong&gt; button.&lt;br&gt;
· Click &lt;strong&gt;Add App&lt;/strong&gt; button to add a new application to your project by filling the required fields such as name, category, and default language.&lt;br&gt;
· Map Kit APIs of your app is &lt;strong&gt;enabled&lt;/strong&gt; by default, but just to be sure, you can check it from the Manage APIs tab of your project on AppGallery Connect. You can also refer to &lt;a href="https://developer.huawei.com/consumer/en/doc/distribution/app/agc-enable_service"&gt;Enabling Services&lt;/a&gt; article if you need any help.&lt;br&gt;
· Open your Android Studio and create a Flutter application. The &lt;strong&gt;package name&lt;/strong&gt; of your Flutter application should be the same with the package name of your app which you created on AppGallery Connect.&lt;br&gt;
· Android requires a &lt;strong&gt;Signing Certificate&lt;/strong&gt; to verify the authenticity of apps. Thus, you need to generate a Signing Certificate for your app. If you don’t know how to generate a Signing Certificate please click here for related article. Copy your generated Keystore file to your &lt;strong&gt;android/app&lt;/strong&gt; directory of your project.&lt;/p&gt;

&lt;p&gt;A side note: Flutter project structure have folders, such as &lt;strong&gt;ios&lt;/strong&gt; and &lt;strong&gt;android&lt;/strong&gt; folders, which belongs to different platforms, by nature, yet Android Studio treats them as a Flutter project folders and throws errors on these files. For this reason, before changing anything related to Android platform, you should right click to your android folder on your project directory and select &lt;strong&gt;Flutter &amp;gt; Open Android module in Android Studio&lt;/strong&gt;. You can easily modify the files and also generate Signing Certificates from the Android Studio window that opened after selection.&lt;/p&gt;

&lt;p&gt;· After generating your Signing Certificate (Keystore) you should extract &lt;strong&gt;SHA-256 fingerprint&lt;/strong&gt; using keytool, which provided by JDK, and add to the AppGallery Connect by navigating to the &lt;strong&gt;App Information&lt;/strong&gt; section of your app. You may also refer to Generating Fingerprint from a Keystore and &lt;a href="https://login.huawei.com/login/?redirect=http%3A%2F%2Fw3.huawei.com%2Fnext%2Findex.html"&gt;Add Fingerprint certificate to AppGallery Connect&lt;/a&gt; articles for further help.&lt;/p&gt;
&lt;h2&gt;
  
  
  Integrating HMS and Map Plugin to Your Flutter Project
&lt;/h2&gt;

&lt;p&gt;You also need to configure your Flutter application in order to communicate with Huawei to use Map Kit.&lt;br&gt;
· Add the Huawei Map Kit Flutter Plugin as a dependency to your project’s &lt;strong&gt;pubspec.yaml&lt;/strong&gt; file and run &lt;strong&gt;flutter pub get&lt;/strong&gt; command to integrate Map Plugin to your project.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;dependencies:
  flutter:
    sdk: flutter
  huawei_map: ^4.0.4+300
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;· Download the &lt;strong&gt;agconnect-services.json&lt;/strong&gt; file from the &lt;strong&gt;App Information&lt;/strong&gt; section of the AppGallery Connect and copy it to your &lt;strong&gt;android/app&lt;/strong&gt; directory of your project.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s---DYj2wPR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rrvzxcwmq73e836kbnnn.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s---DYj2wPR--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/rrvzxcwmq73e836kbnnn.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Your project’s android directory should look like this after adding both agconnect-services.json and keystore file.&lt;/p&gt;

&lt;p&gt;· Add the Maven repository address and AppGallery Connect plugin to the project level build.gradle (android/build.gradle) file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;buildscript {
    repositories {
        //other repositories       
        maven { url 'https://developer.huawei.com/repo/' }
    }
    dependencies {
        //other dependencies       
        classpath 'com.huawei.agconnect:agcp:1.2.1.301'   
    }
}
allprojects {
    repositories {
        //other repositories       
        maven { url 'https://developer.huawei.com/repo/' }
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;· Open your app level build.gradle (android/app/build.gradle) file and add the AppGallery Connect plugin.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  apply plugin: 'com.android.application'
apply plugin: 'com.huawei.agconnect'  //Added Line
apply plugin: 'kotlin-android'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;· In the same file (android/app/build.gradle), add the signing configurations, and change the minSdkVersion of your project as shown below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; android {   
   /*    
    * Other configurations    
    */
  defaultConfig {
        applicationId "&amp;lt;package_name&amp;gt;" //Your unique package name
        minSdkVersion 19  //Change minSdkVersion to 19
        targetSdkVersion 28
        versionCode flutterVersionCode.toInteger()
        versionName flutterVersionName
    }
   signingConfigs {      
       config{           
           storeFile file('&amp;lt;keystore_file&amp;gt;')           
           storePassword '&amp;lt;keystore_password&amp;gt;'           
           keyAlias '&amp;lt;key_alias&amp;gt;'           
           keyPassword '&amp;lt;key_password&amp;gt;'       
       }   
   }  

   buildTypes {       
       debug {           
           signingConfig signingConfigs.config
       }      
       release {           
           signingConfig signingConfigs.config
       }   
    }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;· Finally, to call capabilities of Huawei Map Kit, apply for the following permissions for your app in your AndroidManifest.xml file.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;uses-permission android:name="android.permission.INTERNET"/&amp;gt;
&amp;lt;uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"/&amp;gt;
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;— To obtain the current device location following permissions are also needed to be declared in your AndroidManifest.xml file (on Android 6.0 and later versions, you need to apply for these permissions dynamically). But we won’t use the current location in our app, this step is optional.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;&amp;lt;uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"/&amp;gt;
&amp;lt;uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"/&amp;gt;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Using Huawei Map Kit Flutter Plugin
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Creating a Map
&lt;/h3&gt;

&lt;p&gt;Now that we are ready to use Huawei’s Map features, let’s implement a simple map.&lt;/p&gt;

&lt;p&gt;Huawei Map Kit Flutter Plugin provides a single widget, called HuaweiMap, for developers to easily create and manage map fragments. By using this widget, developers can enable or disable attributes or gestures of a map, set initial markers, circles, or other shapes, decide the map type, and also set an initial camera position to focus an area when the map is ready.&lt;/p&gt;

&lt;p&gt;Let’s choose a random location from İstanbul as an initial camera position. While declaring the initial camera position, the zoom level, which indicates the value of magnification, and target, which indicates the latitude and longitude of the location, is required. You can find my target coordinates and zoom level below, which we will use while creating our map.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;static const LatLng _center = const LatLng(41.027470, 28.999339);
static const double _zoom = 12;

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Since now we have an initial position, we should implement the map itself. We will first create a simple Scaffold and set a simple AppBar, then create a HuaweiMap object as a Scaffold’s body. HuaweiMap object, as mentioned before, has different attributes which you can see below. The following code will create a HuaweiMap object that is full-screen, scrollable, tiltable, and also shows the buildings or traffic.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() =&amp;gt; _HomeScreenState();
}

class _HomeScreenState extends State&amp;lt;HomeScreen&amp;gt; {

  static const LatLng _center = const LatLng(41.027470, 28.999339);
  static const double _zoom = 12;

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: AppBar(
        title: Text("Map Demo"),
        centerTitle: true,
        backgroundColor: Colors.red,
      ),
      body: HuaweiMap(
        initialCameraPosition: CameraPosition(
          target: _center,
          zoom: _zoom,
        ),
        mapType: MapType.normal,
        tiltGesturesEnabled: true,
        buildingsEnabled: true,
        compassEnabled: true,
        zoomControlsEnabled: false,
        rotateGesturesEnabled: true,
        myLocationButtonEnabled: false,
        myLocationEnabled: false,
        trafficEnabled: true,
      ),
    );
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Considering creating a ‘clean’ map, I disabled myLocationEnabled, myLocationButtonEnabled and zoomControlsEnabled attributes of the map, but do not forget to explore these attributes by trying yourself since they are great to boost your user experience of your app.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--HHF0TOZy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/be9rb3iuldsaykf7xa09.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--HHF0TOZy--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/be9rb3iuldsaykf7xa09.jpeg" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Resizing the Map
&lt;/h3&gt;

&lt;p&gt;A full-screen map is not always useful in some scenarios, thus, since HuaweiMap is a standalone widget, we can resize the map by wrapping it to Container or ConstrainedBox widgets.&lt;/p&gt;

&lt;p&gt;For this project, I will create a layout in Scaffold by using Expanded, Column, and Container widgets. The following code shows a HuaweiMap widget which fills only one-third of a screen.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() =&amp;gt; _HomeScreenState();
}

class _HomeScreenState extends State&amp;lt;HomeScreen&amp;gt; {

  static const LatLng _center = const LatLng(41.027470, 28.999339);
  static const double _zoom = 12;

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: AppBar(
        title: Text("Locations"),
        centerTitle: true,
        backgroundColor: Colors.red,
      ),
      body: Column(
        children: [
          Expanded(
            child: Padding(
              padding: EdgeInsets.all(8),
              child: Container(
                decoration: BoxDecoration(
                    border: Border.all(color: Colors.green, width: 2)),
                child: HuaweiMap(
                  initialCameraPosition: CameraPosition(
                    target: _center,
                    zoom: _zoom,
                  ),
                  mapType: MapType.normal,
                  tiltGesturesEnabled: true,
                  buildingsEnabled: true,
                  compassEnabled: true,
                  zoomControlsEnabled: false,
                  rotateGesturesEnabled: true,
                  myLocationButtonEnabled: false,
                  myLocationEnabled: false,
                  trafficEnabled: true,
                ),
              ),
            ),
          ),
          Expanded(flex: 2, child: Container()),
        ],
      ),
    );
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Adding Interactivity by Using Markers and CameraUpdate
&lt;/h3&gt;

&lt;p&gt;Let’s assume that we are building an app that shows different restaurant locations as markers on our HuaweiMap object. To do this, we will set some initial markers to our map using HuaweiMap widget’s markers field.&lt;/p&gt;

&lt;p&gt;Markers field of the widget takes a Set of markers, hence we should first create a set of Marker objects. Then use them as initial markers for our HuaweiMap widget.&lt;/p&gt;

&lt;p&gt;As you know, the two-third of our screen is empty, to fill the space we will create some Card widgets that hold the location’s name, motto, and address as a String. To reduce the redundant code blocks, I create a separate widget, called LocationCard, which returns a styled custom Card widget. To not lose the scope of this article, I will not share the steps of how to create a custom card widget but you may find its code from the project’s &lt;a href="https://github.com/SerdarCanDev/FlutterHuaweiMapTutorial/blob/master/lib/locationCard.dart"&gt;GitHub&lt;/a&gt; link.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;class HomeScreen extends StatefulWidget {
  @override
  _HomeScreenState createState() =&amp;gt; _HomeScreenState();
}

class _HomeScreenState extends State&amp;lt;HomeScreen&amp;gt; {

  static const LatLng _center = const LatLng(41.027470, 28.999339);
  static const double _zoom = 12;

  //Marker locations
  static const LatLng _location1 = const LatLng(41.0329109, 28.9840904);
  static const LatLng _location2 = const LatLng(41.0155957, 28.9827176);
  static const LatLng _location3 = const LatLng(41.0217315, 29.0111898);

  //Set of markers
  Set&amp;lt;Marker&amp;gt; _markers = {
    Marker(markerId: MarkerId("Location1"), position: _location1),
    Marker(markerId: MarkerId("Location2"), position: _location2),
    Marker(markerId: MarkerId("Location3"), position: _location3),
  };

  @override
  Widget build(BuildContext context) {
    return new Scaffold(
      appBar: AppBar(
        title: Text("Locations"),
        centerTitle: true,
        backgroundColor: Colors.red,
      ),
      body: Column(
        children: [
          Expanded(
            child: Padding(
              padding: EdgeInsets.all(8),
              child: Container(
                decoration: BoxDecoration(
                    border: Border.all(color: Colors.green, width: 2)),
                child: HuaweiMap(
                  initialCameraPosition: CameraPosition(
                    target: _center,
                    zoom: _zoom,
                  ),
                  mapType: MapType.normal,
                  tiltGesturesEnabled: true,
                  buildingsEnabled: true,
                  compassEnabled: true,
                  zoomControlsEnabled: false,
                  rotateGesturesEnabled: true,
                  myLocationButtonEnabled: false,
                  myLocationEnabled: false,
                  trafficEnabled: true,
                  markers: _markers, //Using the set
                ),
              ),
            ),
          ),
          //Styled Card widgets
          Expanded(flex: 2, child: Padding(
                  padding: EdgeInsets.all(8),
                  child: SingleChildScrollView(
                    child: Column(
                      children: [
                        LocationCard(
                          title: "Location 1",
                          motto: "A Fine Dining Restaurant",
                          address:
                              "Avrupa Yakası, Cihangir, 34433 Beyoğlu/İstanbul Türkiye",
                        ),
                        LocationCard(
                          title: "Location 2",
                          motto: "A Restaurant with an Extraordinary View",
                          address:
                              "Avrupa Yakası, Hoca Paşa, 34110 Fatih/İstanbul Türkiye",
                        ),
                        LocationCard(
                              title: "Location 3",
                              motto: "A Casual Dining Restaurant",
                              address:
                                  "Anadolu Yakası, Aziz Mahmut Hüdayi, 34672 Üsküdar/İstanbul Türkiye",
                            )
                      ],
                    ),
                  ),),
          )],
      ),
    );
  }
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Now we have some custom cards beneath the map object which also has some initial markers. We will use these custom cards as a button to zoom in the desired marker with a smooth camera animation. To do so, users can easily tab a card to see the zoomed-in location on a Huawei map and explore the surrounding without leaving the page.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--BK_DzDMv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4twvypztg3o5zv1gztp4.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--BK_DzDMv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/4twvypztg3o5zv1gztp4.jpg" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Resized Map with Location Cards&lt;/p&gt;

&lt;p&gt;Before turning cards into a button we should first set a &lt;strong&gt;HuaweiMapController&lt;/strong&gt; object in order to provide a controller for &lt;strong&gt;HuaweiMap&lt;/strong&gt;, then use this controller on &lt;strong&gt;HuaweiMap&lt;/strong&gt; widgets &lt;strong&gt;onMapCreated&lt;/strong&gt; field to pair map and its controller. Below, I created a controller, and with the help of a simple function, use it in our &lt;strong&gt;HuaweiMap&lt;/strong&gt; object.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt; HuaweiMapController mapController;

  void _onMapCreated(HuaweiMapController controller) {
    mapController = controller;
  }

/*
  This section only shows the added line. Remaining code is not changed.
*/
                child: HuaweiMap(
                  initialCameraPosition: CameraPosition(
                    target: _center,
                    zoom: _zoom,
                  ),
                  onMapCreated: _onMapCreated, // Added Line
                  mapType: MapType.normal,
                  tiltGesturesEnabled: true,

/*
  Rest of the code
*/
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;We now have a controller for non-user camera moves, so let’s use the controller. I wrapped the LocationCards with InkWell widget to provide an onTap functionality. There are several useful methods in plugins &lt;strong&gt;CameraUpdate&lt;/strong&gt; class which enables us to zoom in, zoom out, or change camera position. We will use the &lt;strong&gt;newLatLngZoom&lt;/strong&gt; method to zoom in the stated location then, by using the controller and &lt;strong&gt;animateCamera&lt;/strong&gt; method, we will animate the camera move to our new camera location. You can find the wrapped LocationCard with the &lt;strong&gt;CameraUpdate&lt;/strong&gt; and controller.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;InkWell(
     onTap: () {
       CameraUpdate cameraUpdate =
           CameraUpdate.newLatLngZoom(
               _location1, _zoomMarker);
       mapController.animateCamera(cameraUpdate);
     },
     child: LocationCard(
       title: "Location 1",
       motto: "A Fine Dining Restaurant",
       address:
           "Avrupa Yakası, Cihangir, 34433 Beyoğlu/İstanbul Türkiye",
     )),
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;The used _zoomMarker variable is a constant double and has a value of 18. Also, the used _location1 variable is the variable we set while creating our markers.&lt;/p&gt;

&lt;p&gt;After implementing these steps, tap a card and you will see a smooth camera move animation with the change of zoom level in your &lt;strong&gt;HuaweiMap&lt;/strong&gt; widget. Voila! 🎉&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--PtfmhvaM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/udcqwqleuu6kc77cc81c.gif" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--PtfmhvaM--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_66%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/udcqwqleuu6kc77cc81c.gif" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;As I mentioned before, you can also set some circles, polylines, or polygons similar to the markers. Furthermore, you can add some on-click actions both to your map and shapes or markers you set. Do not forget to explore other functionalities that Huawei Map Kit Flutter Plugin offers.&lt;/p&gt;

&lt;p&gt;I am leaving the project’s GitHub link in case you want to check or try this example by yourself. You may also find LocationCard’s code and other minor adjustments that I made, from the link.&lt;br&gt;
&lt;a href="https://github.com/SerdarCanDev/FlutterHuaweiMapTutorial"&gt;https://github.com/SerdarCanDev/FlutterHuaweiMapTutorial&lt;/a&gt;&lt;/p&gt;

&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;Since Huawei created its own services, the demand for support to cross-platform frameworks such as Flutter, React Native, Cordova or Xamarin, is increased. To meet these demands Huawei continuously releasing plugins and updates in order to support its developers. We already learned how to use Huawei’s Map Kit in our Flutter projects, yet there are several more official plugins for Huawei Services to explore.&lt;/p&gt;

&lt;p&gt;For further reading, I will provide some links in the “References and Further Reading” section including an article which showcases another service. You may also ask any question related to this article in the comments section.&lt;br&gt;
&lt;a href="https://developer.huawei.com/consumer/en/hms/huawei-MapKit"&gt;https://developer.huawei.com/consumer/en/hms/huawei-MapKit&lt;/a&gt;&lt;br&gt;
&lt;a href="https://pub.dev/publishers/developer.huawei.com/packages"&gt;https://pub.dev/publishers/developer.huawei.com/packages&lt;/a&gt;&lt;br&gt;
Sending Push Notifications on Flutter with Huawei Push Kit Plugin：&lt;br&gt;
&lt;a href="https://medium.com/huawei-developers/sending-push-notifications-on-flutter-with-huawei-push-kit-plugin-534787862b4d"&gt;https://medium.com/huawei-developers/sending-push-notifications-on-flutter-with-huawei-push-kit-plugin-534787862b4d&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;For more details, you can go to:&lt;br&gt;
l official website:&lt;a href="https://developer.huawei.com/consumer/en/hms"&gt;https://developer.huawei.com/consumer/en/hms&lt;/a&gt;&lt;br&gt;
l Documentation page:&lt;a href="https://developer.huawei.com/consumer/en/doc/development"&gt;https://developer.huawei.com/consumer/en/doc/development&lt;/a&gt;&lt;br&gt;
l Reddit to join our developer discussion: &lt;a href="https://www.reddit.com/r/HMSCore/"&gt;https://www.reddit.com/r/HMSCore/&lt;/a&gt;&lt;br&gt;
l GitHub：&lt;a href="https://github.com/HMS-Core"&gt;https://github.com/HMS-Core&lt;/a&gt;&lt;br&gt;
l Stack Overflow：&lt;a href="https://stackoverflow.com/questions/tagged/huawei-mobile-services"&gt;https://stackoverflow.com/questions/tagged/huawei-mobile-services&lt;/a&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>opensource</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>How to use React Native Push Plugin?</title>
      <dc:creator>Sherlock</dc:creator>
      <pubDate>Mon, 19 Oct 2020 11:51:15 +0000</pubDate>
      <link>https://dev.to/sherloc78676146/how-to-use-react-native-push-plugin-4e68</link>
      <guid>https://dev.to/sherloc78676146/how-to-use-react-native-push-plugin-4e68</guid>
      <description>&lt;h2&gt;
  
  
  Introduction
&lt;/h2&gt;

&lt;p&gt;Mobile push notifications are notification messages sent by a server to mobile application users. Implementing push notifications has many benefits, such as improving user engagement by informing users about new special offers, products and services, increasing app retention rates of inactive users, tracking user behavior with A/B tests, and more.&lt;/p&gt;

&lt;p&gt;Huawei push plugin for React Native enables developers to use Android HMS push kit in React Native applications. The publishers can push the notifications by using Huawei developer console or posting HTTP requests to Huawei push kit, which will send the notifications to the app users accordingly. The diagram below depicts the workflow of Huawei push kit.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--aR810doT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/zzlyyz3j6915023j59p9.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--aR810doT--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/zzlyyz3j6915023j59p9.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Push Plugin Workflow&lt;br&gt;
In this article, I’ll illustrate how to create your project in the Huawei developer console, integrate the plugin, and use it.&lt;/p&gt;
&lt;h2&gt;
  
  
  Creating Your Project in Huawei Developer Console
&lt;/h2&gt;
&lt;h3&gt;
  
  
  Registering a Huawei ID
&lt;/h3&gt;

&lt;p&gt;You need to register a Huawei ID to use the plugin. If you don’t have one, follow the instructions here.&lt;/p&gt;
&lt;h3&gt;
  
  
  Creating a Huawei App
&lt;/h3&gt;

&lt;p&gt;To create a Huawei App, visit the developer console and authenticate your Huawei ID. Follow the instructions in this tutorial to create an application.&lt;/p&gt;
&lt;h3&gt;
  
  
  Generating a Signing Certificate Fingerprint
&lt;/h3&gt;

&lt;p&gt;Signing certificate fingerprint is required to authenticate your app to Huawei mobile services. Make sure JDK is installed. To create one, go to JDK directory’s bin folder and open a terminal in this directory. Execute the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;keytool -genkey -keystore &amp;lt;application_project_dir&amp;gt;\android\app\&amp;lt;signing_certificate_fingerprint_filename&amp;gt;.jks -storepass &amp;lt;store_password&amp;gt; -alias &amp;lt;alias&amp;gt; -keypass &amp;lt;key_password&amp;gt; -keysize 2048 -keyalg RSA -validity 36500
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;This command creates the keystore file in &lt;strong&gt;application_project_dir/android/app&lt;/strong&gt; with the configurations you’ve typed in &amp;lt;…&amp;gt;.&lt;/p&gt;

&lt;h2&gt;
  
  
  Adding SHA256 Key to the Huawei Project in App Gallery
&lt;/h2&gt;

&lt;p&gt;The next step is obtaining the SHA256, which is needed for authenticating your app to Huawei services, for the keystore file. To obtain it, type the following command in terminal:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;keytool -list -v -keystore &amp;lt;application_project_dir&amp;gt;\android\app\&amp;lt;signing_certificate_fingerprint_filename&amp;gt;.jks
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After an authentication, the SHA256 key will be revealed as shown below:&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Nfgvxydv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/61zc9pedox3sftyxj708.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Nfgvxydv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/61zc9pedox3sftyxj708.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Copy the SHA256 key and visit &lt;strong&gt;Huawei developer console//General Information&lt;/strong&gt;. Paste it to the field &lt;strong&gt;SHA-256 certificate fingerprint&lt;/strong&gt;, set the data storage location to Germany.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--oWAzd2l2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/zvctjf285u2vkv6gy91h.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--oWAzd2l2--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/zvctjf285u2vkv6gy91h.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Finally, enable the push kit from &lt;strong&gt;Project Setting/Manage APIs&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;You’ve completed configuring your React Native application in App gallery. In the further steps, I’ll explain how to integrate the plugin to your React Native application.&lt;/p&gt;
&lt;h2&gt;
  
  
  Integrating the Plugin
&lt;/h2&gt;

&lt;p&gt;To integrate the plugin open a terminal in your project directory and type the following command:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;npm i @hmscore/react-native-hwpush

&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;After the command is executed, the file tree is supposed to be in the following way:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;projectdir
    |_ node_modules
        |_ ...
        |_ @hmscore
            |_react-native-hwpush
            |_ ...
        |_ ...
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Then, download the &lt;strong&gt;agconnect-services.json&lt;/strong&gt; file from your push kit project in app gallery from the &lt;strong&gt;General Information&lt;/strong&gt; tab. Place the file in &lt;strong&gt;android/app&lt;/strong&gt; directory in your React Native project&lt;/p&gt;

&lt;p&gt;Go to &lt;strong&gt;android/app/build.gradle&lt;/strong&gt; directory in your React Native project. Follow the steps below:&lt;br&gt;
Add the AppGallery Connect plug-in dependency show below to the file header.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;apply plugin: 'com.huawei.agconnect'
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In &lt;strong&gt;android/defaultConfig&lt;/strong&gt; node, set the value of the field &lt;strong&gt;applicationId&lt;/strong&gt; as the package name you entered in the AppGallery and set minSdkVersion to 19 or higher&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;defaultConfig {   
  applicationId &amp;lt;package_name_of_the_project_in_app_gallery&amp;gt;   
  minSdkVersion 19   
  ...   
}   
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;In &lt;strong&gt;android/signingConfigs/config&lt;/strong&gt; node, enter the keystore file credentials.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;signingConfigs {   
  config {   
  storeFile file(&amp;lt;keystore_file_name&amp;gt;)   
  storePassword ‘&amp;lt;store_password&amp;gt;’   
  keyAlias ‘&amp;lt;alias&amp;gt;’   
  keyPassword ‘&amp;lt;key_password&amp;gt;’   
  }   
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Go to &lt;strong&gt;android/build.gradle&lt;/strong&gt; directory in your React Native project. Follow the steps below:&lt;/p&gt;

&lt;p&gt;Add &lt;strong&gt;maven {url ‘&lt;a href="https://developer.huawei.com/repo/'"&gt;https://developer.huawei.com/repo/'&lt;/a&gt;} to buildscript/repositories and allprojects/repositories.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Add classpath ‘com.huawei.agconnect:agcp:1.2.1.301’ to &lt;strong&gt;buildscript/dependencies.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;The file content should look like as below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;buildscript{   
  repositories{   
     google()   
     jcenter()   
     maven {url 'https://developer.huawei.com/repo/'}   
  }   
  dependencies{   
     classpath 'com.huawei.agconnect:agcp:1.2.1.301'   
  }   
}   
allprojects{   
  repositories{   
     google()   
     jcenter()   
     maven {url 'https://developer.huawei.com/repo/'}   
  }   
}
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;Go to &lt;strong&gt;android/settings.gradle&lt;/strong&gt; and add the following:&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;include ‘:react-native-hwpush’   
project(‘:react-native-hwpush’).projectDir = new File(rootProject.projectDir, ‘../node_modules/@hmscore/react-native-hwpush/android’)
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;You’ve integrated the plugin to your app. In the next section, I’ll explain how to use the plugin.&lt;/p&gt;

&lt;h2&gt;
  
  
  Using the Plugin
&lt;/h2&gt;

&lt;h3&gt;
  
  
  Obtaining a Token
&lt;/h3&gt;

&lt;p&gt;In order to push notifications to a device, you need to obtain a token which is a unique identifier for your test device for push notifications. To get the token, use &lt;strong&gt;getToken&lt;/strong&gt; method of the &lt;strong&gt;RNHmsInstanceId&lt;/strong&gt; module.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import {NativeModules} from 'react-native'   
NativeModules.RNHmsInstanceId.getToken((result, token) =&amp;gt; {   
  console.log(JSON.stringify(token));   
});  
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h3&gt;
  
  
  Pushing Notification Messages
&lt;/h3&gt;

&lt;p&gt;To push a notification message to your device, go to your Huawei developer console and navigate to &lt;strong&gt;your project/Growing/Push Kit/Add notification.&lt;/strong&gt;&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--a1xFc4NB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mohrghxfvfki28xk3r68.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--a1xFc4NB--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/mohrghxfvfki28xk3r68.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;br&gt;
Then fill in the fields, type the token for your device in &lt;strong&gt;Device token&lt;/strong&gt; field. Finally, click submit to push the notification.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--zb9lOJCj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/b2es9tfuvmu2eju2cpsq.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--zb9lOJCj--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/b2es9tfuvmu2eju2cpsq.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h3&gt;
  
  
  Pushing Data Messages
&lt;/h3&gt;

&lt;p&gt;Data messages are the messages with key-value pairs. Unlike the notification messages, they don’t pop notifications. Thus, they must be listened by a NativeEventEmitter. To listen data messages, listen for the event PushMsgReceiverEvent as shown below.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import {EventEmitter} from 'react-native'
let emitter = new NativeEventEmitter();
listener = emitter.addListener('PushMsgReceiverEvent', (event) =&amp;gt; {
  console.log(JSON.stringify(event))
});
// call listener.remove() to stop listening data messages
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To push a data message, go to the Huawei push console to push a new notification, choose &lt;strong&gt;Data Message&lt;/strong&gt; as the type.&lt;/p&gt;

&lt;h2&gt;
  
  
  Subscribing to Topics
&lt;/h2&gt;

&lt;p&gt;Subscribing to a topic enables the users to receive data messages by the subscribed topic. To subscribe a topic, use &lt;strong&gt;subscribe&lt;/strong&gt; method of the &lt;strong&gt;RNHmsMessaging&lt;/strong&gt; module. Note that you need to listen the data messages (i.e. listen for the &lt;strong&gt;PushMsgReceiverEvent&lt;/strong&gt;) to receive the topic specific messages.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;import {NativeModules} from 'react-native'
NativeModules.RNHmsMessaging.subscribe('myTopic', (result, errinfo) =&amp;gt; {
  if (result == RNErrorEnum.SUCCESS) {
    console.log('Subscribed!');
  } else {
    console.log('Failed to subscribe : ' + errinfo);
  }
});
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;p&gt;To push a notification or data message by topic, go to the Huawei push console to push a new notification, choose push scope as &lt;strong&gt;Subscriber&lt;/strong&gt; and then select the topic of the message to be sent.&lt;br&gt;
&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--Q4zjAY-b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/oxjbp1tgd6qqg8dr95cu.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--Q4zjAY-b--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://dev-to-uploads.s3.amazonaws.com/i/oxjbp1tgd6qqg8dr95cu.png" alt="Alt Text"&gt;&lt;/a&gt;&lt;/p&gt;
&lt;h2&gt;
  
  
  Unsubscribing from Topics
&lt;/h2&gt;

&lt;p&gt;Unsubscribing from a topic lets the user not to listen data messages by the unsubscribed topic. To unsubscribe from a topic, use &lt;strong&gt;unsubscribe&lt;/strong&gt; method of the &lt;strong&gt;RNHmsMessaging&lt;/strong&gt; module.&lt;br&gt;
&lt;/p&gt;

&lt;div class="highlight js-code-highlight"&gt;
&lt;pre class="highlight plaintext"&gt;&lt;code&gt;  import {NativeModules} from 'react-native'
  NativeModules.RNHmsMessaging.unsubscribe("myTopic", (result, errinfo) =&amp;gt; {
    if (result == RNErrorEnum.SUCCESS) {
      console.log("Unsubscribed!")
    } else {
      console.log("Failed to unsubscribe : "+errinfo);
    }
  });
&lt;/code&gt;&lt;/pre&gt;

&lt;/div&gt;



&lt;h2&gt;
  
  
  Conclusion
&lt;/h2&gt;

&lt;p&gt;HMS React Native push plugin enables you to integrate Huawei push kit for React Native applications. With Huawei push plugin, developers can push notifications to the users for various purposes such as improving app retention, informing users about special offers and news, performing A/B tests to make business decisions, sending data messages to alter app behavior, and more.&lt;/p&gt;

&lt;p&gt;Github link: &lt;a href="https://github.com/HMS-Core/hms-react-native-plugin/tree/master/react-native-hms-push"&gt;https://github.com/HMS-Core/hms-react-native-plugin/tree/master/react-native-hms-push&lt;/a&gt;    &lt;/p&gt;

&lt;p&gt;You may read further about HMS push kit from the articles in references and leave your questions in comments.&lt;/p&gt;

&lt;p&gt;For more details, you can go to:&lt;br&gt;
l official website:&lt;a href="https://developer.huawei.com/consumer/en/hms"&gt;https://developer.huawei.com/consumer/en/hms&lt;/a&gt;&lt;br&gt;
l Documentation page:&lt;a href="https://developer.huawei.com/consumer/en/doc/development"&gt;https://developer.huawei.com/consumer/en/doc/development&lt;/a&gt;&lt;br&gt;
l Reddit to join our developer discussion: &lt;a href="https://www.reddit.com/r/HMSCore/"&gt;https://www.reddit.com/r/HMSCore/&lt;/a&gt;&lt;br&gt;
l GitHub：&lt;a href="https://github.com/HMS-Core"&gt;https://github.com/HMS-Core&lt;/a&gt;&lt;br&gt;
l Stack Overflow：&lt;a href="https://stackoverflow.com/questions/tagged/huawei-mobile-services"&gt;https://stackoverflow.com/questions/tagged/huawei-mobile-services&lt;/a&gt;&lt;/p&gt;

</description>
      <category>android</category>
      <category>opensource</category>
      <category>tutorial</category>
    </item>
    <item>
      <title>REACT NATIVE | How to install &amp; use HMS Site Kit</title>
      <dc:creator>Sherlock</dc:creator>
      <pubDate>Tue, 29 Sep 2020 06:50:30 +0000</pubDate>
      <link>https://dev.to/sherloc78676146/react-native-how-to-install-use-hms-site-kit-5j5</link>
      <guid>https://dev.to/sherloc78676146/react-native-how-to-install-use-hms-site-kit-5j5</guid>
      <description>&lt;p&gt;Introduction&lt;br&gt;
Hello everyone. In this article we are going to take a look at Huawei Mobile Services(HMS) Site Kit Plugin for react native. We will cover how to install and use HMS Site Kit.&lt;/p&gt;

&lt;p&gt;HMS Site Kit has following features&lt;/p&gt;

&lt;p&gt;Keyword Search: Returns a place list based on keywords entered by the user.&lt;/p&gt;

&lt;p&gt;Nearby Place Search: Searches for nearby places based on the current location of the user's device.&lt;/p&gt;

&lt;p&gt;Place Details: Searches for details about a place.&lt;/p&gt;

&lt;p&gt;Place Search Suggestion: Returns a list of place suggestions.&lt;/p&gt;

&lt;p&gt;Before we begin, you need to have Huawei developer account to use Huawei Mobile Services and thus the HMS Site Kit. You can sign in/register to Huawei developer website from  here.&lt;/p&gt;

&lt;p&gt;Configure your project on AppGallery Connect&lt;br&gt;
First of all, you need to integrate Huawei Mobile Services with your application. I will not get into details about how to integrate your application but you can use this article as step by step guide.&lt;/p&gt;

&lt;p&gt;Installation&lt;br&gt;
First things first, let's install the library.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;npm i @hmscore/react-native-hms-site&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;After the installation completed, we can import the library.&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;&lt;code&gt;import RNHMSSite from '@hmscore/react-native-hms-site'&lt;/code&gt;&lt;br&gt;
&lt;/p&gt;

&lt;p&gt;Before we can use the features of HMS site kit. We need to initialize it. In order to initialize the service, you will need an API key. When you integrated your application with HMS, AppGallery Connect will automatically provide an API key for you. You can find your API key on AppGallery Connect &amp;gt; YourApp &amp;gt; Project Settings &amp;gt; General information &amp;gt; App information.&lt;/p&gt;

&lt;p&gt;Since we have our api key let's call initialize service function.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const config = {
apiKey: '&amp;lt;Your_API_KEY&amp;gt;' // You can find it in AppGallery Connect &amp;gt; YourApp &amp;gt; Project Settings &amp;gt; General information &amp;gt; App information};

RNHMSSite.initializeService(config)
.then(() =&amp;gt; {
    console.log('Service is initialized successfully');
})
.catch((err) =&amp;gt; {
    console.log('Error : ' + err);
 });
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;If your API key is correct you will see "Service is initialized successfully" on your console.&lt;/p&gt;

&lt;p&gt;Usage&lt;br&gt;
Now we can start using HMS React Native Site Kit. Let's start with keyword search.&lt;/p&gt;

&lt;p&gt;Keyword (Text) Search&lt;br&gt;
HMS Site kit keyword search feature let's you implement a functionality that returns place list based on your user's keyword input. Also you can specify a location which search result will be baised. You can specify search radius, country, language and page size. For the keyword search you can set the POI (Point of Interest) where results can be filtered based on POI. User can search Bakery, School, ATM etc.&lt;/p&gt;

&lt;p&gt;Let's create a TextSearchRequest object, which is used as the request body for keyword search. Related parameters are as follows, among which query is mandatory and others are optional:&lt;/p&gt;

&lt;p&gt;query: search keyword.&lt;/p&gt;

&lt;p&gt;location: longitude and latitude to which search results need to be biased.&lt;/p&gt;

&lt;p&gt;radius: search radius, in meters. The value ranges from 1 to 50000. The default value is 50000.&lt;/p&gt;

&lt;p&gt;poiType: POI type. The value range is the same as that of LocationType.&lt;/p&gt;

&lt;p&gt;countryCode: code of the country where places are searched, which complies with the ISO 3166-1 alpha-2 standard.&lt;/p&gt;

&lt;p&gt;language: language in which search results are displayed. For details about the value range, please refer to language codes in Language Mapping. If this parameter is not passed, the language of the query field is used in priority. If the field language is unavailable, the local language will be used.&lt;/p&gt;

&lt;p&gt;pageSize: number of records on each page. The value ranges from 1 to 20. The default value is 20.&lt;/p&gt;

&lt;p&gt;pageIndex: current page number. The value ranges from 1 to 60. The default value is 1.&lt;/p&gt;

&lt;p&gt;After that we can call textSearch function and send our TextSearchRequest object as a parameter like this.&lt;/p&gt;

&lt;p&gt;Let's find international school at Paris&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const onTextSearch = () =&amp;gt; {
let textSearchReq = {
    query: 'International',
    location: {
        lat: 48.893478,
        lng: 2.334595,
    },
    radius: 1000,
    countryCode: 'FR',
    language: 'en',
    pageIndex: 1,
    pageSize: 1,
    poiType: RNHMSSite.LocationType.SCHOOL
};
RNHMSSite.textSearch(textSearchReq)
    .then((response) =&amp;gt; {
        console.log(JSON.stringify(response));
    })
    .catch((err) =&amp;gt; {
        console.log(JSON.stringify(err));
    });
};
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The response json should be like this and as you can see there is alot of information to play around with.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
"totalCount": 1,
"sites": [
    {
        "siteId": "FB3941B313927D74413FFF0E883144FE",
        "poi": {
            "rating": 0,
            "poiTypes": [
                "SCHOOL"
            ],
            "phone": "+(33)-(1)-42000679",
            "openingHours": {},
            "internationalPhone": "+(33)-(1)-42000679"
        },
        "viewport": {
            "southwest": {
                "lng": 2.3455935548062814,
                "lat": 48.87367776679441
            },
            "northeast": {
                "lng": 2.3494610451937183,
                "lat": 48.87622143320559
            }
        },
        "name": "Acting International",
        "formatAddress": "15, Rue Ambroise Thomas, 75009, 9e Arrondissement, Paris, Ile-de-France, France",
        "address": {
            "subLocality": "9e Arrondissement",
            "subAdminArea": "Paris",
            "postalCode": "75009",
            "thoroughfare": "Rue Ambroise Thomas",
            "countryCode": "FR",
            "locality": "Paris",
            "country": "France",
            "adminArea": "Ile-de-France"
        },
        "distance": 2269.4454697030014,
        "location": {
            "lng": 2.3475273,
            "lat": 48.8749496
        }
    }
]
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Nearby Place Search&lt;br&gt;
HMS Site kit nearby search feature let's you implement a functionality that returns nearby places using the current location of the user. Also you can specify search keyword, search radius, language and page size. For the nearby search you can set the POI (Point of Interest) where results can be filtered based on POI. User can search Bakery, School, ATM etc.&lt;/p&gt;

&lt;p&gt;Let's create a NearbySearchRequest object, which is used as the request body for nearby place search. Related parameters are as follows, among which location is mandatory and others are optional:&lt;/p&gt;

&lt;p&gt;location: longitude and latitude to which search results need to be biased.&lt;/p&gt;

&lt;p&gt;radius: search radius, in meters. The value ranges from 1 to 50000. The default value is 50000.&lt;/p&gt;

&lt;p&gt;query: search keyword.&lt;/p&gt;

&lt;p&gt;poiType: POI type. The value range is the same as that of LocationType.&lt;/p&gt;

&lt;p&gt;language: language in which search results are displayed. For details about the value range, please refer to language codes in Language Mapping. If this parameter is not passed, the language of the query field is used in priority. If the field language is unavailable, the local language will be used.&lt;/p&gt;

&lt;p&gt;pageSize: number of records on each page. The value ranges from 1 to 20. The default value is 20.&lt;/p&gt;

&lt;p&gt;pageIndex: current page number. The value ranges from 1 to 60. The default value is 1.&lt;/p&gt;

&lt;p&gt;After that we can call nearbySearch function and send our NearbySearchRequest object as a parameter like this.&lt;/p&gt;

&lt;p&gt;Let's find an ATM nearby.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const onNearbySearch = () =&amp;gt; {
let nearbySearchReq = {
    location: {
        lat: 51.500775,
        lng: -0.115756,
    },
    query: 'BANK',
    radius: 1000,
    poiType: RNHMSSite.LocationType.ATM,
    language: 'en',
    pageIndex: 1,
    pageSize: 1
};
RNHMSSite.nearbySearch(nearbySearchReq)
    .then((response) =&amp;gt; {
        console.log(JSON.stringify(response));
    })
    .catch((err) =&amp;gt; {
        console.log(JSON.stringify(err));
    });
};
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The response json should be like this and as you can see there is alot of information to play around with.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;{
"totalCount": 1,
"sites": [
    {
        "siteId": "7B4F4024A4FD4D700E61B659247BB854",
        "poi": {
            "rating": 0,
            "poiTypes": [
                "ATM"
            ],
            "openingHours": {},
            "internationalPhone": ""
        },
        "viewport": {
            "southwest": {
                "lng": -0.11576103182719415,
                "lat": 51.498155166794405
            },
            "northeast": {
                "lng": -0.11167496817280585,
                "lat": 51.50069883320559
            }
        },
        "name": "Bank of Ireland - Post Office",
        "formatAddress": "125-131, Westminster Bridge Road, Lambeth, London, England, the United Kingdom",
        "address": {
            "subAdminArea": "London",
            "thoroughfare": "Westminster Bridge Road",
            "countryCode": "GB",
            "locality": "Lambeth",
            "country": "the United Kingdom",
            "adminArea": "England"
        },
        "distance": 206.06612089844526,
        "location": {
            "lng": -0.113718,
            "lat": 51.499427
        }
    }
]
}
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Place Details Search&lt;br&gt;
Place details search returns search details about a place based on the unique ID (Site Id) of the place. SiteId can get from keyword or nearby or Place Suggestion search.&lt;/p&gt;

&lt;p&gt;Let's create a DetailSearchRequest object, which is used as the request body for place details search. Related parameters are as follows, among which siteId is mandatory and others are optional:&lt;/p&gt;

&lt;p&gt;siteId: ID of a place.&lt;/p&gt;

&lt;p&gt;language: language in which search results are displayed. If this parameter is not passed, the local language will be used.&lt;/p&gt;

&lt;p&gt;After that we can call detailSearch function and send our DetailSearchRequest object as a parameter like this.&lt;/p&gt;

&lt;p&gt;Let's look at the details of the atm we found on nearby search.&lt;/p&gt;

&lt;div class="highlight"&gt;&lt;pre class="highlight plaintext"&gt;&lt;code&gt;const onDetailSearch = () =&amp;gt; {
let detailSearchReq = {
    siteId: '7B4F4024A4FD4D700E61B659247BB854',
    language: 'en'
};
RNHMSSite.detailSearch(detailSearchReq)
    .then((response) =&amp;gt; {
        console.log(JSON.stringify(response));
    })
    .catch((err) =&amp;gt; {
        console.log(JSON.stringify(err));
    });
};
&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;The response json should be like this and as you can see there is alot of information to play around with.&lt;/p&gt;

</description>
      <category>reactnative</category>
      <category>hms</category>
    </item>
    <item>
      <title>HMS Core 5.0.2 Launch Announcement</title>
      <dc:creator>Sherlock</dc:creator>
      <pubDate>Tue, 29 Sep 2020 06:18:40 +0000</pubDate>
      <link>https://dev.to/sherloc78676146/hms-core-5-0-2-launch-announcement-4ckg</link>
      <guid>https://dev.to/sherloc78676146/hms-core-5-0-2-launch-announcement-4ckg</guid>
      <description>&lt;p&gt;&lt;strong&gt;ML Kit&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;p&gt;Added the liveness detection service,  which supports silent liveness detection and captures faces in real time. It can determine whether a face is of a real user without requiring the user to follow specific instructions.&lt;/p&gt;

&lt;p&gt;Added the image super-resolution service, which removes the compression noise of images to obtain clearer images, with the resolution unchanged.&lt;/p&gt;

&lt;p&gt;Added the document skew correction service, which automatically identifies the location of a document in an   image and adjusts the shooting angle to the angle facing the document, even if the document is tilted.&lt;/p&gt;

&lt;p&gt;Added the hand keypoint setection service, improved the speed and accuracy of bank card recognition, enhanced   the translation service, optimized the text to speech service, and other features.&lt;/p&gt;

&lt;p&gt;Link:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides/version-changehistory-0000001050040023"&gt;https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides/version-changehistory-0000001050040023&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scene Kit&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;p&gt;Added APIs for you to create apps which blend the virtual and the real, with features such as dynamic face   stickers, 3D Qmojis, and virtual object placement.&lt;/p&gt;

&lt;p&gt;Link:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.huawei.com/consumer/en/hms/huawei-scenekit/"&gt;https://developer.huawei.com/consumer/en/hms/huawei-scenekit/&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Push Kit&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;p&gt;Added the messaging by user time zone, scenario, and geofence, improving user experience.*&lt;/p&gt;

&lt;p&gt;*The functions involving user data must be implemented with users' authorization.&lt;/p&gt;

&lt;p&gt;Link:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides/automated-notifications-0000001051072150#EN-US_TOPIC_0000001051072150__section17240145319447"&gt;https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides/automated-notifications-0000001051072150#EN-US_TOPIC_0000001051072150__section17240145319447&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Analytics Kit&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Features:&lt;/p&gt;

&lt;p&gt;Supported integration of web apps with Analytics Kit to implement data collection and unified analysis.&lt;br&gt;
Supported automatic collection from mobile phones and tablets as well as configuration of the app installation source.&lt;/p&gt;

&lt;p&gt;Link:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.huawei.com/consumer/en/hms/huawei-analyticskit"&gt;https://developer.huawei.com/consumer/en/hms/huawei-analyticskit&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;Updates of all HMS Core versions&lt;/p&gt;

&lt;p&gt;Learn more:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides-V5/hmssdk-kit-0000001050042513-V5"&gt;https://developer.huawei.com/consumer/en/doc/development/HMSCore-Guides-V5/hmssdk-kit-0000001050042513-V5&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Scene Kit&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sample Code:&lt;/p&gt;

&lt;p&gt;Added the ARView and FaceView development procedures.                                                                                        &lt;/p&gt;

&lt;p&gt;Github:&lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/HMS-Core/hms-scene-demo"&gt;https://github.com/HMS-Core/hms-scene-demo&lt;/a&gt;                  &lt;/p&gt;

&lt;p&gt;&lt;strong&gt;ML Kit&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sample Code:&lt;/p&gt;

&lt;p&gt;Added a demo for the messaging by scenario.&lt;/p&gt;

&lt;p&gt;Github:                 &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/HMS-Core/hms-ml-demo"&gt;https://github.com/HMS-Core/hms-ml-demo&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Push Kit&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sample Code:&lt;/p&gt;

&lt;p&gt;Added a demo to illustrate how to integrate web apps with Analytics Kit.&lt;/p&gt;

&lt;p&gt;Github:   &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/HMS-Core/hms-push-clientdemo-android"&gt;https://github.com/HMS-Core/hms-push-clientdemo-android&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Analytics Kit&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Sample Code:&lt;/p&gt;

&lt;p&gt;Added a demo to illustrate how to integrate web apps with Analytics Kit.&lt;/p&gt;

&lt;p&gt;Github:   &lt;/p&gt;

&lt;p&gt;&lt;a href="https://github.com/HMS-Core/hms-analytics-demo-javascript"&gt;https://github.com/HMS-Core/hms-analytics-demo-javascript&lt;/a&gt;                                    &lt;/p&gt;

</description>
      <category>huawei</category>
      <category>hms</category>
      <category>android</category>
    </item>
    <item>
      <title>Singapore Geospatial Week+ 2020 Summit Review</title>
      <dc:creator>Sherlock</dc:creator>
      <pubDate>Mon, 28 Sep 2020 03:21:57 +0000</pubDate>
      <link>https://dev.to/sherloc78676146/singapore-geospatial-week-2020-summit-review-49bd</link>
      <guid>https://dev.to/sherloc78676146/singapore-geospatial-week-2020-summit-review-49bd</guid>
      <description>&lt;p&gt;Last week, Singapore Geospatial Week+ 2020 is successfully held. More than 300  business leaders and developers from top real estate, retail, and e-commerce  developers join this online event.&lt;/p&gt;

&lt;p&gt;The Singapore Geospatial Week is held annually by the Government of Singapore Land Authority and brings together industry participants and the public. The event is led by Singapore Mobile Ecosystem Development BD Goh Cheng Wee and partners to organize a series of activities to explore the potential of industry technologies and promote in-depth cooperation among various industries on Huawei mobile services.&lt;/p&gt;

&lt;p&gt;During the morning tech forum event entitled "Unlocking Countless Potential in Real Estate", Liusihao from HMS Core Product Dept, participated in the technical panel entitled "How to use technology innovation to serve the retail and real estate industries" with technical experts from CapitaLand, PTGEM, etc.. He shared HMS Core refined analytics operation service, indoor and outdoor location service and AI technologies, helping developers in application innovation. The online developers discussed and expressed full interest in these service kits.&lt;/p&gt;

&lt;p&gt;At a special session on the afternoon of the same day, released HMS Core lifestyle and e-commerce solutions for Asia-Pacific Region. Li Mingnan(Nando), lifestyle industry owner of the HMS Core Product Dept, discussed technical solutions and application scenarios with more than 100 online developers, and answered their questions. Then showed how HMS Core opens network, 5G, and AI technologies to bring brand-new experience to lifestyle applications, as well as the actual scenarios of indoor location and Super GNSS.&lt;/p&gt;

&lt;p&gt;This activity explored new cooperation models with partners and established long-term dialogues, which are expected to further force the go-onboard and integration of regional applications and also improve the influence of the HMS ecosystem in the industry in the region. Next, we will provide product and  technical support for developers.&lt;/p&gt;

</description>
    </item>
  </channel>
</rss>
