過去的錯誤就是將來的智慧和成功。
——英國俗語
小夥伴們在使用我們開放平臺提供的能力服務時,或多或少都遇到過大大小小的技術問題,而錯誤碼就是其中比較常見的一類。
為了快速的定位問題,我臺一個叫“夥(ji)伴(shu)關(zhi)懷(chi)”的神秘組織決定拿出一個小本本,將 “那些年遇到過的錯誤碼及其背後的原因”記錄下來。作為經驗流傳後世~~
作為備忘錄的第一份檔案,我們就從最常見的10407錯誤碼開始吧。
先說一個悲傷的故事(霧)
從前,有個叫小鹿的程序員,他接到產品經理的需求,需要調研一下訊飛開放平臺的AI能力。他決定按照以下規劃完成任務:
星期一
註冊賬號、創建幾個應用、添加服務、下載幾個SDK。
星期二
導入SDK包中的官方Demo,完美運行,體驗幾把人工智能。
星期三
簡單看一下新手指南、開發文檔之後,躍躍欲試地參照demo開始寫自己的項目代碼。
此時的小鹿堅信這波很穩:感覺一天就能仿個訊飛輸入法出來呢~~
到了週三見證奇蹟的時刻,出現的是——
10407?用戶校驗失敗?demo都好好的,為什麼我一寫就失敗了?都是什麼鬼?
帶著疑問,小鹿在訊飛平臺官網提了個工單,訊飛妹子的答覆是:
10407的原因是appid與庫文件不匹配,請您確保appid與庫是匹配的。
相信很多小夥伴都遇到過和小鹿一樣懵逼的問題。
為什麼會有10407?
為什麼appid和庫,前一天還在Demo裡默契配合,到我的工程裡面就是要分手的節奏呢?
要解答疑問,首先來了解下這一對兒。
庫文件
庫文件,可以簡單的看成是一種倉庫,它提供一些可以直接拿來用的變量、函數或類。
大家都知道,我們的SDK是支持多平臺的版本,每個平臺的庫的表現形式又是不一樣的。例如:
1)Android平臺、java平臺、Linux 平臺的是so庫;
2)Windows平臺的是dll;
3)iOS平臺的是framework。
然後,下面是重點——
相同功能的庫文件,如果是從不同的應用下載的,那就是不一樣的。
而不同的應用,有著不同的appid。
appid
appid,創建一個應用的同時它就誕生了,可以理解為是這個應用在訊飛開放平臺的“身份證號碼”,它是唯一的,一般是由8位16進制數字組成的字符串。
在我們下載的SDK中和appid相關的元素有:
1.SDK壓縮包文件的命名中有appid;
2.Demo工程的初始化(MSPLogin或者createUtility等)中寫了appid;
3.SDK包中所有的庫文件中都隱式的烙印了appid;
4.SDK包中所有的jet資源文件(離線業務中才有)中也烙印了appid。
以上四處appid,如果屬於一個SDK包中,就都是相同的。
然後再結合一下前面提到的,不同應用上下載的相同功能的庫文件不一樣。
所以,如果你的庫文件是從其他應用下載的,它的appid與當前應用的appid可能就不一樣哦。
因此,在我們使用相關的語音功能的時候,SDK的權限檢查模塊會嚴格檢查他們的一致性,就像是你進站安檢的時候,安檢人員會要求你同時出示車票和身份證,二者一致才會允許你進站。一旦發現上述四處中第2和第3點的appid不一致,就會報錯“10407用戶校驗失敗”。
有的小夥伴可能會問:
為什麼要設計這樣一種機制?感覺多此一舉啊!
我們試想一個場景,假設我們把庫文件的校驗機制去掉了,那麼全平臺所有人下載的聽寫庫文件都是一模一樣的,那麼問題來了:別人(壞人)只要知道了你的appid就可以配合自己的庫文件盜用你的服務,消耗你花錢買的裝機量或者是在線服務量,而appid在平時的技術交流和工程代碼中大多是明文書寫的,這個風險是我們都不願承擔的。
好了,現在我們來看看當你遇到錯誤碼10407時,可能由哪些問題引起。
錯誤碼10407背後的幾種可能:
第一種:一致性不符
集合前文所說的機制,出現錯誤碼最簡單的原因就是確實是你手動搞錯了Appid和庫文件。也許是陰差陽錯的拷貝了另一個應用的庫文件,也許是你更換了Appid卻忘記更換庫文件。
解決方法:
和運行正常的Demo去比對或者直接拷貝Demo的庫文件到你的程序中即可。
第二種:路徑不正確
這是一個一旦遇到,你排查三天三夜也不一定能找到原因的情況,就是已將正確的庫文件放到了你以為正確的位置,而程序找到的卻是其他路徑下的庫文件。
以在Windows平臺的SDK為例,demo運行的時候會搜索加載庫文件,一般來說系統加載庫時會去以下幾個地方去尋找:
1.應用的當前運行目錄;
2.由系統環境變量指定的Path目錄;
3.C盤的相關目錄
那麼如果程序優先去第2或者第3個位置搜索,而碰巧這些位置真有其他appid的訊飛庫文件的話,那也就必然會出現錯誤碼10407了。
Windows以外的其他平臺同理,請以此類推。
解決辦法:
確認誤找到的庫文件是否是必須的,若不是可以直接刪除;
設置一下項目加載庫文件的搜索範圍或者搜索優先級;
釜底抽薪的方法,把項目中的訊飛庫文件重命名,並訊飛SDK接口中設置自定義的庫名稱,只要名稱夠特別,就不怕“撞衫”了。
附Android設置庫名稱的方法:
第三種:真·bug
好吧,這是截至目前還沒有遇到過的,理論上的一種可能性。如果以上的可能性你都缺陷排除了,那麼請將Appid、詳細的msc日誌信息、庫文件、已排查過的內容等通過發郵件或者提工單發送過來,我們會盡快排查原因找到解決方案的。
如果你是技術達人,發現了錯誤碼10407新的“不再相愛”的原因,也歡迎到我們的論壇(http://bbs.xfyun.cn)分享經驗,我們和廣大的開發者都會不勝感激的。
最後附上技術問題排查五步走,希望可以減少你的溝通成本:
1.運行SDK中的Demo看是否會重現,若未再現請對照Demo檢查自己的程序。
2.分析MSC日誌(http://bbs.xfyun.cn/forum.php?mod=viewthread&tid=9870)
3.查看官方在線文檔及常見問題解決辦法
1)常見錯誤碼解決辦法:https://shimo.im/sheet/w3yUy39uNKs0J7DT
2)小白分享常見QA:
http://bbs.xfyun.cn/search.php?mod=forum&searchid=463948&orderby=lastpost&ascdesc=desc&searchsubmit=yes&kw=%E5%B0%8F%E7%99%BD%E5%88%86%E4%BA%AB
經典新手問題系列:
http://bbs.xfyun.cn/search.php?mod=forum&searchid=463952&orderby=lastpost&ascdesc=desc&searchsubmit=yes&kw=%E7%BB%8F%E5%85%B8%E6%96%B0%E6%89%8B%E9%97%AE%E9%A2%98%E7%B3%BB%E5%88%97
4.若上述資料中沒有您遇到的問題,可以先到論壇搜索先例:http://bbs.xfyun.cn
5.還未解決的話,向訊飛技術人員求助(郵件發到[email protected],或訊飛開放平臺-控制檯-提交問題)
※請精煉的描述您遇到的問題,以及相關線索(截圖、錯誤碼、日誌、您已調查過的內容等)
捕捉更多有用的信息
閱讀更多 AI研究所 的文章