背景
ShareSDK v7.0.3(更新日:2020年6月16日)
最近、バージョンアップのたびにメールが届くのですが、何度か続けてメールが届いたので、この件(UIWebViewをWKWebViewに置き換える)を議題にすることにしました。表示ページの UIWebView の単純な置き換えが完了したら、次のタスクは SDK を更新することです。
1. AFNetworking アップデート (現在のバージョンはまだ 3.0 のようです、笑...);
2. 統計SDKとShareSDKを含むUmeng SDKのアップデート。
このブログでは主にShareSDKのアップデート時に発生した問題や注意点などを記録します。
1.SDKをダウンロードする
ドキュメントにはいくつかの重要なポイントがあります。
[1]、実際、SDK の v6.9.7 バージョンでの UIWebView の WKWebView への置き換えに関する問題が更新されました。
[2]、これは私がアップデート中に遭遇した主な問題です。多くの友人もこの問題に遭遇したに違いありません。!!!以下に詳しく書きます。
2. WeChat公式文書
WeChat公式ドキュメント(openSDK1.8.6のアップデート手順)
apple-app-site-association の 検証は正しいです
[1]、プログラムの開始後に WeChat 端末が応答するためには、コード内で WeChat 端末に ID を登録する必要があります。(下図のように、AppDelegateのdidFinishLaunchingWithOptions関数でWeChatにIDを登録します)。
/** #import "WXApi.h" */ - (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { //向微信注册 [WXApi registerApp:APP_ID universalLink:UNIVERSAL_LINK]; return YES; }
[2]、SDK セルフチェック機能を使用してアクセス問題をトラブルシューティングします。
SDK バージョン 1.8.7 では、WXApi に新しいセルフチェック関数 checkUniversalLinkReady: が追加され、開発者が SDK アクセス プロセス中に発生した問題のトラブルシューティングを支援します。
予防:
セルフテスト関数を呼び出す前に、まず registerApp:universalLink インターフェイスを呼び出し、呼び出しが成功したことを確認する必要があります。自己チェック プロセス中にログが生成されます。最初に startLogByLevel 関数を呼び出して、ログに基づいて問題のトラブルシューティングを行うことができます。ブロックは複数回コールバックされます。新規にSDKに接続した際のデバッグのみに使用しますので、正式な環境では呼び出さないでください。
サンプルコード://在register之前打开log, 后续可以根据log排查问题 [WXApi startLogByLevel:WXLogLevelDetail logBlock:^(NSString *log) { NSLog(@"WeChatSDK: %@", log); }]; //务必在调用自检函数前注册 [WXApi registerApp:APP_ID universalLink:UNIVERSAL_LINK]; //调用自检函数 [WXApi checkUniversalLinkReady:^(WXULCheckStep step, WXCheckULStepResult* result) { NSLog(@"%@, %u, %@, %@", @(step), result.success, result.errorInfo, result.suggestion); }];
WXULCheckStep 値の説明:
step = WXULCheckStepParams: パラメータチェック
step = WXULCheckStepSystemVersion: 現在のシステムバージョンチェック
step = WXULCheckStepWechatVersion: WeChat クライアントバージョンチェック
step = WXULCheckStepSDKInnerOperation: WeChat SDK 内部動作チェック step
= WXULCheckStepLaunchWechat: アプリ起動 WeChat チェック
step = WXULCheckStepBackToCurrentApp: WeChat チェックから現在のアプリを返します
step = WXULCheckStepFinal: 最終チェック
では、これら 7 つのステップが順番にコールバックされます。WXULCheckStepFinal がコールバックされると、テストに合格し、SDK が正常に接続されたことを意味します。いずれかのステップ コールバックの result.success が NO の場合、プロセスは終了し、後続のコールバックは行われません。result.errorInfo に従って現在のステップ エラーの原因を確認し、result.suggestion に従って問題を修正できます。
3.ユニバーサルリンクの設定
WeChat オープン プラットフォームの要件により、ユニバーサル リンクを設定する必要があります。そうしないと、iOS13 は WeChat 共有および支払い機能を使用できません。
会社のドメイン名: www.ABCD.com
プロジェクトで関連ドメインを構成します: applinks:www.ABCD.com
apple-app-site-association ファイルでは、パスは次のように構成されます: "paths": [ "/app/*"]. * (アスタリスク ワイルドカード文字) をその後に追加する必要があることに注意してください。
WeChat オープン プラットフォームでユニバーサル リンクを構成する: https://www.ABCD.com/app/
WeChatをプロジェクトに登録する場合:https://www.ABCD.com/app/
1. プロジェクトで「Associated Domains」ドメインを開きます。
applinks: その後にドメイン名が続きます。例: applinks: help.wechat.com
2. apple-app-site-association ファイルを作成します
json 形式で apple-app-site-association という名前のファイルを作成します。このファイルには接尾辞がなく、ファイル名がapple-app-site-association である必要があることに注意してください。
各開発者アカウントのチーム ID は一意であり、各アプリのバンドル ID も一意であることは誰もが知っていますが、次に、同じ apple-app-site-association ファイルを複数のアプリにどのように適用する必要があるのかという疑問が生じます。同時に?対処?
解決策としては、アプリIDを区別しつつ、別のパスを設定する必要があることに注意しなければ、デバイスに複数のアプリケーションを同時にインストールした場合、共有完了後にジャンプ例外が発生します。共有が完了すると、パスを介してジャンプバックが行われ、どのアプリを返すかを決定します。
2 つの appID に設定されたパスがまったく同じである場合、次のように表示されます:
アプリケーション A → 共有を開始 → WeChat にジャンプ → 送信する友達/モーメントを選択 → アプリケーション B に戻る。理想的な状況は次のようになります
:
アプリケーション A → 開始共有→WeChatにジャンプ→送信する友達/モーメントサークルを選択→アプリAに戻る{ "applinks": { "apps": [], "details": [ { "appID": "TeamID.BundleID1", "paths": [ "/wx_conn/app1/*", "/qq_conn/10000001/*"] }, { "appID": "TeamID.BundleI2", "paths": [ "/wx_conn/app2/*", "/qq_conn/10000002/*"] } ] } }
{ "applinks": { "apps": [], "details": [ { "appID": "HQH47S9JSQ.help.wechat.com", "paths": [ "/app/*" ] } ] } }
詳細: は配列であり、複数のアプリを構成できます。
appID: チーム ID + バンドル ID、.; で区切られます。
パス: ドメイン名の後に結合されるパス。クエリ パラメーターは含めることはできません。WeChat がユニバーサル リンクを使用してサードパーティ アプリを起動する場合、パスとパラメーターはユニバーサル リンクの最後に結合されます。したがって、アプリによって構成されたパスは、WeChat によって構成されたように、ワイルドカード /* を使用して追加する必要があります。たとえば、ユニバーサル リンクはhttps://help.wechat.com/appです。
3. apple-app-site-association ファイルをアップロードします
作成した apple-app-site-association ファイルをサーバー側パートナーに渡し、サーバーのルート ディレクトリまたは .well-known フォルダーに配置します。Apple はまず .well-known フォルダ内でファイルを探しますが、見つからない場合はディレクトリからダウンロードします。
もう 1 つの言い方は、iOS9.3 より前はルート ディレクトリhttps://www.ABCD.com/apple-app-site-associationにあり、iOS9.3 以降は .well-known ディレクトリにあったということです。https://www.ABCD.com/.well-known/apple-app-site-association。
ファイル パスは、2 つのうちの 1 つを選択します (接尾辞なし)。
https://help.wechat.com / apple-app-site-association
https://help.wechat.com /.well-known/ apple-app-site-association
4. apple-app-site-association ファイルが正常にアップロードされたかどうかを確認します
5. ユニバーサルリンクを確認する
1>Safariブラウザの検証
ブラウザに https://www.ABCD.com/app/ と入力します (例: https://help.wechat.com/appと入力します。Web サイトを開いた後、必ずプルダウンしてください。ポップアップが表示されます)このようなウィンドウをクリックして開き、APP に直接ジャンプします。
2>メモの確認
メモを開いて https://www.ABCD.com/app/ と入力します。たとえば、https://help.wechat.com/appと入力します。クリックすると自分のアプリに直接ジャンプするか、長押しするとポップアップが表示されます。「アプリ」のウィンドウ が開きます。
6. WeChatオープンプラットフォームはユニバーサルリンクを構成します
WeChat では、https で始まり「/」で終わる形式が必要なので、https: //help.wechat.com/app/と入力します。
7. AppDelegateの構成
1>、Xcode で、「情報」タブ バーの「LSApplicationQueriesSchemes」に weixin と weixinULAPI を追加します (次の図を参照)。
2>、登録およびセルフテスト機能
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions { #ifdef DEBUG /*在register之前打开log, 后续可以根据log排查问题*/ [WXApi startLogByLevel:WXLogLevelDetail logBlock:^(NSString *log) { NSLog(@"WeChatSDK: %@", log); }]; #endif // 向微信注册 [WXApi registerApp:kWXAppID universalLink:kUniversalLinks]; #ifdef DEBUG /*调用自检函数(支付或者分享成功之后要删除这个方法,不然会导致会每次打开app都会与微信进行关联)*/ [WXApi checkUniversalLinkReady:^(WXULCheckStep step, WXCheckULStepResult* result) { NSLog(@"---------%@, %u, %@, %@", @(step), result.success, result.errorInfo, result.suggestion); }]; #endif } /* 打印如下:说明是OK的!! app[14232:3095208] ---------0, 1, check passed, app[14232:3095208] ---------1, 1, check passed, app[14232:3095208] ---------2, 1, check passed, app[14232:3095208] ---------3, 1, check passed, app[14232:3095208] ---------4, 1, check passed, app[14232:3095208] ---------5, 1, Universal Link check passed. The application is launched by WeChat via Universal Link, app[14232:3095208] ---------6, 1, All Check Passed!, */
3>、コールバック テスト:
UniversalLinkによってAPPが呼び出される場合、デリゲート内で以下のメソッドを使用して、対応する処理を実行し、関連するパス情報などを取得できます(ここではWeChatの処理メソッドを使用します)。
// 通用链接会调用 - (BOOL)application:(UIApplication *)application continueUserActivity:(NSUserActivity *)userActivity restorationHandler:(void(^)(NSArray<id<UIUserActivityRestoring>> * __nullable restorableObjects))restorationHandler { if ([userActivity.activityType isEqualToString:NSUserActivityTypeBrowsingWeb]) { NSURL *webpageURL = userActivity.webpageURL; if ([webpageURL.absoluteString isEqualToString:kUniversalLinks]) { // 如果UniversalLinks跳转 会到这里 NSLog(@"%@",webpageURL); } else { [[UIApplication sharedApplication]openURL:webpageURL]; } } return [WXApi handleOpenUniversalLink:userActivity delegate:self]; }
4>、Umeng Sharing に電話をかける場合は、忘れずに設定してください
-(void)confitUShareSettings{ //配置微信平台的Universal Links //微信和QQ完整版会校验合法的universalLink,不设置会在初始化平台失败 [UMSocialGlobal shareInstance].universalLinkDic = @{@(UMSocialPlatformType_WechatSession):TCUMUnivernalLink}; }
注意点
- すべてが正しく構成されているにもかかわらずアプリを起動できない場合は、アプリを削除して再インストールします。
- すべての設定が完了すると、WeChat で共有してログインできますが、「未検証のアプリケーション」が表示されたままになります。これは、未検証のアプリケーションのリストがリアルタイムで更新されないためです。新しい SDK (バージョン 1.8.6 以降) のみが必要です。前日に接続され、レコードが正しく呼び出された場合、翌日にはリストから削除され、前日の正しいシェア数が 10 倍を超えます。
- テスト関数 checkUniversalLinkReady を追加すると、起動するたびに WeChat にジャンプし、その後アプリに戻るようになりますが、コメントアウトすると WeChat にジャンプしなくなります。
関連記事
(SDK) - WeChat オープン プラットフォーム openSDK1.8.6 を更新します。
iOS WeChat openSDK はユニバーサル リンクを使用して落とし穴を埋める