ปัญหาเกี่ยวกับแอป wechat
ฉันรู้มานานแล้วว่าข้อผิดพลาดของมินิโปรแกรมนั้นลึกซึ้งมาก หลังจากฝึกฝนมานานกว่าหนึ่งเดือน ฉันพบว่าหลุมพรางนี้สมควรได้รับจริงๆ...
อย่างไรก็ตาม โปรแกรมขนาดเล็กที่พัฒนาขึ้นนั้นเปิดตัวตามกำหนด ซึ่งยังคงคุ้มค่าแก่การเฉลิมฉลอง! - - ฮ่าฮ่า บันทึกจุดที่ทำให้คุณหยุดชั่วคราว
1. ข้อผิดพลาดที่พบในการพัฒนามินิโปรแกรม WeChat
- 1. {{}} ไม่สามารถดำเนินการวิธีการและสามารถจัดการได้เฉพาะการดำเนินการง่ายๆ เช่น "+ - * /" ตัวอย่างเช่น เมื่อข้ามผ่านรายการ จำนวนของแต่ละรายการจะต้องได้รับการฟอร์แมตเท่านั้น โดยสามารถจัดรูปแบบไว้ล่วงหน้าได้ js จากนั้น setData หนึ่งครั้ง (╯□╰)
- 2. คุณสามารถผ่านเท่านั้น คุณสามารถผ่านเท่านั้น คุณสามารถอัปเดตมุมมองผ่าน setData(), pitfall...
- 3. เรากำหนดว่าเส้นทางของหน้ามีได้เพียงห้าระดับเท่านั้น โปรดพยายามหลีกเลี่ยงการโต้ตอบหลายระดับ
- 4. เพจ A-->เพจ B, เพจ B กลับสู่ A, วิธีทริกเกอร์การรีเฟรชของ A โดยไม่ต้องเพิ่มระดับเพจ วิธีแก้ปัญหาที่อยู่ในใจในขณะนี้: เขียนตรรกะข้อมูลการเริ่มต้นของ A ในเหตุการณ์ onshow ของหน้า A
- 5.
undefinition จะถือเป็นสตริง if(xxx == "unknown") [การปรับให้เหมาะสมแบบวนซ้ำในเวอร์ชันที่ใหม่กว่า] - 6. เมื่อพบปัญหาแปลกๆ (เช่น สไตล์ ฯลฯ) ให้รีสตาร์ทเครื่องมือก่อน และเครื่องมือจะไม่ทำงานหลังจากพยายามซ้ำแล้วซ้ำอีก
- 7. ไม่รองรับแบบอักษรเว็บท้องถิ่น (ต้องใช้แบบอักษรออนไลน์) หลังจากการทดสอบพบว่าอุปกรณ์ Android บางตัวไม่สามารถแสดงได้อย่างถูกต้อง หลังจากประสบปัญหามากมาย ฉันค้นพบว่าเซิร์ฟเวอร์ซึ่งแต่เดิมจำเป็นต้องจัดเก็บแบบอักษรซึ่งจำเป็นต่อการรองรับข้ามโดเมน ให้ตายเถอะ ไม่มีการรายงานข้อผิดพลาดเมื่อทำการดีบั๊กบนโทรศัพท์มือถือ ฉันเกือบจะเลิกใช้แบบอักษรบนเว็บแล้ว ติดมานานมันเป็นกับดัก...
- 8. หากไม่สามารถรับทรัพยากรท้องถิ่นผ่าน CSS คุณสามารถใช้อิมเมจเครือข่ายหรือ base64 หรือใช้แท็ก
<image/>
- 9. Page.data ไม่สามารถดำเนินการได้โดยตรง [หลีกเลี่ยงการกำหนดและแก้ไข Page.data โดยตรง โปรดใช้ Page.setData เพื่อซิงโครไนซ์ข้อมูลกับเพจเพื่อแสดงผล]
- 10. ใช้ type="digit" สำหรับแป้นพิมพ์ตัวเลข
- 11. จะเกิดอะไรขึ้นหากคุณใช้ https แต่มีรายงานว่าคุณไม่สามารถสร้างการเชื่อมต่อที่ปลอดภัยกับเซิร์ฟเวอร์ได้ [คุณต้องกำหนดค่า nginx เพื่อกำหนดค่ามาตรฐานการเข้ารหัสของ https เป็น tls1.2 และสูงกว่า]
- 12. wx.setStorage(OBJECT) [ปัจจุบัน แต่ละมินิโปรแกรมจำกัดอยู่ที่ 5M]
- 13. การตรวจสอบข้อมูล [แบ็กเอนด์ WeChat: จำนวนการเข้าชมจริง/ภาพรวมเมื่อวาน/จำนวนผู้ใช้ที่เยี่ยมชมสะสม/หน้าที่เข้าชม TOP]
- 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 ยังไม่มีการวิเคราะห์ที่เกี่ยวข้อง 【2017-01-10】 WeChat อัปเดต API (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 จะตรวจสอบการเปลี่ยนแปลงไฟล์ตามค่าเริ่มต้น จากนั้นรีเฟรชโดยอัตโนมัติ แต่ข้อเสียคือรีเฟรชเต็มทุกครั้งแทนที่จะเปลี่ยนโมดูลแบบ hot ซึ่งจะส่งผลต่อความเร็วในการพัฒนา โดยเฉพาะสำหรับนักพัฒนาที่ชอบ Command + S บ่อย ๆ คุณจะพบว่ามินิโปรแกรมของคุณรีเฟรชอยู่ตลอดเวลา @มินเจียหลิว
- 28. มินิโปรแกรม WeChat รองรับส่วนประกอบ
web-view
ตั้งแต่ไลบรารีพื้นฐาน 1.6.4
นั่นคือมินิโปรแกรมรองรับความสามารถในการฝังหน้าเว็บ อย่างไรก็ตาม เมื่อใช้งานพบว่าหน้าเว็บไม่สามารถทำได้ แสดงในเครื่องมือสำหรับนักพัฒนาซอฟต์แวร์ แต่ตัวอย่างบนมือถือสามารถ [อัปเกรด] ไคลเอนต์ WeChat เวอร์ชันล่าสุด] เหตุผลก็คือไลบรารีพื้นฐานที่ใช้ไม่รองรับส่วนประกอบ web-view
ซึ่งสามารถแก้ไขได้โดยการเลือกไลบรารีพื้นฐานล่าสุด ดังต่อไปนี้:
- 29. ไม่รองรับการสื่อสารระหว่าง H5 และมินิโปรแกรม และไม่สามารถสื่อสารผ่านที่จัดเก็บในเครื่องหรือวิธีอื่นได้ หากคุณจำเป็นต้องพกพาพารามิเตอร์จริงๆ คุณสามารถลองพกพาพารามิเตอร์เหล่านั้นใน URL
web-view
แต่ไม่แนะนำ สามารถได้รับอนุญาตโดยใช้บัญชีอย่างเป็นทางการ ความสามารถในการเปิดมุมมองเว็บ (หน้าเว็บจำเป็นต้องฝัง jssdk): อินเทอร์เฟซ JSSDK ที่รองรับในหน้าเว็บ: - 30. ปัจจุบัน web-view ไม่รองรับการชำระเงิน WeChat
- 31. ในมินิโปรแกรม ส่วน
catch
ของ try...catch
จะใช้ throw
เพื่อโยนข้อผิดพลาด ซึ่ง try...catch
ภายนอกไม่สามารถตรวจจับได้
2. การกำหนดค่าที่เกี่ยวข้องก่อนการพัฒนามินิโปรแกรม
- 1. เข้าสู่ระบบ ---> ผู้ดูแลระบบสแกนโค้ด QR -> การตั้งค่า -> การตั้งค่าการพัฒนา -> สร้าง AppSecrect
- 2. เข้าสู่ระบบการกำหนดค่าเซิร์ฟเวอร์ ---> ผู้ดูแลระบบสแกนโค้ด QR -> การตั้งค่า -> การตั้งค่าการพัฒนา -> ชื่อโดเมนเซิร์ฟเวอร์ -> สแกนโค้ด QR
- 3. ผูกข้อมูลประจำตัวผู้ใช้ของนักพัฒนา -> นักพัฒนา -> นักพัฒนาโค้ด QR สูงสุด 10 คน
- 4. ผูกข้อมูลประจำตัวผู้ใช้ของผู้มีประสบการณ์ -> ผู้มีประสบการณ์ -> สแกนโค้ด QR ไปยังผู้มีประสบการณ์ 20 คน
3. การเปิดตัวมินิโปรแกรม
การเผยแพร่สามารถทำได้ด้วยบัญชีผู้ดูแลระบบเท่านั้น ขั้นตอนมีดังนี้:
- ออกจากบัญชีนักพัฒนาซอฟต์แวร์ในเครื่องมือการพัฒนา
- ผู้ดูแลระบบสแกนรหัส QR เพื่อเข้าสู่ระบบเครื่องมือสำหรับนักพัฒนา อัปโหลด-->ตั้งค่าพื้นหลัง WeChat เป็นเวอร์ชันทดลอง-->ตรวจสอบ-->เผยแพร่
หมายเหตุ: เวลาในการตรวจสอบจะแปรผัน 2-6 วัน
4. การรวบรวมสาเหตุของการไม่ผ่านการตรวจสอบ
- 1. การแนะนำมินิโปรแกรมไม่ได้แนะนำฟังก์ชั่นของมินิโปรแกรม
- 2. หมวดหมู่ไม่สอดคล้องกับเนื้อหาที่ให้ไว้ในเพจ
- 3. บริการและเนื้อหาที่จัดทำโดยมินิโปรแกรมจะต้องเป็นทางการและไม่สามารถส่งเป็นเนื้อหาทดสอบหรือส่งเป็นเนื้อหาทดสอบหลายครั้ง
- 4. หากมีเนื้อหาเสียงและวิดีโอ โปรดเพิ่มหมวดหมู่ที่เกี่ยวข้อง
- 5. รูปภาพและข้อความในหน้าแรกซ้อนทับกัน ดังนั้นจึงแนะนำให้ปรับให้เหมาะสม
- 6. สามารถเลือกช่องค้นหาได้หลังจากคลิกไม่กี่ครั้งเท่านั้น ไม่มีการตอบกลับเมื่อคลิกที่ความคิดเห็นของเพจ ความละเอียดและขนาดของรูปภาพหน้าจะบิดเบี้ยว
- 7.บางภาพแสดงว่าถูกบีบอัดและการตรวจร่างกายไม่ดี
- 8. โปรแกรมขนาดเล็กที่มีระบบบัญชีจะต้องรองรับการเข้าสู่ระบบที่ได้รับอนุญาตของ WeChat นอกเหนือจากวิธีการเข้าสู่ระบบของตนเอง
- 9. สำหรับบริการที่ต้องเข้าสู่ระบบเพื่อใช้งาน โปรดระบุบัญชีทดสอบ
- 10. มีการซื้อขายไอเทมเสมือนทางออนไลน์ ระบบ iOS ต้องใช้ IAP ในขณะนี้ มินิโปรแกรมยังไม่ต้องชำระเงิน โปรดใส่ใจกับการติดตามผล
- 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 } ) ;
}
} ) ;
}