GeneXus Access Manager では、
WeChat を使用して認証を行うことができます。
WeChat 認証タイプは、Web
1 および SD
2,3 の各プラットフォームに対してサポートされています。プロバイダー側ではプラットフォームによって処理が異なるため、プラットフォーム (Web およびネイティブモバイル) ごとに認証タイプを 1 つ作成する必要があります。
この設定は 2 つの部分で行います:
- Web およびネイティブモバイルを対象とする WeChat バックエンドの設定
- Web およびネイティブモバイルの各環境を対象とする GAM バックエンドの設定
WeChat アプリケーションをネイティブ モバイル アプリケーションにインストールしてログインします。
https://open.weixin.qq.com/ にログインするか、アカウントを作成して、登録プロセスに従います。
[ Management Center ] (管理センター) に移動し、 [ Create Mobile App ] (モバイルアプリを作成) または [ Create Website App ] (Web サイトアプリを作成) をクリックして、必要な情報を入力します。次に、このアプリケーションの審査を申請します。アプリケーションが承認されたら開発を開始できます。
審査は 7 営業日以内に完了します。アプリケーションが承認されたら、Open Platform からグローバルに一意の
App Id および
AppSecret が割り当てられます。
開発プロセスに必要となる、有効なドメイン名を入力します。ユーザーは、WeChat アカウントでログイン後、このドメイン名の下のページにのみコールバックできます。
[ Management Center ] (管理センター) に移動し、 [ Create Mobile App ] (モバイルアプリを作成) をクリックして、必要な情報を入力します。次に、このアプリケーションの審査を申請します。アプリケーションが承認されたら開発を開始できます。
プラットフォームに応じて、次のプロパティを確認します。
[ Bundle Id ] プロパティが
[ Apple Bundle Identifier ] プロパティと一致している必要があります。
[ Universal Links ] プロパティが
[ Deep Link Base URL ] プロパティと一致している必要があります。
その他のプロパティは無視できます。
[ Package Name ] プロパティを使用して、
このアプリケーション (
詳細情報) で
アプリケーションの署名を計算する必要があります。
[ Package Name ] プロパティは、
[ Android Package Name ] プロパティと一致している必要があります。
新しい WeChat
認証タイプを追加し、すべてのパラメーターを入力します。次の設定は、プロバイダーによって検証済みの WeChat の設定と一致している必要があります:
- クライアント ID: WeChat によって割り当てられた App Id の値。
- クライアントシークレット: 生成された AppSecret (この値は一度しか生成されないため、忘れないようにしてください)。
- ローカルサイト URL: 戻り先の完全 URL。次に例を示します。
http://sampleURL/appname
新しい WeChat
認証タイプを追加し、すべてのパラメーターを入力します。次の設定は、WeChat の設定と一致している必要があります (モバイルアプリケーション):
- クライアント ID: WeChat によって割り当てられた App Id の値。
- クライアントシークレット: 生成された AppSecret (この値は一度しか生成されないため、忘れないようにしてください)。
- ローカルサイト URL: 戻り先の完全 URL。
WeChat 認証タイプが 2 つある場合 (Web 用およびネイティブモバイル用)、2 番目の認証タイプが最初のタイプをまねて、同じプロパティ値を使用するようにします。Web 用およびネイティブモバイル用にそれぞれ
wechat および
wechatsd の認証タイプがあるとします。2 番目の
wechatsd で、
[ Impersonate ] プロパティを
wechat に設定します。
設定がすべて完了したら、通常の実行フローは次のようになります:
ユーザーが、セキュリティ付きでオブジェクトを実行すると、GAM ログインにリダイレクトされます。
[ sign in with WeChat ] オプションを選択します。
サイトが WeChat にリダイレクトされるので、WeChat アプリケーションを使用して、対応する QR コードをスキャンします。
GeneXus オブジェクトにリダイレクトされるので、携帯電話で確認します。
WeChat を使用して認証を行うには、ログインオブジェクトにイベントを追加する必要があります。関連付けられたイベント内のロジックには、「LoginExternal」という名前の Actions 外部オブジェクトのメソッドの呼び出しを含めます。次に例を示します。
Composite
&LoginExternalAdditionalParameters.AuthenticationTypeName = &name
&LoginOK = GeneXus.SD.Actions.LoginExternal(GAMAuthenticationTypes.WeChat, &User, &Password, &LoginExternalAdditionalParameters)
EndComposite
&name 変数は、ネイティブモバイル環境用に作成された認証タイプと一致している必要があります。WeChat 認証が 1 つのみの場合は、次のメソッドを使用できます:
GeneXus.SD.Actions.LoginExternal(GAMAuthenticationTypes.WeChat, &User, &Password)
いずれの場合も、
&User および
&Password の各パラメーターは無視されます。
アプリケーションは WeChat アプリケーションにリダイレクトされ、ログイン処理が確認されます。次のメッセージを確認します:
Log in to the below app using your WeChat profile (WeChat プロファイルを使用して下のアプリケーションにログインしますか)?
[ Cancel ] [ OK ]
ログインが WeChat で検証されたら、フローが GeneXus アプリケーションに戻ります。
ユーザー名は返されないため、GAM データベース内でキーとして割り当てられている GAM ユーザー名が
WeChat UnionId エレメントに関連付けられます。
openid パラメーターを使用する場合は、次のように [ GAM URLProfile ] プロパティに格納されます:
openid=<何らかのコード>
ネイティブ モバイル アプリケーションの実行時に、WeChat で認証できません。GAM のログに次のエラーが出力されます:
Start Execute: method 'POST', name 'https://api.weixin.qq.com/sns/oauth2/access_token'
_responseString {"errcode":40029,"errmsg":"invalid code, hints: [ req_id: dbnAHFyFe-E60YAa ] "}
...
&Errors.: [ {"Code":204,"Message":"appname 访问令牌错误。请与应用程序管理员联系。"} ]
Access token error.Contact the application administrator
この場合は、ネイティブモバイルおよび WeChat の認証タイプの設定を確認します。適切な認証タイプが設定されていない場合は、最初の WeChat 認証が使用されます。
Android でネイティブ モバイル アプリケーションを実行するときに、次のエラーが発生します: Invalid Signature using Android (Android 使用時の無効な署名)。Logcat には次のように出力されます:
com.artech.samplekb.menusample D/MicroMsg.SDK.WXMsgImplComm: check signature:SampleSignature
com.artech.samplekb.menusample D/MicroMsg.SDK.WXMsgImplComm: pass
com.artech.samplekb.menusample D/MicroMsg.SDK.WXApiImplV10: registerApp, appId = SampleAppId
com.artech.samplekb.menusample W/MicroMsg.SDK.WXApiImplV10: context is not instanceof Activity or Service, disable WXStat
com.artech.samplekb.menusample D/MicroMsg.SDK.WXApiImplV10: registerApp, appId = SampleAppId
com.artech.samplekb.menusample D/MicroMsg.SDK.WXApiImplV10: register app com.artech.samplekb.menusample
com.artech.samplekb.menusample D/MicroMsg.SDK.MMessage: send mm message, intent=Intent { act=com.tencent.mm.plugin.openapi.Intent.ACTION_HANDLE_APP_REGISTER (has extras) }, perm=com.tencent.mm.permission.MM_MESSAGE
com.artech.samplekb.menusample D/MicroMsg.SDK.WXMsgImplComm: check signature:SampleSignature
com.artech.samplekb.menusample D/MicroMsg.SDK.WXMsgImplComm: pass
com.artech.samplekb.menusample I/MicroMsg.SDK.WXApiImplV10: sendReq, req type = 1
com.artech.samplekb.menusample D/MicroMsg.SDK.MMessageAct: send, targetPkgName = com.tencent.mm, targetClassName = com.tencent.mm.plugin.base.stub.WXEntryActivity
com.artech.samplekb.menusample D/ZrHung.AppEyeUiProbe: stop checker.Reporting focus gain, without startInput
com.artech.samplekb.menusample D/ZrHung.AppEyeUiProbe: notify runnable to start.
この場合は、Android 署名の設定を確認し、APK をリビルドします。
Android アプリケーションの実行時に、WeChat で認証できません。Logcat に次のエラーが出力されます:
Datetime/com.artech.testwechat.testwechat V/ActivityThread: callActivityOnCreate
Datetime/com.artech.testwechat.testwechat I/MicroMsg.SDK.WXApiImplV10: handleIntent, cmd = 1
Datetime/com.artech.testwechat.testwechat E/WeChat: Incorrect state after response
Datetime/com.artech.testwechat.testwechat D/ActionExecution: onEndEvent , Wechat
Android アプリケーション用に新しい署名鍵を生成し、メインのネイティブ モバイル オブジェクトの設定および GAM の設定をやり直します。
1 - Web ジェネレーターでは
GeneXus 16 Upgrade 8 以降で利用できます。
2 - Android では
GeneXus 16 Upgrade 9 以降で利用できます。
3 - iOS では
GeneXus 16 Upgrade 10 以降で利用できます。