تتفاعل حزمة تطوير البرامج (SDK) لـ ARCore على نظام التشغيل iOS مع ARKit لتوفير ميزات "محطات الربط في السحابة الإلكترونية"، ما يتيح لك مشاركة محطات الربط بين أجهزة iOS وAndroid في البيئة نفسها.
تعرَّف على كيفية استخدام ARCore Cloud Anchor API أو خدمة ARCore Cloud Anchor في تطبيقاتك.
المتطلبات الأساسية
- الإصدار 13.0 من Xcode أو إصدار أحدث
- Cocoapods 1.4.0 أو إصدار أحدث في حال استخدام Cocoapods
- جهاز Apple متوافق مع ARKit يعمل بالإصدار 12.0 من نظام التشغيل iOS أو إصدار أحدث (يجب أن يكون هدف النشر هو الإصدار 12.0 من نظام التشغيل iOS أو إصدار أحدث)
إذا كنت مستخدمًا جديدًا لميزة "تثبيتات السحابة الإلكترونية":
تأكَّد من فهم العملية المستخدَمة لاستضافة "هِمّة" Cloud وحلّها.
اطّلِع على الدليل السريع لمعرفة متطلبات النظام وتعليمات الإعداد والتثبيت.
اطّلِع على أحد عيّنات ميزة "تثبيت العناصر في السحابة الإلكترونية".
تفعيل ميزة "نقاط الإسناد في السحابة الإلكترونية" في تطبيقك
لاستخدام واجهة برمجة تطبيقات 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 والمشروع |
طلبات resolve التناقضات | 300 | دقيقة | عنوان IP والمشروع |
المشاكل المعروفة والحلول البديلة
هناك بعض المشاكل المعروفة عند استخدام حزمة تطوير البرامج (SDK) لـ ARCore على نظام التشغيل iOS.
تؤدي إعدادات المخطّط التلقائية إلى تعطُّل التطبيق بشكل متقطّع
يتم تفعيل إعدادات مخطط التحقّق من واجهة برمجة التطبيقات Metal API و"التقاط اللقطات باستخدام وحدة معالجة الرسومات" تلقائيًا، ما قد يؤدي أحيانًا إلى تعطُّل التطبيق داخل حزمة SDK.
تشخيص تعطُّل التطبيق
عندما تشكّ في حدوث تعذّر، اطّلِع على تتبع تسلسل استدعاء الدوال البرمجية.
إذا ظهر لك الرمز MTLDebugComputeCommandEncoder
في تتبع تسلسل استدعاء الدوال البرمجية، من المرجّح أن يكون ذلك ناتجًا عن
إعدادات المخطّط التلقائية.
حلّ بديل
الانتقال إلى Product > Scheme > Edit Scheme…
افتح علامة التبويب Run.
انقر على Options لعرض إعداداتك الحالية.
تأكَّد من إيقاف كلٍّ من GPU Frame Capture وMetal API Validation.
أنشئ تطبيقك وشغِّله.
راجِع CHANGELOG
Cocoapods للاطّلاع على مشاكل معروفة إضافية.
القيود
لا تتوافق حزمة تطوير البرامج (SDK) لـ ARCore على نظام التشغيل iOS مع طلب setWorldOrigin(relativeTransform:)
في ARKit.
اعتبارات الأداء
يزداد استخدام الذاكرة عند تفعيل واجهة برمجة التطبيقات ARCore API. من المتوقّع أن يزداد استهلاك البطارية في الجهاز بسبب زيادة استخدام الشبكة ووحدة المعالجة المركزية.