دليل المطوِّر في Cloud Anchors لنظام التشغيل iOS

حزمة ARCore SDK لواجهات iOS مع ARKit لتوفير Cloud Anchor الأخرى، بما يتيح لك مشاركة علامات الارتساء بين أجهزة iOS وAndroid في نفس البيئة.

تعرَّف على كيفية استخدام ARCore Cloud Anchor API أو خدمة ARCore Cloud Anchor في تطبيقاتك.

المتطلبات الأساسية

  • الإصدار 13.0 من Xcode أو إصدار أحدث
  • Cocoapods 1.4.0 أو إصدار أحدث في حال استخدام Cocoapods
  • جهاز Apple متوافق مع ARKit ويعمل بنظام التشغيل iOS 12.0 أو إصدار أحدث (مطلوب النشر بالإصدار 12.0 أو إصدار أحدث من نظام التشغيل iOS)

إذا كنت مستخدمًا جديدًا لميزة "تثبيتات السحابة الإلكترونية":

تفعيل Cloud Anchors في تطبيقك

لاستخدام واجهة برمجة تطبيقات Cloud Anchors، عليك إنشاء GARSessionConfiguration وضبط السمة cloudAnchorMode لها، كما هو موضّح في ضبط جلسة ARCore في نظام التشغيل iOS. استخدِم setConfiguration:error: (GARSession) لضبط الإعدادات.

يجب أيضًا تفعيل ARCore API. على تطبيقك.

استضافة الإعلانات الثابتة وحلها

يمكنك استضافة نقاط تثبيت السحابة الإلكترونية وحلّها باستخدام واجهة برمجة التطبيقات ARCore Cloud Anchor API. تتضمّن واجهة برمجة التطبيقات methods طلبات استدعاء للعمليات المكتملة، بالإضافة إلى عناصر Future التي يمكن فحصها.

استضافة إعلان ثابت في أسفل الصفحة

عند استضافة ARAnchor، يتم وضع العنصر الأساسي في نظام إحداثيات شائع لأي مساحة مكانية معيّنة.

يرسل طلب المضيف بيانات مرئية إلى خادم Google الذي يضبط خادم ARAnchor. الموضع في نظام إحداثي يمثل المساحة المادية الحالية. حاسمة طلب مضيف ناجح يؤدي إلى إرجاع معرّف Cloud Anchor جديد، والذي يمكن مشاركته يُستخدم لحل علامة الارتساء لاحقًا.

- (void)addAnchorWithTransform:(matrix_float4x4)transform {
  self.arAnchor = [[ARAnchor alloc] initWithTransform:transform];
  [self.sceneView.session addAnchor:self.arAnchor];

  __weak ExampleViewController *weakSelf = self;
  self.hostFuture = [self.cloudAnchorManager
      hostCloudAnchor:self.arAnchor
           completion:^(NSString *anchorId, GARCloudAnchorState cloudState) {
             [weakSelf handleHostAnchor:anchorId cloudState:cloudState];
           }
                error:nil];
  [self enterState:HelloARStateHosting];
}

حلّ علامة الارتساء

يؤدي حلّ ARAnchor إلى السماح لأجهزة Android وiOS في مساحة جغرافية معيّنة بإضافة عناصر تثبيت مستضافة سابقًا إلى المشاهد الجديدة.

عند طلب الحل، يتم إرسال "رقم تعريف ارتساء السحابة الإلكترونية" إلى جانب البيانات المرئية إلى خادم Google. من الإطار الحالي. سيحاول الخادم مطابقة هذه البيانات المرئية مع صور الأماكن التي تمّ ربط "نقاط الإسناد في السحابة" المستضافة حاليًا بها. فعندما بنجاح، تتم إضافة علامة ارتساء جديدة إلى الجلسة وإعادتها.

- (void)resolveAnchorWithIdentifier:(NSString *)identifier {
  GARResolveCloudAnchorFuture *garFuture =
      [self.gSession resolveCloudAnchorWithIdentifier:identifier
                                    completionHandler:completion
                                                error:&error];
}

// Pass the ARFRame to the ARCore session every time there is a frame update.
// This returns a GARFrame that contains a list of updated anchors. If your
// anchor's pose or tracking state changed, your anchor will be in the list.
- (void)cloudAnchorManager:(CloudAnchorManager *)manager didUpdateFrame:(GARFrame *)garFrame {
  for (GARAnchor *garAnchor in garFrame.updatedAnchors) {
    if ([garAnchor isEqual:self.garAnchor] && self.resolvedAnchorNode) {
      self.resolvedAnchorNode.simdTransform = garAnchor.transform;
      self.resolvedAnchorNode.hidden = !garAnchor.hasValidTransform;
    }
  }
}

GARSession نمط الاستطلاع الاختياري

إذا كنت تستخدم Metal أو كنت بحاجة إلى خيار طلب معلومات، وكان تطبيقك يعمل بمعدل رسوم متحركة لا يقل عن 30 لقطة في الثانية، استخدِم النمط التالي لتمرير ARFrame إلى GARSession:

-(void)myOwnPersonalUpdateMethod {
  ARFrame *arFrame = arSession.currentFrame;
  NSError *error = nil;
  GARFrame *garFrame = [garSession update:arFrame error:&error];
  // your update code here
}

حصص واجهة برمجة التطبيقات

تتضمّن واجهة برمجة التطبيقات ARCore API الحصص التالية لمعدل نقل بيانات الطلبات:

نوع الحصة الحد الأقصى المدة ينطبق على
عدد علامات الارتساء غير محدودة لا ينطبق Project
طلبات استضافة المحتوى الأساسي 30 دقيقة عنوان IP والمشروع
طلبات حلّ التناقضات 300 دقيقة عنوان IP والمشروع

المشاكل المعروفة والحلول البديلة

هناك بعض المشاكل المعروفة عند التعامل مع ARCore SDK لنظام التشغيل iOS.

إعدادات المخطّط التلقائية تؤدي إلى تعطُّل التطبيق بشكل متقطّع

يتم تفعيل إعدادات مخطط التحقّق من واجهة برمجة التطبيقات Metal API و"التقاط اللقطات باستخدام وحدة معالجة الرسومات" تلقائيًا، ما قد يؤدي أحيانًا إلى تعطُّل التطبيق داخل حزمة SDK.

تشخيص أعطال التطبيق

عند الاشتباه في حدوث عطل، يمكنك إلقاء نظرة على تقرير تتبُّع تسلسل استدعاء الدوال البرمجية. إذا ظهر لك الرمز MTLDebugComputeCommandEncoder في تتبع تسلسل استدعاء الدوال البرمجية، من المرجّح أن يكون ذلك ناتجًا عن إعدادات المخطّط التلقائية.

حلّ بديل

  1. الانتقال إلى Product > Scheme > Edit Scheme…

  2. افتح علامة التبويب "Run".

  3. انقر على Options لعرض إعداداتك الحالية.

  4. تأكَّد من إيقاف كل من GPU Frame Capture وMetal API Validation.

  5. أنشئ تطبيقك وشغِّله.

يمكنك الاطّلاع على CHANGELOG Cocoapods للاطّلاع على المشاكل المعروفة الأخرى.

القيود

لا تتوافق حزمة تطوير البرامج (SDK) لـ ARCore على نظام التشغيل iOS مع طلب setWorldOrigin(relativeTransform:) في ARKit.

اعتبارات الأداء

يزداد استخدام الذاكرة عند تفعيل ARCore API. من المتوقّع أن يزداد استهلاك البطارية في الجهاز بسبب زيادة استخدام الشبكة ووحدة المعالجة المركزية.

الخطوات التالية