WeChat ミニゲームのプライバシー許可インターフェイスが Cocos2.4.11 にアップグレード ユーザーのニックネームとアバターを取得する最新の方法 20230823

       コンソールのログ出力が頻繁に消えるのはなぜですか?
  wxss コードが頻繁に失敗するのはなぜですか?
  wxml のレイアウトが乱雑になるのはなぜですか?
  それは道徳の喪失ですか? それとも人間性の欠如ですか?一緒に散歩 して科学を学び
  ましょう 


序文

8 月 15 日に同僚からゲームが開けないというフィードバックを受け、ミニゲームの体験版を確認したところ、アバター取得インターフェイスで wx.getUserInfo() がステータス コード 1026 を返すというエラーが報告されました
。こうして騙しの旅が始まった…


文章

この問題が発生したとき、私はブログを書くのが面倒だったので、発表を調べたり、wx 公式ドキュメントを調べたり、csdn で検索したり、WeChat 公式開発コミュニティを調べたりしました。それらはすべて、小さなプログラムや公式の開発コミュニティでさえも解決策を見つけました。小さなゲームのドキュメントです。正しく読めば、ここにコロンが抜けているはずです。この場所だけではありません。少なくとも 5 ~ 6 か所で発生しました。段階的な解決策を次に示します。わかりましたか?

 1. まず、WeChat 公式プラットフォームに移動して、プライバシー許可を調整します
。WeChat パブリック プラットフォーム => 設定 => サービス内容の説明

最初のユーザー プライバシー保護ガイドラインでは、まずクリックして使用するものを選択し、次に使用する必要があるものをすべてチェックし、すべて入力して保存します。

その後、2 番目のプライバシー認証ポップアップ ウィンドウが表示され、「オンになっているとオフにすることはできません。無視して直接アクティブ化してください。」と表示されましたが、アクティブ化しなかったため、同じ間違いを繰り返し、一晩中コードを書きました。

OK この時点で、ここでアクティベートする必要があるすべての WeChat パブリック プラットフォームがアクティベートされ、コードがアップロードされました。

 2. このプライバシー許可を以前に何度か変更しているため、最初に説明します。これまでの取得方法はユーザー情報を取得することでした。取得できない場合は、wx.createUserInfoButton() を呼び出してボタンを生成します。ボタンをクリックします。ユーザー認証イベントをトリガーします。これは外側の層にあります。認証に一致するインターフェイスの別の層を追加すると、問題は解決します。

これは私が以前に書いたことです:

wx.getUserInfo({
            success(res) {
                console.log("获取权限成功:", res);

                let rawData = JSON.parse(res.rawData)
                userInfo.avatarUrl = rawData.avatarUrl;
                userInfo.nickName = rawData.nickName;
                _this.login2()//这是成功获取权限后的逻辑代码

            },
            fail(err) {
                console.log(err);
                //这里是生成那个授权按钮
                var info = wx.getSystemInfoSync()
                let button = wx.createUserInfoButton({
                    type: 'text',
                    text: '授权并进入游戏',
                    style: {
                        left: info.screenWidth / 2 - 100,
                        top: 600,
                        width: 200,
                        height: 40,
                        lineHeight: 40,
                        backgroundColor: '#8D99D5',
                        color: '#ffffff',
                        textAlign: 'center',
                        fontSize: 16,
                        borderRadius: 4
                    }
                })
                button.onTap((res) => {
                    console.log(res);
                    //用户按过按钮后 同意或拒绝后的回调
                    button.hide()
                    _this.login()//这里指本方法 通过能否获取到具体的用户昵称头像内容去判断用户是否同意 同意就走wx.getUserInfo中的success了 不会再到fail里新建按钮了
                })
            },
        })

次に、wx.createUserInfoButton() の外側にインターフェイスを設定すると、次のようになります。

wx.getSetting({
            success(res) {
                if (res.authSetting['scope.userInfo']) {
                    // 已经授权,可以直接调用 getUserInfo 获取头像昵称
                    console.log("已经授权,可以直接调用 getUserInfo 获取头像昵称");

                    wx.getUserInfo({
                        success(res) {
                            console.log("获取权限成功:", res);

                            let rawData = JSON.parse(res.rawData)
                            userInfo.avatarUrl = rawData.avatarUrl;
                            userInfo.nickName = rawData.nickName;
                            _this.login2()

                        },
                        fail(err) {
                            console.log("获取权限失败:", err);
                        }
                    })
                } else {
                    wx.requirePrivacyAuthorize({
                        success: res => {
                            console.log("原因::", res);

                            // 非标准API的方式处理用户个人信息
                            var info = wx.getSystemInfoSync()
                            let button = wx.createUserInfoButton({
                                type: 'text',
                                text: '授权并进入游戏',
                                style: {
                                    left: info.screenWidth / 2 - 100,
                                    top: 600,
                                    width: 200,
                                    height: 40,
                                    lineHeight: 40,
                                    backgroundColor: '#8D99D5',
                                    color: '#ffffff',
                                    textAlign: 'center',
                                    fontSize: 16,
                                    borderRadius: 4
                                }
                            })
                            button.onTap((res) => {
                                console.log("结果::", res);

                                button.hide()
                                _this.login()
                            })
                        },
                        fail: (res) => {
                            console.log("拒绝", res);

                        },
                        complete: (res) => {
                            console.log("结果", res);
                        }
                    })
                }
            }
        })

公式ドキュメントに記載されている wx.requirePrivacyAuthorize の具体的な手順によると、ユーザー情報を取得しない場合は、まず wx.requirePrivacyAuthorize を呼び出してユーザーが [同意する] をクリックしたかどうかを判断し、その後、次のボタンの作成に進みます。ニックネームとアバターの取得に同意します。ロジックはこれで完成です。

3. このビルドは、上記のコード ビルドを WeChat 開発者ツールに公開します。

まず、デバッグ ライブラリを 2.32.3 以降に変更します。私はそれを 3.0.1 に直接変更しました。昨日見たところ、このプライバシー許可インターフェイスは 2.32.3 とのみ互換性があるため、ここにいる 82% の人が今日グレースケールに変更することを選択したことがわかりました。またはそれ以上。

次に、これを project.config.json に追加します

"__usePrivacyCheck__": true,

わかりました。以上です。覚えていないことや修正したいことがあれば追加します。皆さんの修正を歓迎します。


要約する

WeChat の公式発表はこちらミニゲーム プライバシー コンプライアンス開発ガイド | WeChat オープン コミュニティ

これは私のコミュニティによって投稿されたヘルプ投稿です。誰も注目しませんでしたが、私は自分で回答しました。これは解決策と見なすことができます。ミニ ゲームで wx.getUserInfo にはどのような権限が必要ですか ? | WeChatオープンコミュニティ

WeChat の開発ドキュメントにある 4 つの新しいプライバシー許可インターフェイスは次のとおりです。これらは、wx.requirePrivacyAuthorize(Object object) | WeChat Open Documentsに属します。 

昨日、幽霊祭りの最中に会社で遅くまで残業して、お知らせを書いた人を無言で罵ってしまいました、地獄に落ちてください、ここでお詫び申し上げますorz

確かに、小さなプログラムに関する同様の投稿はないようですが、昨日、uni の投稿を見て、私の cocos エンジンを見て、深く考え込んでしまいました... 

おすすめ

転載: blog.csdn.net/m0_66016308/article/details/132604539