Кыргызстандагы мобилдик тиркемелер 2013: Android жана iOS рыногунун биринчи талдоосу
2013-жылдын башында биз биринчи жолу клиенттерибизге мобилдик тиркеме жасоону сунуштадык. Бул чечим жөнөкөй факттарга негизделди.
Биздин клиент — Бишкектеги доставка кызматы — веб-сайтынын трафигин карады: 54% смартфондон келди. Андан мурда бул 20% болгон. 2013-жылы нукур мобилдик аудитория пайда болду.
Рынок абалы: реалдуу сандар
2013-жылы Кыргызстандагы мобилдик рынок (биздин долбоорлор боюнча жана ачык маалыматтар боюнча):
| Платформа | Үлүш | Аппараттар |
|---|---|---|
| Android 2.3 (Gingerbread) | 31% | Бюджеттик Samsung, Huawei |
| Android 4.0–4.1 | 27% | Орто деңгээл Samsung, HTC |
| Android 4.2+ | 10% | Флагмандар |
| iOS (iPhone 4/4S/5) | 12% | Колдонуучулар аз, бирок активдүү |
| Nokia Symbian | 15% | S40, S60 — жаш нарк |
| Башкалар | 5% | BlackBerry, Windows Phone |
Маанилүү факт: Android 2.3 — 31%. Бул тиркеменин минималдуу API деңгээли 9-нчи болушу керек дегенди билдирет. Эгер 14+ (Android 4.0) белгилесек, рынктын үчтөн бир бөлүгүн жоготту.
Биринчи тиркеме: доставка трекери
Доставка кызматы үчүн тиркеменин максаты жөнөкөй: кардар жүктүн кайда экенин телефонунан текшере алсын.
Техникалык чечим: Java (Android Studio 0.3 бета, ошол кезде Eclipse ADT колдонулду) + iOS үчүн Objective-C. Crossplatform мүмкүнчүлүктөр (PhoneGap, Titanium) бар болчу, бирок GPS жана Push notification ишенимдүү иштеши үчүн нативдик чечим тандалды.
// Android 2.3+ колдоо: ActionBarSherlock библиотекасы
// (нативдик ActionBar API 11де пайда болду, биз 9-минимумдуу болдук)
import com.actionbarsherlock.app.SherlockActivity;
import com.actionbarsherlock.view.Menu;
public class TrackingActivity extends SherlockActivity {
private static final String API_URL = "https://api.delivery.kg/track/";
private TextView statusText;
private ProgressBar loadingBar;
@Override
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_tracking);
statusText = (TextView) findViewById(R.id.status_text);
loadingBar = (ProgressBar) findViewById(R.id.loading);
String trackingCode = getIntent().getStringExtra("tracking_code");
if (trackingCode != null) {
loadTrackingInfo(trackingCode);
}
}
private void loadTrackingInfo(final String code) {
loadingBar.setVisibility(View.VISIBLE);
// Android 2.3-та AsyncTask — стандарт (Retrofit жок болчу)
new AsyncTask<String, Void, JSONObject>() {
@Override
protected JSONObject doInBackground(String... params) {
try {
URL url = new URL(API_URL + params[0]);
HttpURLConnection conn = (HttpURLConnection) url.openConnection();
conn.setConnectTimeout(8000);
conn.setReadTimeout(10000);
StringBuilder sb = new StringBuilder();
BufferedReader br = new BufferedReader(
new InputStreamReader(conn.getInputStream(), "UTF-8")
);
String line;
while ((line = br.readLine()) != null) sb.append(line);
return new JSONObject(sb.toString());
} catch (Exception e) {
return null;
}
}
@Override
protected void onPostExecute(JSONObject result) {
loadingBar.setVisibility(View.GONE);
if (result == null) {
statusText.setText("Байланыш жок. Кайра аракет кылыңыз.");
return;
}
try {
String status = result.getString("status");
String location = result.optString("location", "");
statusText.setText(status + (location.isEmpty() ? "" : "\n" + location));
} catch (JSONException e) {
statusText.setText("Маалымат жүктөлгөн жок.");
}
}
}.execute(code);
}
}
Push-уведомлениелер Android 2.3-та
Android 2.3 Google Cloud Messaging (GCM) колдойт — 2010-жылдан. Бирок GCM иштеши үчүн телефондо Google Play Services болушу керек.
Маселе: Кыргызстандагы бюджеттик Android телефондордун (Huawei G300, ZTE Blade) бир бөлүгүндө Google Play Services жок болчу же эски версия орнотулган болчу. Push-уведомлениелер ал аппараттарга жетпеди.
// GCM регистрация + жазуу жарыбаган аппараттар үчүн SMS fallback
public class GcmHelper {
public static boolean isGcmAvailable(Context context) {
try {
// Google Play Services бар-жоктугун текшерүү
int result = GooglePlayServicesUtil.isGooglePlayServicesAvailable(context);
return result == ConnectionResult.SUCCESS;
} catch (Exception e) {
return false;
}
}
public static void register(Context ctx, String userId) {
if (isGcmAvailable(ctx)) {
// GCM аркылуу push-уведомления
GCMRegistrar.checkDevice(ctx);
GCMRegistrar.checkManifest(ctx);
String regId = GCMRegistrar.getRegistrationId(ctx);
if (regId.isEmpty()) {
GCMRegistrar.register(ctx, GCM_SENDER_ID);
} else {
sendRegIdToServer(userId, regId, "gcm");
}
} else {
// Fallback: SMS-уведомления (кымбатыраак, бирок ишенимдүү)
sendRegIdToServer(userId, getUserPhone(ctx), "sms");
}
}
}
Натыйжада: 78% колдонуучу GCM аркылуу, 22% SMS аркылуу уведомлениелерди алды. SMS-fallback бюджетте $50–80/айды алды, бирок кардарлар ар дайым хабарландырылды.
iOS: аудитория аз, бирок баасы жогору
iOS колдонуучулары 12% болсо да, алар компаниянын VIP-кардарлары болчу. Аппарат баасы — $300–600. Бул сегмент ерекше мамилени талап кылды.
iOS тиркемеси жөнөкөй болчу: UITableView менен заказдар тизмеси, UIWebView аркылуу трекинг. Objective-C, Xcode 4.6.
// AppDelegate.m — push-уведомлениелерди каттоо
- (BOOL)application:(UIApplication *)application
didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
[[UIApplication sharedApplication]
registerForRemoteNotificationTypes:
UIRemoteNotificationTypeBadge |
UIRemoteNotificationTypeSound |
UIRemoteNotificationTypeAlert];
return YES;
}
- (void)application:(UIApplication *)app
didRegisterForRemoteNotificationsWithDeviceToken:(NSData *)deviceToken {
// Token-ди серверге жөнөтүү
NSString *token = [[deviceToken description]
stringByTrimmingCharactersInSet:
[NSCharacterSet characterSetWithCharactersInString:@"<>"]];
token = [token stringByReplacingOccurrencesOfString:@" " withString:@""];
[self sendTokenToServer:token platform:@"ios"];
}
Экономикасы: тиркемени жасоонун нарк-жаракасы
2013-жылы Бишкекте мобилдик тиркеме жасоонун нарк-жаракасы:
| Компонент | Убакыт | Нарк |
|---|---|---|
| Android тиркемеси (негизги функционал) | 6 апта | $1,800 |
| iOS тиркемеси | 4 апта | $1,200 |
| Backend API (PHP) | 2 апта | $600 |
| Дизайн | 1 апта | $400 |
| Жалпы | 13 апта | $4,000 |
Apple Developer Program: $99/жыл. Google Play: $25 бир жолку.
Бишкектеги орточо айлык иш акы разработчик үчүн: $400–600. Эки разработчик + 3 ай = $3,600 эмгек акысы. Тиркемени аутсорс берүүдөн арзан.
2013-жылдан алынган сабак
Кыргызстандагы мобилдик разработкадан биз үйрөнгөн негизги нерсе: платформалык статистикасыз чечим чыгарба. "Баары iOS колдонот" дегенди укканда — трафик статистикасын карадык: 12%. Бюджеттик Android телефондор рынокту башкарды.
2025-жылы да ошол эле принцип. Флагмандык iPhone менен тест кылуу — жетишсиз. Орточо Android аппаратында, орточо 4G байланышта иштешин текшер. Бул Кыргызстандагы реалдуу колдонуучунун тажрыйбасы.