ho bisogno di aiuto qui. Mi piacerebbe trasferire immagini Jpg o PNG da un iPhone a un altro tramite Bump. Ho riscontrato il successo e il fallimento in cui le immagini non vengono inviate affatto.Ho bisogno di aiuto su Bump Api che invia immagini
di seguito sono un file NSObject che verrà chiamato quando l'utente ha selezionato un'immagine da UIimagepicker.
il destinatario non invierà alcun dato ma riceverà solo.
per favore aiutatemi a dare un'occhiata al codice e datemi qualsiasi commento o punto.
grazie e apprezzato il vostro aiuto.
- (id) init{
if(self = [super init]){
bumpObject = [BumpAPI sharedInstance];
NSError *error;
NSURL *fileURL = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"sound_bump_tap" ofType:@"aif"]];
bumpsound = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:&error];
[bumpsound prepareToPlay];
}
return self;
}
-(void) configBump
{
[bumpObject configAPIKey:@"My API Key"]; //put your api key here. Get an api key from http://bu.mp
[bumpObject configDelegate:self];
[bumpObject configParentView:self.bumpShare.view];
[bumpObject configActionMessage:@"Bump with your friend to start."];
}
- (void) startBump{
[self configBump];
[bumpObject requestSession];
}
- (void) stopBump{
[bumpObject endSession];
}
#pragma mark -
#pragma mark Private Methods
// for Debug -- prints contents of NSDictionary
-(void)printDict:(NSDictionary *)ddict {
NSLog(@"---printing Dictionary---");
NSArray *keys = [ddict allKeys];
for (id key in keys) {
NSLog(@" key = %@ value = %@",key,[ddict objectForKey:key]);
}
}
#pragma mark -
#pragma mark Public Methods
- (void) sendDetails:(UIImage *)selectedImage
{
[bumpShare showHUD];
//Now we need to package our message dictionary up into an NSData object so we can send it up to Bump.
//We'll do that with with an NSKeyedArchiver.
NSLog(@"Here Got called!!!!!!! %@",self.selectedImg);
// NSData* wholeImageData = [NSKeyedArchiver archivedDataWithRootObject:userChunk];
// int dataLength = [wholeImageData length];
// int maxChunkSize = 262144;
// int chunkCount = dataLength/maxChunkSize;
//
// if (chunkCount == 1) {
// //Data is 254kb or under
// NSData *moveChunk = [NSKeyedArchiver
// archivedDataWithRootObject:self.selectedImg];
// [bumpObject sendData:moveChunk];
// }
// else if (dataLength > maxChunkSize)
// {
// NSLog(@"Sending data: %d bytes in %d chunks", dataLength, chunkCount);
// for (int i = 1; i <= chunkCount; i++)
// {
// int ithChunkLength = 0;
// if ((maxChunkSize * i) > dataLength)
// {
// ithChunkLength = dataLength-(maxChunkSize*(i-1));
// }
// else {
// ithChunkLength = 262144;
// }
// NSData *moveChunk = [wholeImageData subdataWithRange:NSMakeRange(maxChunkSize*(i-1),ithChunkLength)];
// //[[NSKeyedArchiver archivedDataWithRootObject:self.selectedImg] subdataWithRange:NSMakeRange(262144*(i-1),maxr)];
// NSLog(@"Sending Chunk: %d, %d bytes",i,[moveChunk length]);
// [bumpObject sendData:moveChunk];
// }
// }
NSData *photoData = UIImageJPEGRepresentation(self.selectedImg, 0.9);
//NSData *userChunk = [NSKeyedArchiver archivedDataWithRootObject:self.selectedImg];
if([[NSKeyedArchiver archivedDataWithRootObject:photoData]length] > 262144)
{
int dlen = [[NSKeyedArchiver
archivedDataWithRootObject:photoData] length];
NSLog(@"Sending data: %i bytes in %d chunks",dlen,(int)ceil(((float)dlen/262144.0f)));
for (int i=1; i <= (int)ceil(((float)dlen/262144.0f)); i++) {
int maxr=0;
if ((262144*i) > dlen) {
maxr = dlen-(262144*(i-1));
} else {
maxr = 262144;
}
NSData *moveChunk = [[NSKeyedArchiver archivedDataWithRootObject:photoData] subdataWithRange:NSMakeRange(262144*(i-1),maxr)];
NSLog(@"Sending Chunk: %d, %d bytes",i,[moveChunk length]);
[bumpObject sendData:moveChunk];
}
}
else
{
//Data is 254kb or under
NSData *moveChunk = [NSKeyedArchiver
archivedDataWithRootObject:photoData];
[bumpObject sendData:moveChunk];
}
//[self printDict:moveDict];
//[userDict release];
//Calling send will have bump send the data up to the other user's mailbox.
//The other user will get a bumpDataReceived: callback with an identical NSData* chunk shortly.
//packetsAttempted++;
//[bumpObject sendData:userChunk];
}
- (void) startConnection:(UIImage *)selectedImage
{
//set local and remote user names
//[bumpShare setLocalUserName:[[bumpObject me] userName]];
//[bumpShare setRemoteUserName:[[bumpObject otherBumper] userName]];
//[bumpShare updateUserNames];
[self sendDetails:selectedImage];
}
#pragma mark Utility
-(void) quickAlert:(NSString *)titleText msgText:(NSString *)msgText{
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:titleText message:msgText delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
//[alert release];
}
- (void)imageSavedToPhotosAlbum:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo:(void *)contextInfo {
NSString *message;
NSString *title;
if (!error) {
title = NSLocalizedString(@"Save Success", @"");
message = NSLocalizedString(@"Save Success Message", @"");
HUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"Checkmark.png"]];
HUD.mode = MBProgressHUDModeCustomView;
HUD.labelText = @"Photo Saved To Photo Album";
[HUD hide:YES afterDelay:1.5];
//saved =1;
//self.imageOverlay.alpha =0.7;
[bumpShare hideHUD];
[self performSelector:@selector(saveSuccess) withObject:nil afterDelay:0.5];
} else
{
title = NSLocalizedString(@"Save Failed", @"");
message = [error description];
HUD.customView = [[UIImageView alloc] initWithImage:[UIImage imageNamed:@"sad_face.png"]];
HUD.mode = MBProgressHUDModeCustomView;
HUD.labelText = @"Error Saving to Photo Album";
[HUD hide:YES afterDelay:3];
}
}
-(void)saveSuccess
{
[bumpShare pushToSuccess];
}
#pragma mark -
#pragma mark BumpAPIDelegate methods
- (void) bumpDataReceived:(NSData *)chunk
{
//The chunk was packaged by the other user using an NSKeyedArchiver, so we unpackage it here with our NSKeyedUnArchiver
NSLog(@"chunk length %i",[chunk length]);
//NSData *receivedData = [NSKeyedUnarchiver unarchiveObjectWithData:chunk];
if ([chunk length] != 262144)
{
NSLog(@"called length %i",[receivedData length]);
if (!self.receivedData) {
self.receivedData = [NSMutableData dataWithCapacity:[chunk length]];
[self.receivedData setData:chunk];
}
else
{
[self.receivedData appendData:chunk];
}
[self stopBump];
//UIImage* receivedImage = [NSKeyedUnarchiver unarchiveObjectWithData:self.receivedData];
//UIImageWriteToSavedPhotosAlbum(receivedImage, self, @selector(imageSavedToPhotosAlbum: didFinishSavingWithError: contextInfo:), nil);
}
else if([chunk length] == 262144)
{ NSLog(@"called length %i",[receivedData length]);
//NSLog(@"calledin length %i",[chunk length]);
if (!self.receivedData) {
self.receivedData = [NSMutableData dataWithCapacity:[chunk length]];
[self.receivedData setData:chunk];
}
else
{
[self.receivedData appendData:chunk];
}
}
}
- (void) bumpSessionStartedWith:(Bumper*)otherBumper{
[self startConnection:nil];
}
- (void) bumpSessionEnded:(BumpSessionEndReason)reason {
NSString *alertText;
switch (reason) {
case END_LOST_NET:
alertText = @"Connection to Bump server was lost.";
break;
case END_OTHER_USER_LOST:
alertText = @"Connection to other user was lost.";
break;
case END_USER_QUIT:
alertText = @"You have been disconnected.";
break;
default:
alertText = @"You have been disconnected.";
break;
}
// if(reason != END_USER_QUIT){
// //if the local user initiated the quit,restarting the app is already being handled
// //other wise we'll restart here
// UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Disconnected" message:alertText delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
// [alert show];
// //[alert release];
// }
NSLog(@"Sending Chun!!!!!!!!!");
NSLog(@"self.received data %i",[self.receivedData length]);
if ([self.receivedData length]>200)
{
NSData *imgData= [NSKeyedUnarchiver unarchiveObjectWithData:self.receivedData];
UIImage* receivedImage = [UIImage imageWithData:imgData];//[NSKeyedUnarchiver unarchiveObjectWithData:self.receivedData];
UIImageWriteToSavedPhotosAlbum(receivedImage, self, @selector(imageSavedToPhotosAlbum: didFinishSavingWithError: contextInfo:), nil);
}
else
{
[bumpShare hideHUD];
[self performSelector:@selector(saveSuccess) withObject:nil afterDelay:1.5];
}
}
- (void) bumpSessionFailedToStart:(BumpSessionStartFailedReason)reason {
NSString *alertText;
switch (reason) {
case FAIL_NETWORK_UNAVAILABLE:
alertText = @"Please check your network settings and try again.";
break;
case FAIL_INVALID_AUTHORIZATION:
//the user should never see this, since we'll pass in the correct API auth strings.
//just for debug.
alertText = @"Failed to connect to the Bump service. Auth error.";
break;
default:
alertText = @"Failed to connect to the Bump service.";
break;
}
if(reason != FAIL_USER_CANCELED){
//if the user canceled they know it and they don't need a popup.
UIAlertView *alert = [[UIAlertView alloc] initWithTitle:@"Connection Failed" message:alertText delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil];
[alert show];
//[alert release];
}
}
molto codice, potresti specificare cosa va esattamente storto? Messaggi di errore o registri degli arresti anomali? Hai provato le immagini sotto e sopra 254kb? forse ti mancano alcune informazioni in 'startConnection:'? –
Ciao relikd, mi dispiace per la risposta tardiva. L'app non si arresta in modo anomalo solo perché verrà inviata e ricevuta casualmente. non troppo sicuro perché questo è il motivo per cui ho chiesto. non ho provato sotto 254kb, ma sicuramente ha funzionato con le immagini sopra 254kb – Desmond
Ho usato API Bump prima e il suo spotty su connessioni cellulari e segnale wifi debole. Prova con entrambi i dispositivi collegati al wifi e verifica se il problema persiste. – skram