Desarrollo de iOS --- Actualización del SDK de acciones de Friends League de reemplazo de UIWebView (problema de aplicación no verificada de WeChat)

fondo

ShareSDK v7.0.3 (fecha de actualización: 16 de junio de 2020)

Recientemente, recibí un correo electrónico cada vez que actualicé la versión, después de recibirlo varias veces seguidas, decidí poner este asunto (reemplazar UIWebView con WKWebView) en la agenda. Una vez completado el simple reemplazo de UIWebView en la página de visualización, la siguiente tarea es actualizar el SDK.

1. Actualización de AFNetworking (parece que la versión actual sigue siendo la 3.0, jaja...);

2. Actualización del SDK de Umeng, incluido el SDK de estadísticas y el ShareSDK.

Este blog registra principalmente los problemas encontrados al actualizar ShareSDK y algunas cosas que necesitan atención.

1. Descargar SDK

1. SDK para compartir en redes sociales

2. Documentación integrada de U-Share

Hay varios puntos clave en la documentación:

[1] De hecho, se actualizó el problema sobre la sustitución de UIWebView por WKWebView en la versión v6.9.7 del SDK.

 

[2], este es el principal problema que encontré durante la actualización. ¡Creo que muchos amigos también deben haberlo encontrado! ! ! ! Se escribirá en detalle a continuación.

2. Documentos oficiales de WeChat 

Documentación oficial de WeChat (instrucciones de actualización para openSDK1.8.6)

Preguntas frecuentes sobre iOS

 La verificación de la asociación del sitio de la aplicación de Apple  es correcta

[1] Para que el terminal WeChat responda a su programa después de iniciarlo, su ID debe estar registrada con el terminal WeChat en el código. (Como se muestra en la figura siguiente, registre la identificación con WeChat en la función didFinishLaunchingWithOptions de AppDelegate).

/**
#import "WXApi.h"
*/
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)launchOptions {
    //向微信注册
    [WXApi registerApp:APP_ID universalLink:UNIVERSAL_LINK];
    return YES;
}

 

[2], utilice la función de autocomprobación del SDK para solucionar problemas de acceso

En la versión 1.8.7 del SDK, WXApi agrega una nueva función de autocomprobación checkUniversalLinkReady: para ayudar a los desarrolladores a solucionar los problemas encontrados durante el proceso de acceso al SDK.

Precauciones:

Antes de llamar a la función de autoprueba, primero debe llamar a la interfaz RegisterApp:universalLink y confirmar que la llamada se realizó correctamente. El registro se generará durante el proceso de autocomprobación. Puede llamar primero a la función startLogByLevel para solucionar el problema en función del registro. El bloque se volverá a llamar varias veces. Solo se utiliza para depurar cuando se conecta recientemente al SDK. No lo llame en el entorno oficial .
Código de muestra:

//在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);
}];

Descripción del valor WXULCheckStep:

paso = WXULCheckStepParams: verificación de parámetros
paso = WXULCheckStepSystemVersion: verificación de la versión actual del sistema
paso = WXULCheckStepWechatVersion: verificación de la versión del cliente WeChat paso =
WXULCheckStepSDKInnerOperation: verificación del funcionamiento interno del SDK de WeChat paso
= WXULCheckStepLaunchWechat: la aplicación inicia la verificación de WeChat
paso = WXULCheckStepBackToCurrentApp: devuelve la aplicación actual de WeChat Check
paso = WXULCheckStepFinal: la verificación final
volverá a llamar estos 7 pasos en secuencia. Cuando se vuelve a llamar a WXULCheckStepFinal, significa que la prueba pasa y el SDK se conecta correctamente. Si el resultado.éxito de cualquier devolución de llamada de paso es NO, el proceso finaliza y no habrá devoluciones de llamada posteriores. Puede verificar la causa del error del paso actual de acuerdo con result.errorInfo y solucionar el problema de acuerdo con result.suggestion.

3. Configurar enlace universal

Debido a los requisitos de la plataforma abierta WeChat , se debe configurar Universal Link; de lo contrario, iOS13 no puede utilizar las funciones de pago e intercambio de WeChat.

Nombre de dominio de la empresa: www.ABCD.com

Configurar Dominios Asociados en el proyecto: applinks:www.ABCD.com

En el archivo apple-app-site-association, las rutas se configuran como: "paths": [ "/app/*"]. Tenga en cuenta que se debe agregar * (carácter comodín asterisco) después.

Configure enlaces universales en la plataforma abierta WeChat: https://www.ABCD.com/app/

Al registrar WeChat en el proyecto: https://www.ABCD.com/app/

1. Abra el dominio Dominios asociados en el proyecto.

applinks: seguido de su nombre de dominio, por ejemplo applinks: help.wechat.com

2. Cree un archivo de asociación de sitio de aplicación de Apple

Cree un archivo llamado apple-app-site-association en formato json. Tenga en cuenta que este archivo no debe tener sufijo y el nombre del archivo debe ser apple-app-site-association.

Todos sabemos que el ID de equipo de cada cuenta de desarrollador es único y el ID de paquete de cada aplicación es único, entonces surge la pregunta: ¿Cómo debería adaptarse el mismo archivo de asociación de sitio de aplicación de Apple a múltiples aplicaciones al mismo tiempo? ¿al mismo tiempo? ¿tratar con?

