مشكلات تطبيق wechat
لقد عرفت منذ فترة طويلة أن مأزق البرامج المصغرة عميق جدًا، وبعد أكثر من شهر من التدريب، وجدت أن هذا المأزق يستحقه بالفعل...
ومع ذلك، تم إطلاق البرنامج الصغير الذي تم تطويره كما هو مقرر، والذي لا يزال يستحق الاحتفال! ! ! هههه سجل النقاط التي تجعلك تتوقف.
1. العقبات التي واجهت تطوير برامج WeChat المصغرة
- 1. لا يمكن لـ {{}} تنفيذ الأساليب ويمكنه فقط التعامل مع العمليات البسيطة مثل "+ - * /". على سبيل المثال، عند اجتياز قائمة، يجب تنسيق مقدار كل عنصر فقط Node.js ثم قم بتعيين البيانات مرة واحدة (╯□╰)
- 2. يمكنك فقط المرور، يمكنك فقط المرور، يمكنك فقط تحديث العرض من خلال setData ()، المأزق ...
- 3. نشترط أن يكون مسار الصفحة خمسة مستويات فقط، يرجى محاولة تجنب التفاعلات متعددة المستويات.
- 4. الصفحة أ-->الصفحة ب، تعود الصفحة ب إلى أ، وكيفية تشغيل تحديث أ دون زيادة مستوى الصفحة. الحل الذي يتبادر إلى ذهنك في الوقت الحالي: اكتب منطق بيانات التهيئة لـ A في حدث onshow للصفحة A.
- 5.
يتم التعامل مع غير محدد كسلسلة if(xxx == "undef") [التحسين التكراري في الإصدارات الأحدث] - 6. عند مواجهة مشاكل غريبة (مثل الأنماط وغيرها)، أعد تشغيل الأداة أولاً، ولن تعمل أبدًا بعد المحاولات المتكررة.
- 7. خطوط الويب المحلية غير مدعومة (يجب استخدام الخطوط عبر الإنترنت، بعد الاختبار، تبين أن بعض أجهزة Android لا يمكن عرضها بشكل صحيح). بعد الكثير من المتاعب، اكتشفت أن الخادم الذي كان يحتاج في الأصل إلى تخزين الخطوط يحتاج إلى دعم النطاقات المشتركة. اللعنة، لم يتم الإبلاغ عن أي أخطاء عند تصحيح الأخطاء على الهاتف المحمول، لقد تخليت تقريبًا عن خطوط الويب. لقد كنت عالقاً لفترة طويلة، إنه فخ...
- 8. إذا لم يكن من الممكن الحصول على الموارد المحلية من خلال CSS، فيمكنك استخدام صور الشبكة، أو base64، أو استخدام العلامة
<image/>
. - 9. لا يمكن تشغيل Page.data مباشرة [تجنب تعيين بيانات الصفحة وتعديلها مباشرة، يرجى استخدام Page.setData لمزامنة البيانات مع الصفحة لعرضها]
- 10. استخدم type="digit" للوحة المفاتيح الرقمية
- 11. ماذا يحدث إذا كنت قد استخدمت https ولكن يُبلغك أنه لا يمكنك إنشاء اتصال آمن بالخادم [تحتاج إلى تكوين nginx لتكوين معيار التشفير لـ https إلى tls1.2 وما فوق]
- 12. wx.setStorage(OBJECT) [حاليًا، يقتصر كل برنامج صغير على 5 ميجا]
- 13. مراقبة البيانات [واجهة WeChat الخلفية: العدد الفعلي للزيارات/نظرة عامة على الأمس/العدد التراكمي للمستخدمين الذين تمت زيارتهم/أعلى الصفحات التي تمت زيارتها]
- 14. قطعة أثرية لتصحيح أخطاء WeChat، ngrok، انظر ngrok
- 15. أضف تأثير النقر للعرض [تحتاج إلى تشغيل تأثير التمرير]:
< view hover hover-class =" item-hover " >
- 16. طريقة تصحيح أخطاء ترخيص المستخدم [أدوات التطوير-》مسح بيانات ترخيص الهاتف المحمول (بيانات ترخيص الهاتف المحمول-مسح ذاكرة التخزين المؤقت)]
- 17. عند تحميل البرنامج الصغير لأول مرة على هاتف Android، على الصفحة الرئيسية، سيتم تحميل طريقة onshow مرتين لسبب غير مفهوم، ولكن لن يتم تحميله على iPhone نظرًا لأنه يجب تشغيله في onshow للحصول على معلومات المستخدم، سيقوم النظام بالتحميل عند العرض مرتين. يتم الإبلاغ عن خطأ في الخلفية. . .
- 18. تعطيل القائمة المنسدلة للصفحة: اضبط "disableScroll": صحيح.
- 19. سيظهر getAppConfig:fail ضمن Android ولا يمكن الحصول على معلومات المستخدم. مشكلة في WeChat، قم بتنزيل أحدث حزمة تثبيت WeChat
- 20. لا يمكن للخلفية قبول بيانات POST، ولكن يمكنها استقبال معلمات طلب GET.
url: url,
data: data,
method: "POST",
dataType: "json",
header: {
'content-type': 'application/x-www-form-urlencoded' //==> 此处若为application/json则服务端无法获取POST的参数
}
- 21. بعد أن يرفض المستخدم التفويض عند بدء تشغيل البرنامج المصغر لأول مرة، لا يمكن استحضار مربع التفويض المنبثق في المرة القادمة، وسيتم تذكر اختيار المستخدم الأخير بشكل افتراضي. لم يتم العثور على حل حتى الآن، وليس لدى WeChat أي تحليل ذي صلة. 【10-01-2017】 قام WeChat بتحديث واجهة برمجة التطبيقات (wx.authorize(OBJECT)) لدعم استحضار مربعات التفويض المنبثقة 【2017-07-05】
- 22. للانتقال إلى صفحة بها شريط علامات تبويب، يجب عليك استخدام wx.switchTab(). يتم طرح هذا السؤال في مجموعات مختلفة كل يوم تقريبًا! ! !
- 22. عند ربط المطورين/الخبرة، تذكر تأكيد الدعوة على هاتفك المحمول. (الكثير من الناس سألوا)
- 23. قامت خلفية WeChat بتحديث اسم المجال القانوني للطلب، ويمكنك الانتقال مباشرة إلى أدوات تطوير WeChat-->المشروع-->معلومات التكوين-->التحديث، وسيصبح ساري المفعول على الفور.
- 24. لا يوفر البرنامج المصغر الرسمي مثالاً لفك تشفير معلومات تسجيل الدخول لإصدار Java. يمكنك استخدام هذا العرض التوضيحي لفك تشفير إصدار Java.
- 25. عند استخدام wx:for للاجتياز، من الأفضل إضافة wx:key="{{item.id}}". إذا كنت تعلم بوضوح أن القائمة ثابتة، أو لا تحتاج إلى الانتباه إلى ترتيبها ، يمكنك اختيار تجاهله، ومع ذلك، إذا تغير المصفوفة التي تم اجتيازها، فقد يتغير تسلسل البيانات.
- 26. إن صفحة تطوير البرنامج المصغر هي rpx، لذلك يوصى باستخدام حجم iPhone 6 لمسودة التصميم. للحصول على التخطيط المرن، يرجى الرجوع إلى هذه المقالة
- 27. سيقوم تطبيق WeChat الصغير بمراقبة تغييرات الملف بشكل افتراضي ثم يتم تحديثه تلقائيًا. لكن العيب هو أنه يتم تحديثه بالكامل في كل مرة بدلاً من الاستبدال السريع للوحدات، مما سيؤثر على سرعة التطوير، خاصة بالنسبة للمطورين الذين يحبون Command + S المتكرر، ستجد أن برنامجك الصغير يتم تحديثه باستمرار. @مينجي ليو
- 28. يدعم برنامج WeChat mini مكون
web-view
منذ المكتبة الأساسية 1.6.4
، أي أن البرنامج المصغر يدعم القدرة على تضمين صفحات الويب، ومع ذلك، عند استخدامه، وجد أن صفحة الويب لا يمكن أن تكون كذلك يتم عرضها في أدوات المطور، ولكن يمكن [ترقية] معاينة الهاتف المحمول إلى أحدث إصدار من عميل WeChat]. والسبب هو أن المكتبة الأساسية المستخدمة لا تدعم مكون web-view
، ويمكن حل ذلك عن طريق تحديد أحدث مكتبة أساسية. على النحو التالي:
- 29. الاتصال بين H5 والبرامج الصغيرة غير مدعوم ولا يمكن الاتصال به من خلال التخزين المحلي أو وسائل أخرى. إذا كنت بحاجة ماسة إلى حمل المعلمات، فيمكنك محاولة حملها في عنوان URL
web-view
، ولكن لا يوصى بذلك يمكن أن يؤذن باستخدام الحساب الرسمي. الإمكانيات المفتوحة لعرض الويب (تحتاج صفحات الويب إلى تضمين jssdk): واجهات JSSDK المدعومة في صفحات الويب: - 30. لا يدعم عرض الويب حاليًا الدفع باستخدام WeChat.
- 31. في البرنامج الصغير، جزء
catch
من try...catch
يستخدم throw
لإلقاء خطأ، والذي لا يمكن اكتشافه بواسطة try...catch
.
2. التكوينات ذات الصلة قبل تطوير البرنامج المصغر
- 1. تسجيل الدخول--->يقوم المسؤول بمسح رمز الاستجابة السريعة-->الإعدادات-->إعدادات التطوير-->إنشاء AppSecrect
- 2. تسجيل الدخول إلى تكوين الخادم--->يقوم المسؤول بمسح رمز الاستجابة السريعة-->الإعدادات-->إعدادات التطوير-->اسم مجال الخادم-->مسح رمز الاستجابة السريعة ضوئيًا
- 3. ربط هوية مستخدم المطور-->المطور-->ما يصل إلى 10 مطورين لرمز الاستجابة السريعة
- 4. قم بربط هوية المستخدم الخاص بالخبرة-->الخبرة-->امسح رمز الاستجابة السريعة ضوئيًا إلى 20 خبيرًا
3. إصدار برنامج صغير
لا يمكن النشر إلا باستخدام حساب المسؤول. الخطوات هي كما يلي:
- الخروج من حساب المطور في أدوات التطوير
- يقوم المسؤول بمسح رمز الاستجابة السريعة لتسجيل الدخول إلى أدوات المطور، والتحميل-->تعيين خلفية WeChat كإصدار تجريبي-->المراجعة-->النشر
ملاحظة: وقت المراجعة متغير، 2-6 أيام
4. جمع أسباب عدم اجتياز المراجعة
- 1. مقدمة البرنامج المصغر لا تعرض وظائف البرنامج المصغر.
- 2. الفئة غير متوافقة مع المحتوى المقدم في الصفحة
- 3. يجب أن تكون الخدمات والمحتوى الذي يقدمه البرنامج المصغر رسميًا ولا يمكن تقديمه كمحتوى اختباري أو تقديمه كمحتوى اختباري عدة مرات.
- 4. إذا كان يحتوي على محتوى صوتي وفيديو، فيرجى إضافة الفئات المقابلة ذات الصلة.
- 5. تتداخل الصور والنصوص الموجودة على الصفحة الرئيسية مع بعضها البعض، لذا يوصى بتحسينها.
- 6. لا يمكن تحديد مربع البحث إلا بعد بضع نقرات. لا توجد استجابة عند النقر على تعليقات الصفحة. دقة وحجم صور الصفحة مشوهة.
- 7. بعض الصور تظهر أنها مضغوطة والفحص البدني لم يكن جيداً.
- 8. يجب أن تدعم البرامج الصغيرة المزودة بنظام حساب تسجيل الدخول المعتمد لـ WeChat بالإضافة إلى طرق تسجيل الدخول الخاصة بها.
- 9. بالنسبة للخدمات التي يجب تسجيل الدخول لاستخدامها، يرجى تقديم حساب تجريبي
- 10. يوجد تداول للعناصر الافتراضية عبر الإنترنت، ويتطلب نظام iOS الشراء عبر الإنترنت، ولا يدفع البرنامج المصغر في الوقت الحالي.
- 11. يجب أن يكون المحتوى الأساسي للصفحة المقابلة لفئة خدمة البرنامج المصغر متوافقًا مع تلك الفئة.
- 12. يجب التأكد من أن المستخدمين يمكنهم استخدام فئة الخدمة في هذه الصفحة ويجب ألا يختبئوا أو يقومون بقفزات متعددة.
- 13. لا تعرض أو توصي ببرامج مصغرة تابعة لجهات خارجية. مثال: لا يمكن القيام بالتنقل بين البرامج المصغرة، أو الترويج لرابط البرامج المصغرة، أو تصنيفات البرامج المصغرة، وما إلى ذلك.
- 14. هناك سلوكيات تحفيزية في محتوى صفحة البرامج المصغرة، بما في ذلك على سبيل المثال لا الحصر، الحث على المشاركة، الحث على الإضافة، الحث على متابعة الحسابات العامة، الحث على التنزيل، إلخ. البرامج التي تتطلب من المستخدمين المشاركة أو الإضافة أو المتابعة أو تنزيلها قبل أن تتمكن من العمل، تحتوي على برامج صغيرة تعبر أو تشير ضمنًا إلى كتابة النصوص، وصور، وأزرار، وتراكبات، ونوافذ منبثقة، وما إلى ذلك يتشاركها المستخدمون، وبرامج صغيرة تحث المستخدمين على المشاركة والانتشار من خلال إغراء الفوائد، وبرامج صغيرة استخدام كلمات مبالغ فيها لإجبار المستخدمين أو حثهم على المشاركة أو الإجبار أو الحث. سيتم رفض أي برامج صغيرة يضيفها المستخدمون؛
- 15. منع التشغيل التلقائي للوسائط المتعددة مثل مقاطع الفيديو والموسيقى والأصوات.
- 16. إذا كان البرنامج المصغر يحتوي على نظام حساب، فيجب أن يوفر خيار حساب "تسجيل الخروج" الذي يمكن استخدامه بشكل طبيعي ويسهل العثور عليه.
- 17. لا يجوز أن يتضمن محتوى البرنامج المصغر المقامرة والاختبارات والسحوبات.
- 18. لا يمكن أن يوجد محتوى الاختبار في محتوى صفحة البرنامج المصغر؛ أمثلة: الكهانة، اليانصيب، الأبراج، إلخ.
حالات الرفض الشائعة على منصات برامج WeChat المصغرة الأخرى
5. التوثيق والمجتمع
- 1. الوثائق الرسمية
- 2. الأسئلة والأجوبة الرسمية
- 3. المجتمع الرسمي
- 4. دليل الوصول للبرنامج المصغر
- 5. الأسئلة الشائعة حول البرامج المصغرة
6. الكود
- 1. قم بتغليف واجهة طلب بدء WeChat في حالة فشل تسجيل الدخول، سيتم بدء طلب تسجيل الدخول تلقائيًا بشكل افتراضي.
/**
* 发起的是 HTTPS 请求
* @pram url: 请求地址,协议必须为https
* @pram data 请求参数请求参数
* @param success 请求成功回调
* @param fail 请求失败回调
* @param complete 请求完成(成功或者失败)回调
*/
function request ( url , data , success , fail , complete ) {
var _url = url ,
_data = data ,
_success = success ,
_fail = fail ,
_complete = complete ;
wx . request ( {
url : url ,
data : data ,
method : "POST" ,
dataType : "json" ,
header : {
'content-type' : 'application/x-www-form-urlencoded' ,
'Client-Agent' : getSystemInfo ( ) ,
'WX-SESSION-ID' : wx . getStorageSync ( constant [ 'WX-SESSION-ID' ] ) //每次请求带上登录标志
} ,
success : function ( res ) {
if ( res . data . code == "-9999" ) { //会话失效重新登录
requestLogin ( function ( ) {
constant [ 'NUM_TRY_LOGIN' ] ++ ;
//设置请求上限,防止重复提交并死循环
if ( constant [ 'NUM_TRY_LOGIN' ] < constant [ 'LIMIT_NUM_TRY_LOGIN' ] ) {
request ( _url , _data , _success , _fail , _complete ) ;
}
} ) ;
return ;
}
if ( res . data . code == "0" ) {
if ( typeof _success == "function" ) {
_success ( res . data ) ;
}
} else {
wx . showToast ( { title : res . data . msg , icon : 'loading' , duration : 2000 } ) ;
return ;
}
} ,
fail : function ( res ) {
if ( typeof _fail == "function" ) {
_fail ( res ) ;
}
if ( typeof _fail == "string" ) { //请求失败的弹框提示
wx . showToast ( { title : _fail , icon : 'loading' , duration : 2000 } ) ;
}
} ,
complete : function ( res ) {
if ( typeof _complete == "function" ) {
_complete ( res ) ;
}
}
} ) ;
}
- 2. طلب واجهة تسجيل الدخول
/**
* 请求登录,获取用户相关信息
* @param callback
*/
function requestLogin ( callback ) {
var _callback = callback ;
wx . login ( {
success : function ( event ) {
// 获取到请求码,继续请求用户的基本信息
if ( event . code ) {
var code = event . code ;
wx . getUserInfo ( {
success : function ( res ) {
var data = {
code : code ,
encryptedData : res . encryptedData ,
iv : res . iv ,
signature : res . signature ,
rawData : res . rawData
}
var url = domain + "/wx_xxx" ; //请求登录地址
request ( url , data ,
function ( res ) { //success
if ( res . code == "0" ) {
//此处可以将服务端返回的登录状态保存起来
wx . setStorageSync ( constant [ 'WX-SESSION-ID' ] , res . object . sessionId ) ;
if ( typeof _callback == "function" ) {
_callback ( ) ;
}
}
} ,
function ( res ) { //fail
wx . showToast ( { title : '请求登录失败' , icon : 'loading' , duration : 2000 } ) ;
}
) ;
} ,
fail : function ( res ) {
//用户拒绝授权
if ( res . errMsg == "getUserInfo:cancel" || res . errMsg == "getUserInfo:fail auth deny" ) {
wx . redirectTo ( { //跳转至未授权页面
url : '../xxx-page/xxx-page'
} ) ;
}
}
} )
} else {
wx . showToast ( { title : '微信登录失败' , icon : 'loading' , duration : 2000 } ) ;
}
} ,
fail : function ( res ) {
wx . showToast ( { title : '微信登陆失败!' , icon : 'loading' , duration : 2000 } ) ;
}
} ) ;
}