Compartilhe no Instagram:
Encontrei um problema muito estranho. O jogo está na tela horizontal e eu uso o documentController para lidar com o compartilhamento. Haverá uma situação em que a postagem não terá teclado, o layout da história estará errado e os botões não poderão ser clicados.
Então tentei usar o método de comando de link externo e descobri que não há comando de upload direto de imagem disponível.
Depois que o link externo for aberto, a primeira foto do álbum será selecionada por padrão. Então aqui está a tentativa.
Tentei a abordagem UIKit
//UIImageWriteToSavedPhotosAlbum(image, self, @selector(image:didFinishSavingWithError:contextInfo:), DocumentsPath);
Descobri que o salvamento foi bem-sucedido, mas o álbum de fotos não pode ser visto.
Tentei assíncrono
// PHPhotoLibrary *library = [PHPhotoLibrary sharedPhotoLibrary];
// [library performChanges:^
// {
// [PHAssetChangeRequest creationRequestForAssetFromImageAtFileURL:url];
// }
// completionHandler:^(BOOL success, NSError * _Nullable error) {
// if (success)
// {
//
// NSLog(@"保存成功");
// }
// else
// {
// NSLog(@"保存失败");
// }
// }];
Encontrei o problema. A primeira chamada ficará travada por um tempo. Olhando o log, encontrei um aviso de openURL e ele não foi chamado no thread principal.
Portanto, o método síncrono é usado.
NSURL *instagramURL = [NSURL URLWithString:@"instagram://app"];
if([[UIApplication sharedApplication] canOpenURL:instagramURL]) //check for App is install or not
{
NSLog(@"------ %s", imgUrl);
NSString* strImgUrl = [NSString stringWithUTF8String:imgUrl];
NSString * docPath = @"Documents";
NSString * finalPath = [docPath stringByAppendingPathComponent:strImgUrl];
NSString * DocumentsPath = [NSHomeDirectory() stringByAppendingPathComponent: finalPath];
NSLog(@"------ %@", DocumentsPath);
NSURL* url = [NSURL URLWithString:DocumentsPath];
NSError *error = nil;
[[PHPhotoLibrary sharedPhotoLibrary] performChangesAndWait:^{
[PHAssetChangeRequest creationRequestForAssetFromImageAtFileURL:url];
} error:&error];
if(error == nil)
{
NSString *str = [NSString stringWithFormat:@"instagram://library?AssetPath=%@", DocumentsPath];
NSURL *instagramURL = [NSURL URLWithString:str];
[[UIApplication sharedApplication] openURL:instagramURL];
NSLog(@"保存成功");
}
else
{
NSLog(@"保存失败");
}
}
else
{
NSLog(@"Instagram not found");
}
Os testes de link estático xcode e link dinâmico estão bem. Ao enviar o testflight, um erro de ITMS-90205 ou ITMS-90206 é relatado, dizendo que UnityFramework contém estrutura.
Isso ocorre porque o pacote estático e o pacote dinâmico estão configurados incorretamente.
Após a nova versão dos pacotes unitários Xcode, haverá um subprojeto do UnityFramework.
Se o pacote dinâmico for colocado neste subprojeto e Embed&Sign for selecionado, então quando o pacote dinâmico finalmente gerar .app, o framework contendo UnityFramework aparecerá. Abaixo estão todos os Frameworks com Embed&Sign marcados.
No entanto, o próprio UnityFramework também é um pacote dinâmico, portanto, pacotes dinâmicos podem conter pacotes dinâmicos, o que não é permitido.
A solução é selecionar .framework no Unity, selecionar "Adicionar aos binários incorporados" no painel direito, para que ao gerar o Xcode, esses pacotes dinâmicos selecionados no Unity e UnityFramework estejam no mesmo nível do projeto principal.
Desde então, o upload foi bem-sucedido
(o principal motivo para esse problema é que o iOS SDK de terceiros foi conectado manualmente. Alguns plug-ins de pós-processamento do Unity não foram usados. O problema não é grande, então está resolvido .)
Xcode Object-c chama a função de unidade
UnitySendMessage([String 1 UTF8String], [String 2 UTF8String], [String 3 UTF8String]); todas as
strings são do tipo NSString*
A definição desta função é
void UnitySendMessage(const char* obj, const char* method, const char* msg);
O primeiro parâmetro é o nome do GameObject no Unity.
O segundo parâmetro é o nome da função.
O terceiro parâmetro é o parâmetro.
Portanto, primeiro deve haver um script MonoBehaviour pendurado em um GameObject. Apenas um parâmetro é fornecido na definição, portanto, se houver vários parâmetros, monte você mesmo uma string com delimitadores personalizados. Depois de inserir a unidade, string Just .split
O Unity chama a função Xcode object-c
usando System.Runtime.InteropServices;
[DllImport("__Internal")] private static extern void 函数名(参数);
Chame a função Xcode OC e retorne a string para a unidade
- (char*)GetDocumentPath
{
NSString * docPath = @"Documents";
NSString * strDocumentsPath = [NSHomeDirectory() stringByAppendingPathComponent: docPath]; // 组装本地Url
const char* cDocumentsPath = [strDocumentsPath UTF8String];
char* result = (char*)malloc(strlen(cDocumentsPath) + 1);
strcpy(result, cDocumentsPath);
return result;
}
extern "C" char* iosGetDocumentPath()
{
return [对象 GetDocumentPath];
}
O que é retornado é char* correspondente à string na unidade. Antes de retornar, você precisa abrir a memória para o valor de retorno char*, caso contrário, um erro será relatado.
A programação é infinita.
Todos são bem-vindos para se comunicar. Se houver algo incerto ou errado, você também pode conversar comigo em particular.
Meu QQ 334524067 God-like Didi