La solución es distinguir el ID de la aplicación y al mismo tiempo prestar atención a la necesidad de configurar diferentes rutas. De lo contrario, cuando el dispositivo instala varias aplicaciones al mismo tiempo, se producirá una excepción de salto después de que se complete el intercambio. La razón es que cuando el Se completa el intercambio, el salto hacia atrás se realiza a través de rutas. Decida qué aplicación se debe devolver.

Si las rutas configuradas en los dos ID de aplicación son exactamente iguales, aparecerá:
Aplicación A → Iniciar compartir → Saltar a WeChat → Seleccionar amigos/momentos para enviar → Volver a la Aplicación B. La
situación ideal debería ser:
Aplicación A → Iniciar compartir → Ir a WeChat → Seleccionar un círculo de amigos/momento para enviar → Volver a la aplicación 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/*" ]
            }
        ]
    }
}

detalles: es una matriz, se pueden configurar múltiples aplicaciones;

appID: su ID de equipo+BundleID, separados por .;

rutas: la ruta unida después del nombre de dominio. Los parámetros de consulta no se pueden incluir. Cuando WeChat usa enlaces universales para iniciar una aplicación de terceros, la ruta y los parámetros se unirán al final de los enlaces universales. Por lo tanto, la ruta y los parámetros se unirán al final de los enlaces universales. Las rutas configuradas por la aplicación deben agregarse con el comodín /*, según lo configurado por WeChat. Por ejemplo, los enlaces universales son https://help.wechat.com/app

3. Cargue el archivo apple-app-site-association

Entregue el archivo apple-app-site-association que acaba de crear a su socio del lado del servidor y colóquelo en el directorio raíz del servidor o en la carpeta .well-known. Apple primero lo buscará en la carpeta .well-known y, si no lo encuentra, lo descargará del directorio.

Otro dicho es que antes de iOS9.3, estaba en el directorio raíz: https://www.ABCD.com/apple-app-site-association , y después de iOS9.3, estaba en el directorio .well-known: https://www.ABCD.com/.well-known/apple-app-site-association .

Ruta del archivo, elige una de las dos (sin ningún sufijo):

https://help.wechat.com/apple-app-site-association _ _

https://help.wechat.com /.well-known/apple-app-site-association _

4. Compruebe si el archivo apple-app-site-association se ha cargado correctamente

Herramienta de validación de API de búsqueda de aplicaciones

5. Verificar enlaces universales

1>verificación del navegador Safari

    Ingrese https://www.ABCD.com/app/ en el navegador, por ejemplo, ingrese https://help.wechat.com/app . Asegúrese de abrir el menú desplegable después de abrir el sitio web. Habrá una ventana emergente. ventana similar a esta. Haz clic para abrirla. Salta directamente a la APLICACIÓN.

2>Verificación de notas

Abra la nota e ingrese https://www.ABCD.com/app/, por ejemplo, ingrese https://help.wechat.com/app . Al hacer clic, saltará directamente a su propia aplicación, o al presionar prolongadamente aparecerá una ventana emergente. ventana  en "aplicación" Abrir.

6. La plataforma abierta WeChat configura enlaces universales

      WeChat requiere que el formato comience con https y termine con "/", así que complete https://help.wechat.com/app/

7. Configuración de AppDelegate

1>, en Xcode, agregue weixin y weixinULAPI en "LSApplicationQueriesSchemes" en la barra de pestañas "información" (como se muestra en la figura siguiente).

 

 2>, funciones de registro y autoprueba

- (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>, prueba de devolución de llamada:

Cuando UniversalLink llama a la aplicación, puede usar los siguientes métodos en el delegado para realizar el procesamiento correspondiente y obtener información de rutas relevantes, etc. (aquí se usa el método de procesamiento de 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>, si llamas a Umeng Sharing, recuerda configurar 

-(void)confitUShareSettings{
    //配置微信平台的Universal Links
    //微信和QQ完整版会校验合法的universalLink,不设置会在初始化平台失败
    [UMSocialGlobal shareInstance].universalLinkDic = @{@(UMSocialPlatformType_WechatSession):TCUMUnivernalLink};
}

punto importante

  1. Si todo está configurado correctamente y aún no puede iniciar la aplicación, elimínela y vuelva a instalarla.
  2. Si todo está configurado, puedes compartir e iniciar sesión con WeChat, pero aún aparecerá "Aplicaciones no verificadas". Esto se debe a que la lista de aplicaciones no verificadas no se actualiza en tiempo real. Solo el nuevo SDK (versión 1.8.6 o superior) se conectó el día anterior y hay Si el registro se llama correctamente, se eliminará de la lista al día siguiente y el número de acciones correctas del día anterior es más de 10 veces.
  3. Después de agregar la función de prueba checkUniversalLinkReady, saltará a WeChat cada vez que se inicie y luego regresará a la aplicación. Comentarlo ya no saltará a WeChat.

Artículos relacionados

(SDK) - Actualización de la plataforma abierta WeChat openSDK1.8.6

iOS WeChat openSDK utiliza enlaces universales para solucionar problemas

Enlace universal: problema con el archivo de asociación de sitio-aplicación-apple

Configuración IOSEnlaces Universales

Supongo que te gusta

Origin blog.csdn.net/jiaxin_1105/article/details/107565476
Recomendado
Clasificación