IOS में Instagram पर एक छवि कैसे साझा करें?


87

मेरा क्लाइंट इंस्टाग्राम, ट्विटर, फेसबुक पर एक छवि साझा करना चाहता है।

मैंने ट्विटर और फेसबुक किया है, लेकिन इंस्टाग्राम पर छवि साझा करने के लिए इंटरनेट पर कोई एपीआई या कोई चीज नहीं मिली। क्या इंस्टाग्राम पर छवि साझा करना संभव है? यदि हाँ तो कैसे?

जब मैं इंस्टाग्राम की डेवलपर साइट की जांच करता हूं तो मुझे रेल्स एंड पायथन पर लाइब्रेरी ऑफ रूबी मिली है। लेकिन iOS Sdk के कोई डॉक्यूमेंटेशन नहीं हैं

मुझे instagram.com/developer के अनुसार इंस्टाग्राम से टोकन मिला है, लेकिन अब यह नहीं पता कि इंस्टाग्राम इमेज के साथ साझा करने के लिए अगला कदम क्या है।


पर कोई विचार stackoverflow.com/questions/28858512/... ?
अशोक

जवाबों:


70

अंत में मुझे जवाब मिल गया। आप सीधे इंस्टाग्राम पर एक छवि पोस्ट नहीं कर सकते। आपको UIDocumentInteractionController के साथ अपनी छवि को फिर से तैयार करना होगा।

@property (nonatomic, retain) UIDocumentInteractionController *dic;    

CGRect rect = CGRectMake(0 ,0 , 0, 0);
UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.opaque, 0.0);
[self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
UIGraphicsEndImageContext();
NSString  *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/test.igo"];

NSURL *igImageHookFile = [[NSURL alloc] initWithString:[[NSString alloc] initWithFormat:@"file://%@", jpgPath]];
self.dic.UTI = @"com.instagram.photo";
self.dic = [self setupControllerWithURL:igImageHookFile usingDelegate:self];
self.dic=[UIDocumentInteractionController interactionControllerWithURL:igImageHookFile];
[self.dic presentOpenInMenuFromRect: rect    inView: self.view animated: YES ];


- (UIDocumentInteractionController *) setupControllerWithURL: (NSURL*) fileURL usingDelegate: (id <UIDocumentInteractionControllerDelegate>) interactionDelegate {
     UIDocumentInteractionController *interactionController = [UIDocumentInteractionController interactionControllerWithURL: fileURL];
     interactionController.delegate = interactionDelegate;
     return interactionController;
}

ध्यान दें: एक बार जब आप इंस्टाग्राम ऐप पर रीडायरेक्ट करते हैं तो आप अपने ऐप पर वापस नहीं लौट सकते। आपको अपना ऐप फिर से खोलना होगा

यहां से सोर्स डाउनलोड करें


फ़ंक्शन सेटअप कहाँ हैControllerWithURL या यह करते हैं?
khaled

3
@SurenderRathore में आपको अपनी इमेज को 612 * 612 में स्केल करना होगा और .ig फॉर्मेट में सेव करना होगा .ig दिखाता है कि आप अपनी इमेज को इंस्टाग्राम में खोलना चाहते हैं और आपको अपने iPhone या iPod में 4.3 वर्जन तक टेस्ट करना होगा। iPad समर्थित नहीं है
Hiren

1
@HiRen: हाँ, आप सही हैं, लेकिन मेरे ऐप में मैं एक दृश्य का स्क्रीनशॉट ले रहा हूं और फिर उस स्क्रीनशॉट को इंस्टाग्राम ऐप और इसके पूरी तरह से अच्छी तरह से काम कर रहा हूं। लेकिन मैं उस स्क्रीनशॉट के साथ कुछ स्थिर पाठ भी पास करना चाहता हूं। यदि आपके पास कोई विचार है तो कृपया मेरी मदद करें। DMACtivityInstagram के लिए github पर एक डेमो कोड है और आप वहां से देख सकते हैं कि मैं क्या कहना चाह रहा हूं। अग्रिम में धन्यवाद।
मंथन

2
इस लाइन का उपयोग करने से मुझे iOS 6: NSURL * igImageHookFile = [[NSURL आवंटित] initWithString: [[NSString आवंटन] initWithFormat: @ फ़ाइल: //% @ ", jpgPath]] में एक दुर्घटना हुई; दोनों में इस काम का उपयोग करना: NSURL * igImageHookFile = [NSURL fileURLWithPath: jpgPath]; जब तक मैं कुछ याद नहीं कर रहा हूँ, तब तक तदनुसार जवाब का संपादन करने लायक हो सकता है?
वियनव

1
क्या यह मुझे पसंद है, या कोई और कहना चाहता है "हे इंस्टाग्राम, आप एक बार डेवलपर थे, आप हमारे जीवन को क्यों कठिन बना रहे हैं?"
क्रिस चेन

27

यहाँ Instagram पर छवि + कैप्शन पाठ अपलोड करने के लिए एक पूर्ण परीक्षण कोड है ..

in.h फ़ाइल

//Instagram
@property (nonatomic, retain) UIDocumentInteractionController *documentController;

-(void)instaGramWallPost
{
            NSURL *instagramURL = [NSURL URLWithString:@"instagram://app"];
            if([[UIApplication sharedApplication] canOpenURL:instagramURL]) //check for App is install or not
            {
                NSData *imageData = UIImagePNGRepresentation(imge); //convert image into .png format.
                NSFileManager *fileManager = [NSFileManager defaultManager];//create instance of NSFileManager
                NSArray *paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES); //create an array and store result of our search for the documents directory in it
                NSString *documentsDirectory = [paths objectAtIndex:0]; //create NSString object, that holds our exact path to the documents directory
                NSString *fullPath = [documentsDirectory stringByAppendingPathComponent:[NSString stringWithFormat:@"insta.igo"]]; //add our image to the path
                [fileManager createFileAtPath:fullPath contents:imageData attributes:nil]; //finally save the path (image)
                NSLog(@"image saved");

                CGRect rect = CGRectMake(0 ,0 , 0, 0);
                UIGraphicsBeginImageContextWithOptions(self.view.bounds.size, self.view.opaque, 0.0);
                [self.view.layer renderInContext:UIGraphicsGetCurrentContext()];
                UIGraphicsEndImageContext();
                NSString *fileNameToSave = [NSString stringWithFormat:@"Documents/insta.igo"];
                NSString  *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:fileNameToSave];
                NSLog(@"jpg path %@",jpgPath);
                NSString *newJpgPath = [NSString stringWithFormat:@"file://%@",jpgPath];
                NSLog(@"with File path %@",newJpgPath);
                NSURL *igImageHookFile = [[NSURL alloc]initFileURLWithPath:newJpgPath];
                NSLog(@"url Path %@",igImageHookFile);

                self.documentController.UTI = @"com.instagram.exclusivegram";
                self.documentController = [self setupControllerWithURL:igImageHookFile usingDelegate:self];
                self.documentController=[UIDocumentInteractionController interactionControllerWithURL:igImageHookFile];
                NSString *caption = @"#Your Text"; //settext as Default Caption
                self.documentController.annotation=[NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"%@",caption],@"InstagramCaption", nil];
                [self.documentController presentOpenInMenuFromRect:rect inView: self.view animated:YES];
            }
            else
            {
                 NSLog (@"Instagram not found");
            }
}

- (UIDocumentInteractionController *) setupControllerWithURL: (NSURL*) fileURL usingDelegate: (id <UIDocumentInteractionControllerDelegate>) interactionDelegate {
    NSLog(@"file url %@",fileURL);
    UIDocumentInteractionController *interactionController = [UIDocumentInteractionController interactionControllerWithURL: fileURL];
    interactionController.delegate = interactionDelegate;

    return interactionController;
}

या

-(void)instaGramWallPost
{
    NSURL *myURL = [NSURL URLWithString:@"Your image url"];
    NSData * imageData = [[NSData alloc] initWithContentsOfURL:myURL];
    UIImage *imgShare = [[UIImage alloc] initWithData:imageData];

    NSURL *instagramURL = [NSURL URLWithString:@"instagram://app"];

    if([[UIApplication sharedApplication] canOpenURL:instagramURL]) //check for App is install or not
    {
        UIImage *imageToUse = imgShare;
        NSString *documentDirectory=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
        NSString *saveImagePath=[documentDirectory stringByAppendingPathComponent:@"Image.igo"];
        NSData *imageData=UIImagePNGRepresentation(imageToUse);
        [imageData writeToFile:saveImagePath atomically:YES];
        NSURL *imageURL=[NSURL fileURLWithPath:saveImagePath];
        self.documentController=[[UIDocumentInteractionController alloc]init];
        self.documentController = [UIDocumentInteractionController interactionControllerWithURL:imageURL];
        self.documentController.delegate = self;
        self.documentController.annotation = [NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@"Testing"], @"InstagramCaption", nil];
        self.documentController.UTI = @"com.instagram.exclusivegram";
        UIViewController *vc = [UIApplication sharedApplication].keyWindow.rootViewController;
        [self.documentController presentOpenInMenuFromRect:CGRectMake(1, 1, 1, 1) inView:vc.view animated:YES];
    }
    else {
        DisplayAlertWithTitle(@"Instagram not found", @"")
    }
}

इसे लिखें .plist

<key>LSApplicationQueriesSchemes</key>
    <array>
        <string>instagram</string>
    </array>

क्या इंस्टाग्राम पर छवि साझा करने के बाद आवेदन पर वापस आना संभव है?
हिरेन

नहीं ... हमें मैन्युअल रूप से वापस आना होगा ... लेकिन अगर मुझे कोई समाधान मिला तो मैं कोड अपडेट कर दूंगा ...
हार्दिक ठक्कर

धन्यवाद @ फहीम पारकर
हार्दिक ठक्कर

मैं इंस्टाग्राम बटन चुनता हूं लेकिन उसके बाद कुछ नहीं होता है? क्या ऐसा करने के लिए इस जवाब से परे कुछ अतिरिक्त कोड है?
noobsmcgoobs 3

1
@HardikThakkar जब मैं आपके समाधान का उपयोग करता हूं तो मुझे केवल चयन करने के लिए एप्लिकेशन का चयन मिलता है, इंस्टाग्राम नहीं। IOS 11. क्या आप जानते हैं कि क्या यह अभी भी काम करता है? धन्यवाद
व्लादिस्लाव मेलनीचो

22

आप इंस्टाग्राम url स्कीम द्वारा दिए गए में से किसी एक का उपयोग कर सकते हैं

यहाँ छवि विवरण दर्ज करें

  1. इंस्टाग्राम डॉक्यूमेंट यहाँ

  2. UIDocumentInteractionController के साथ साझा करें

    final class InstagramPublisher : NSObject {
    
    private var documentsController:UIDocumentInteractionController = UIDocumentInteractionController()
    
    func postImage(image: UIImage, view: UIView, result:((Bool)->Void)? = nil) {
        guard let instagramURL = NSURL(string: "instagram://app") else {
            if let result = result {
                result(false)
            }
        return
    }
        if UIApplication.sharedApplication().canOpenURL(instagramURL) {
            let jpgPath = (NSTemporaryDirectory() as NSString).stringByAppendingPathComponent("instagrammFotoToShareName.igo")
            if let image = UIImageJPEGRepresentation(image, 1.0) {
                image.writeToFile(jpgPath, atomically: true)
                let fileURL = NSURL.fileURLWithPath(jpgPath)
                documentsController.URL = fileURL
                documentsController.UTI = "com.instagram.exclusivegram"
                documentsController.presentOpenInMenuFromRect(view.bounds, inView: view, animated: true)
                if let result = result {
                    result(true)
                }
            } else if let result = result {
                result(false)
            }
        } else {
            if let result = result {
                result(false)
            }
        }
        }
    }
    
  3. प्रत्यक्ष पुनर्निर्देशन के साथ साझा करें

    import Photos
    
    final class InstagramPublisher : NSObject {
    
    func postImage(image: UIImage, result:((Bool)->Void)? = nil) {
    guard let instagramURL = NSURL(string: "instagram://app") else {
        if let result = result {
            result(false)
        }
        return
    }
    
    let image = image.scaleImageWithAspectToWidth(640)
    
    do {
        try PHPhotoLibrary.sharedPhotoLibrary().performChangesAndWait {
            let request = PHAssetChangeRequest.creationRequestForAssetFromImage(image)
    
            let assetID = request.placeholderForCreatedAsset?.localIdentifier ?? ""
            let shareURL = "instagram://library?LocalIdentifier=" + assetID
    
            if UIApplication.sharedApplication().canOpenURL(instagramURL) {
                if let urlForRedirect = NSURL(string: shareURL) {
                    UIApplication.sharedApplication().openURL(urlForRedirect)
                }
            }
        }
    } catch {
        if let result = result {
            result(false)
        }
    }
    }
    }
    
  4. अनुशंसित आकार में आकार बदलने के लिए फोटो

    import UIKit
    
    extension UIImage {
        // MARK: - UIImage+Resize
    
        func scaleImageWithAspectToWidth(toWidth:CGFloat) -> UIImage {
            let oldWidth:CGFloat = size.width
            let scaleFactor:CGFloat = toWidth / oldWidth
    
            let newHeight = self.size.height * scaleFactor
            let newWidth = oldWidth * scaleFactor;
    
            UIGraphicsBeginImageContext(CGSizeMake(newWidth, newHeight))
            drawInRect(CGRectMake(0, 0, newWidth, newHeight))
            let newImage = UIGraphicsGetImageFromCurrentImageContext()
            UIGraphicsEndImageContext()
            return newImage
        }
    }
    
  5. प्लिस्ट में आवश्यक योजना जोड़ना न भूलें

  <key>LSApplicationQueriesSchemes</key>
  <array>
       <string>instagram</string> 
  </array>

1
अन्य उत्तरों से अन्य सामान का एक समूह बनाने की कोशिश की और केवल इसने काम किया (कम से कम वीडियो के लिए। "इंस्टाग्राम: // लोकल? स्थानीय चित्रकार =" यह क्या किया। बहुत धन्यवाद!
ब्योर्न रोश

डायरेक्ट रिडायरेक्ट (जो अब तक का सबसे अच्छा समाधान IMO है) के साथ शेयर अब मेरे लिए काम नहीं करता है - इंस्टाग्राम लाइब्रेरी पेज पर खुलता है, लेकिन एक छवि का चयन नहीं करता है। क्या आपके पास इस URL योजना के साथ कोई बदलाव हो सकता है? क्या आप आईओएस पर इंस्टाग्राम के नवीनतम संस्करण के साथ समान विफलताओं का सामना कर रहे हैं?
र्चिनो

@gbk यह कोड मेरे लिए काम करता है। लेकिन मुझे Instagram में नई आवश्यकता sahre कई फ़ोटो हैं। जैसे इंस्टाग्राम में नए ऑप्शन मल्टीपल अपलोड और डिस्प्ले हैं जैसे स्लाइड व्यू। क्या आप इसे कैसे करते हैं? क्रिप्या मेरि सहायता करे।
एकता पडलिया

पवित्र श * त। इसके लिए शुक्रिया। मैं पिछले दिन के लिए एक दीवार के खिलाफ अपना सिर पीट रहा हूँ, अच्छी तरह से काम करने के लिए अपने ऐप से इंस्टाग्राम पर साझा करने की कोशिश कर रहा हूं।
जेसी एस।

2
IOS 13 के लिए केवल 3 13 वैरिएंट मेरे लिए काम कर रहा है, btw न तो जोड़ना न भूलें <key> NSPhotoLibraryUsageDescription </ key> <string> App को आपकी नग्न तस्वीरों की आवश्यकता है। </ string>
serg -zhd

14

आशा है कि यह उत्तर आपकी क्वेरी को हल करेगा। यह सीधे कैमरे के बजाय इंस्टाग्राम में लाइब्रेरी फोल्डर को खोलेगा।

NSURL *instagramURL = [NSURL URLWithString:@"instagram://app"];
if ([[UIApplication sharedApplication] canOpenURL:instagramURL])
{
    NSURL *videoFilePath = [NSURL URLWithString:[NSString stringWithFormat:@"%@",[request downloadDestinationPath]]]; // Your local path to the video
    NSString *caption = @"Some Preloaded Caption";
    ALAssetsLibrary *library = [[ALAssetsLibrary alloc] init];
    [library writeVideoAtPathToSavedPhotosAlbum:videoFilePath completionBlock:^(NSURL *assetURL, NSError *error) {
        NSString *escapedString   = [self urlencodedString:videoFilePath.absoluteString];
        NSString *escapedCaption  = [self urlencodedString:caption];
        NSURL *instagramURL = [NSURL URLWithString:[NSString stringWithFormat:@"instagram://library?AssetPath=%@&InstagramCaption=%@",escapedString,escapedCaption]];
        if ([[UIApplication sharedApplication] canOpenURL:instagramURL]) {
            [[UIApplication sharedApplication] openURL:instagramURL];
        }
    }];

1
क्या आपको पता है कि हर बार जब आप ऐसा करते हैं, तो Instagram ऐप पिछली छवि का चयन करेगा? मुझे लगता है कि एसेट पथ लिंक के साथ कुछ गलत है।
सुपरटेककोनॉफ

2
उत्कृष्ट !! इसलिए Instagram सीधे UIDocumentInteractionController.Thanks के बिना खुला हो सकता है।
चित्रगुप्त

क्या आप इस मामले में मेरी मदद कर सकते हैं stackoverflow.com/questions/34226433/…
jose920405

क्या हम छवि के साथ URL भी पास कर सकते हैं?
आलोक

1
दुर्भाग्य से, ALAssetsLibrary आईओएस 9 के बाद से हटा दिया गया है
एलेना

10

यदि आप UIDocumentInteractionController का उपयोग नहीं करना चाहते हैं

import Photos

...

func postImageToInstagram(image: UIImage) {
        UIImageWriteToSavedPhotosAlbum(image, self, #selector(SocialShare.image(_:didFinishSavingWithError:contextInfo:)), nil)
    }
    func image(image: UIImage, didFinishSavingWithError error: NSError?, contextInfo:UnsafePointer<Void>) {
        if error != nil {
            print(error)
        }

        let fetchOptions = PHFetchOptions()
        fetchOptions.sortDescriptors = [NSSortDescriptor(key: "creationDate", ascending: false)]
        let fetchResult = PHAsset.fetchAssetsWithMediaType(.Image, options: fetchOptions)
        if let lastAsset = fetchResult.firstObject as? PHAsset {
            let localIdentifier = lastAsset.localIdentifier
            let u = "instagram://library?LocalIdentifier=" + localIdentifier
            let url = NSURL(string: u)!
            if UIApplication.sharedApplication().canOpenURL(url) {
                UIApplication.sharedApplication().openURL(NSURL(string: u)!)
            } else {
                let alertController = UIAlertController(title: "Error", message: "Instagram is not installed", preferredStyle: .Alert)
                alertController.addAction(UIAlertAction(title: "OK", style: .Default, handler: nil))
                self.presentViewController(alertController, animated: true, completion: nil)
            }

        }
    }

यह वही है जो मुझे वास्तव में चाहिए। धन्यवाद!
अज़ेल

आपने मेरी जान बचाई, परफेक्ट जवाब। धन्यवाद !!
टेक्नरॉड

1
यह हर बार पूरी तरह से गलत है जब मैं इंस्टाग्राम पर साझा करने के लिए क्लिक करता हूं और कैमरा रोल में इसकी बचत को रद्द कर दिया।
श्रीकांत के

9

IOS 6 और इसके बाद के संस्करण के लिए, आप इस UIActivity का उपयोग इंस्टाग्राम पर छवियां अपलोड करने के लिए कर सकते हैं जिसमें iOS हुक का उपयोग करने वाले समान वर्कफ़्लो हैं लेकिन यह निर्दिष्ट करता है:

https://github.com/coryalder/DMActivityInstagram


हाय @Chintan पटेल मैं उपयोगकर्ता प्रोफ़ाइल जानकारी कैसे प्राप्त कर सकता हूं यदि आपके पास कोई नमूना स्रोत है तो कृपया हमारे साथ साझा करें
साबिर

6

यह सही उत्तर है जिसे मैं विस्तार के साथ लागू करता हूं। .H फ़ाइल में

 UIImageView *imageMain;
 @property (nonatomic, strong) UIDocumentInteractionController *documentController;

, केवल फ़ाइल लिखें

 NSURL *instagramURL = [NSURL URLWithString:@"instagram://app"];
 if([[UIApplication sharedApplication] canOpenURL:instagramURL])
 {
      CGFloat cropVal = (imageMain.image.size.height > imageMain.image.size.width ? imageMain.image.size.width : imageMain.image.size.height);

      cropVal *= [imageMain.image scale];

      CGRect cropRect = (CGRect){.size.height = cropVal, .size.width = cropVal};
      CGImageRef imageRef = CGImageCreateWithImageInRect([imageMain.image CGImage], cropRect);

      NSData *imageData = UIImageJPEGRepresentation([UIImage imageWithCGImage:imageRef], 1.0);
      CGImageRelease(imageRef);

      NSString *writePath = [NSTemporaryDirectory() stringByAppendingPathComponent:@"instagram.igo"];
      if (![imageData writeToFile:writePath atomically:YES]) {
      // failure
           NSLog(@"image save failed to path %@", writePath);
           return;
      } else {
      // success.
      }

      // send it to instagram.
      NSURL *fileURL = [NSURL fileURLWithPath:writePath];
      self.documentController = [UIDocumentInteractionController interactionControllerWithURL:fileURL];
      self.documentController.delegate = self;
      [self.documentController setUTI:@"com.instagram.exclusivegram"];
      [self.documentController setAnnotation:@{@"InstagramCaption" : @"We are making fun"}];
      [self.documentController presentOpenInMenuFromRect:CGRectMake(0, 0, 320, 480) inView:self.view animated:YES];
 }
 else
 {
      NSLog (@"Instagram not found");

 }

निश्चित रूप से आपको परिणाम मिलेगा। उदाहरण के लिए, आप इंस्टाग्राम छवि के साथ नीचे से पॉपओवर देखेंगे। इस पर क्लिक करें और मज़े करें।


5

मैंने अपने आवेदन में इसकी कोशिश की और यह पूरी तरह से काम कर रहा है (स्विफ्ट)

import Foundation

import UIKit

class InstagramManager: NSObject, UIDocumentInteractionControllerDelegate {

    private let kInstagramURL = "instagram://"
    private let kUTI = "com.instagram.exclusivegram"
    private let kfileNameExtension = "instagram.igo"
    private let kAlertViewTitle = "Error"
    private let kAlertViewMessage = "Please install the Instagram application"

    var documentInteractionController = UIDocumentInteractionController()

    // singleton manager
    class var sharedManager: InstagramManager {
        struct Singleton {
            static let instance = InstagramManager()
        }
        return Singleton.instance
    }

    func postImageToInstagramWithCaption(imageInstagram: UIImage, instagramCaption: String, view: UIView) {
        // called to post image with caption to the instagram application

        let instagramURL = NSURL(string: kInstagramURL)
        if UIApplication.sharedApplication().canOpenURL(instagramURL!) {
            let jpgPath = (NSTemporaryDirectory() as NSString).stringByAppendingPathComponent(kfileNameExtension)
            UIImageJPEGRepresentation(imageInstagram, 1.0)!.writeToFile(jpgPath, atomically: true)
            let rect = CGRectMake(0,0,612,612)
            let fileURL = NSURL.fileURLWithPath(jpgPath)
            documentInteractionController.URL = fileURL
            documentInteractionController.delegate = self
            documentInteractionController.UTI = kUTI

            // adding caption for the image
            documentInteractionController.annotation = ["InstagramCaption": instagramCaption]
            documentInteractionController.presentOpenInMenuFromRect(rect, inView: view, animated: true)
        }
        else {

            // alert displayed when the instagram application is not available in the device
            UIAlertView(title: kAlertViewTitle, message: kAlertViewMessage, delegate:nil, cancelButtonTitle:"Ok").show()
        }
    }
}


 func sendToInstagram(){

     let image = postImage

             InstagramManager.sharedManager.postImageToInstagramWithCaption(image!, instagramCaption: "\(description)", view: self.view)

 }

2

यहाँ सही उत्तर है। आप सीधे Instagram पर एक छवि पोस्ट नहीं कर सकते। आपको UIDocumentInteractionController का उपयोग करके Instagram पर पुनर्निर्देशित करना होगा ...

NSString* imagePath = [NSString stringWithFormat:@"%@/instagramShare.igo", [NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES) lastObject]];
[[NSFileManager defaultManager] removeItemAtPath:imagePath error:nil];

UIImage *instagramImage = [UIImage imageNamed:@"imagename you want to share"];
[UIImagePNGRepresentation(instagramImage) writeToFile:imagePath atomically:YES];
NSLog(@"Image Size >>> %@", NSStringFromCGSize(instagramImage.size));

self.dic=[UIDocumentInteractionController interactionControllerWithURL:[NSURL fileURLWithPath:imagePath]];
self.dic.delegate = self;
self.dic.UTI = @"com.instagram.exclusivegram";
[self.dic presentOpenInMenuFromRect: self.view.frame inView:self.view animated:YES ];

}

ध्यान दें: एक बार जब आप इंस्टाग्राम ऐप पर रीडायरेक्ट करते हैं तो आप अपने ऐप पर वापस नहीं लौट सकते। आपको अपना ऐप फिर से खोलना होगा


आपने प्रतिनिधि को सेट किया लेकिन इसे लिखा / पोस्ट नहीं किया?
रैप्टर

2

आप UIDocumentInteractionController का उपयोग किए बिना कर सकते हैं और इन 3 विधियों के साथ सीधे Instagram पर जा सकते हैं:

यह अन्य सभी प्रसिद्ध ऐप की तरह ही काम करता है। कोड ऑब्जेक्टिव c में लिखा गया है, इसलिए आप चाहें तो इसे स्विफ्ट में ट्रांसलेट कर सकते हैं। आपको जो करने की ज़रूरत है वह आपकी छवि को डिवाइस पर सहेज रहा है और URLScheme का उपयोग कर रहा है

इसे अपने .m फ़ाइल के अंदर जोड़ें

#import <Photos/Photos.h>

सबसे पहले आपको इस विधि से अपने UIImage को डिवाइस में सहेजना होगा:

-(void)savePostsPhotoBeforeSharing
{
    UIImageWriteToSavedPhotosAlbum([UIImage imageNamed:@"image_file_name.jpg"], self, @selector(image:didFinishSavingWithError:contextInfo:), NULL);
}

यह विधि आपके डिवाइस में छवि को बचाने के लिए कॉलबैक है:

- (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo: (void *) contextInfo;
{
    [self sharePostOnInstagram];

}

छवि को डिवाइस में सहेजे जाने के बाद, आपको उस छवि को क्वेरी करने की आवश्यकता है जिसे आपने सहेजा है और इसे PHAsset के रूप में प्राप्त करें

-(void)sharePostOnInstagram
{
    PHFetchOptions *fetchOptions = [PHFetchOptions new];
    fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:NO],];
    __block PHAsset *assetToShare;
    PHFetchResult *result = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:fetchOptions];
    [result enumerateObjectsUsingBlock:^(PHAsset *asset, NSUInteger idx, BOOL *stop) {
        assetToShare = asset;


    }];


    if([assetToShare isKindOfClass:[PHAsset class]])
    {
        NSString *localIdentifier = assetToShare.localIdentifier;
        NSString *urlString = [NSString stringWithFormat:@"instagram://library?LocalIdentifier=%@",localIdentifier];
        NSURL *instagramURL = [NSURL URLWithString:urlString];
        if ([[UIApplication sharedApplication] canOpenURL: instagramURL])
        {
            [[UIApplication sharedApplication] openURL: instagramURL];
        } else
        {
            // can not share with whats app
            NSLog(@"No instagram installed");
        }

    }
}

और इसे अपनी जानकारी में न रखें LSApplicationQueriesSchemes

<string>instagram</string>


मैं इंस्टाग्राम पर कई तस्वीरें कैसे जोड़ सकता हूं?
एकता पडलिया

1
- (void) shareImageWithInstagram
{
    NSURL *instagramURL = [NSURL URLWithString:@"instagram://"];
    if ([[UIApplication sharedApplication] canOpenURL:instagramURL])
    {
        UICachedFileMgr* mgr = _gCachedManger;
        UIImage* photoImage = [mgr imageWithUrl:_imageView.image];
        NSData* imageData = UIImagePNGRepresentation(photoImage);
        NSString* captionString = [NSString  stringWithFormat:@"ANY_TAG",];
        NSString* imagePath = [UIUtils documentDirectoryWithSubpath:@"image.igo"];
        [imageData writeToFile:imagePath atomically:NO];
        NSURL* fileURL = [NSURL fileURLWithPath:[NSString stringWithFormat:@"file://%@",imagePath]];

        self.docFile = [[self setupControllerWithURL:fileURL usingDelegate:self]retain];
        self.docFile.annotation = [NSDictionary dictionaryWithObject: captionString
                                                     forKey:@"InstagramCaption"];
        self.docFile.UTI = @"com.instagram.photo";

        // OPEN THE HOOK
        [self.docFile presentOpenInMenuFromRect:self.view.frame inView:self.view animated:YES];
    }
    else
    {
        [UIUtils messageAlert:@"Instagram not installed in this device!\nTo share image please install instagram." title:nil delegate:nil];
    }
}

मैंने अपने आवेदन में यह कोशिश की और यह निश्चित रूप से काम करेगा


हो सकता है आप की व्याख्या करनी चाहिए UIUtilsऔर UICachedFileMgr?
रैप्टर

समझना। अधिक विवरण प्रदान करने के लिए अपने उत्तर को संपादित करने का सुझाव दें
Raptor

@ रैप्टर: निम्न से नमूना एप्लिकेशन डाउनलोड करें: लिंक
neha_sinha19

UIUtils एक ऐसा वर्ग है जिसे मैंने उपयोगिता विधियों को प्रबंधित करने के लिए बनाया है। यह NSObject से लिया गया है। मैंने अलर्ट दृश्य दिखाने के लिए मैसेजअर्ट विधि को जोड़ा है। नमूना एप्लिकेशन में जिसका लिंक मैंने ऊपर दिया है, आप UIUtils वर्ग पा सकते हैं। उम्मीद है, आप समझ जाएंगे।
नेहा_सिंह 19

1

मेरे लिए, मेरे iOS ऐप से इंस्टाग्राम पर फ़ोटो साझा करने का सबसे अच्छा और आसान तरीका

आपको .igo प्रारूप का उपयोग करके डिवाइस पर छवि को बचाने की आवश्यकता है, फिर स्थानीय पथ इंस्टाग्राम ऐप भेजने के लिए "UIDocumentInteractionController" का उपयोग करें। "UIDocumentInteractionControllerDelegate" सेट करना न भूलें

मेरी सलाह कुछ इस तरह से जोड़ना है:

NSURL *instagramURL = [NSURL URLWithString:@"instagram://app"];
if ([[UIApplication sharedApplication] canOpenURL:instagramURL]) 
{
 <your code>
}

1
NSURL *instagramURL = [NSURL URLWithString:@"instagram://app"];

if ([[UIApplication sharedApplication] canOpenURL:instagramURL])
{

    NSString  *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:[NSString stringWithFormat:@"Documents/Insta_Images/%@",@"shareImage.png"]];


    NSURL *igImageHookFile = [[NSURL alloc] initWithString:[[NSString alloc] initWithFormat:@"file://%@", jpgPath]];


    docController.UTI = @"com.instagram.photo";

    docController = [self setupControllerWithURL:igImageHookFile usingDelegate:self];

    docController =[UIDocumentInteractionController interactionControllerWithURL:igImageHookFile];

    docController.delegate=self;

    [docController presentOpenInMenuFromRect:CGRectMake(0 ,0 , 612, 612) inView:self.view animated:YES];

1

मैंने देखा कि यदि आप इसके बजाय URLछवि को इंगित करते activityItemsहैं UIImage, तो Copy to Instagramगतिविधि आइटम स्वयं प्रकट होता है, और आपको कुछ और करने की आवश्यकता नहीं है। कृपया ध्यान दें कि Stringअंदर की वस्तुओं को activityItemsछोड़ दिया जाएगा और इंस्टाग्राम में कैप्शन को प्रीफ़िल करने का कोई तरीका नहीं है। यदि आप अभी भी उपयोगकर्ता को विशेष कैप्शन पोस्ट करने के लिए संकेत देना चाहते हैं, तो आपको कस्टम गतिविधि बनाने की आवश्यकता होगी जहां आप उस टेक्स्ट को क्लिपबोर्ड पर कॉपी कर सकते हैं और उपयोगकर्ता को इस बारे में बता सकते हैं, जैसे कि इस जानकारी में


1
    @import Photos;

    -(void)shareOnInstagram:(UIImage*)imageInstagram {

        [self authorizePHAssest:imageInstagram];
    }

    -(void)authorizePHAssest:(UIImage *)aImage{

        PHAuthorizationStatus status = [PHPhotoLibrary authorizationStatus];

        if (status == PHAuthorizationStatusAuthorized) {
            // Access has been granted.
            [self savePostsPhotoBeforeSharing:aImage];
        }

        else if (status == PHAuthorizationStatusDenied) {
            // Access has been denied.
        }

        else if (status == PHAuthorizationStatusNotDetermined) {

            // Access has not been determined.
            [PHPhotoLibrary requestAuthorization:^(PHAuthorizationStatus status) {

                if (status == PHAuthorizationStatusAuthorized) {
                    // Access has been granted.
                    [self savePostsPhotoBeforeSharing:aImage];
                }
            }];
        }

        else if (status == PHAuthorizationStatusRestricted) {
            // Restricted access - normally won't happen.
        }
    }
    -(void)saveImageInDeviceBeforeSharing:(UIImage *)aImage
    {
        UIImageWriteToSavedPhotosAlbum(aImage, self, @selector(image:didFinishSavingWithError:contextInfo:), NULL);
    }

    - (void)image:(UIImage *)image didFinishSavingWithError:(NSError *)error contextInfo: (void *) contextInfo;
    {
        if (error == nil){
            [self sharePostOnInstagram];
        }
    }

    -(void)shareImageOnInstagram
    {
        PHFetchOptions *fetchOptions = [PHFetchOptions new];
        fetchOptions.sortDescriptors = @[[NSSortDescriptor sortDescriptorWithKey:@"creationDate" ascending:false]];
        PHFetchResult *result = [PHAsset fetchAssetsWithMediaType:PHAssetMediaTypeImage options:fetchOptions];

        __block PHAsset *assetToShare = [result firstObject];

        if([assetToShare isKindOfClass:[PHAsset class]])
        {
            NSString *localIdentifier = assetToShare.localIdentifier;
            NSString *urlString = [NSString stringWithFormat:@"instagram://library?LocalIdentifier=%@",localIdentifier];
            NSURL *instagramURL = [NSURL URLWithString:urlString];
            if ([[UIApplication sharedApplication] canOpenURL: instagramURL])
            {
                [[UIApplication sharedApplication] openURL:instagramURL options:@{} completionHandler:nil];
            } else
            {
                NSLog(@"No instagram installed");
            }
        }
    }

नोट: - छोटा सा भूत: - Info.plist में नीचे कुंजी जोड़ें

<key>LSApplicationQueriesSchemes</key>
<array>
<string>instagram</string>
</array>

0

मैंने इस कोड का उपयोग किया है:

    NSString* filePathStr = [[NSBundle mainBundle] pathForResource:@"UMS_social_demo" ofType:@"png"];
NSURL* fileUrl = [NSURL fileURLWithPath:filePathStr];

NSString  *jpgPath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/test.igo"];
[[NSData dataWithContentsOfURL:fileUrl] writeToFile:jpgPath atomically:YES];

NSURL* documentURL = [NSURL URLWithString:[NSString stringWithFormat:@"file://%@", jpgPath]];

UIDocumentInteractionController *interactionController = [UIDocumentInteractionController interactionControllerWithURL: documentURL];
self.interactionController = interactionController;
interactionController.delegate = self;
interactionController.UTI = @"com.instagram.photo";
CGRect rect = CGRectMake(0 ,0 , 0, 0);
[interactionController presentOpenInMenuFromRect:rect inView:self.view animated:YES];

0
-(void)shareOnInstagram {

    CGRect rect = CGRectMake(self.view.frame.size.width*0.375 ,self.view.frame.size.height/2 , 0, 0);



    NSString * saveImagePath = [NSHomeDirectory() stringByAppendingPathComponent:@"Documents/ShareInstragramImage.igo"];

    [UIImagePNGRepresentation(_image) writeToFile:saveImagePath atomically:YES];

    NSURL *igImageHookFile = [[NSURL alloc] initWithString:[[NSString alloc] initWithFormat:@"file://%@", saveImagePath]];

    self.documentController=[UIDocumentInteractionController interactionControllerWithURL:igImageHookFile];

    self.documentController.UTI = @"com.instagram.exclusivegram";
    self.documentController = [self setupControllerWithURL:igImageHookFile usingDelegate:self];

    [self.documentController presentOpenInMenuFromRect: rect    inView: self.view animated: YES ];

}

-(UIDocumentInteractionController *) setupControllerWithURL: (NSURL*) fileURL usingDelegate: (id <UIDocumentInteractionControllerDelegate>) interactionDelegate {

    UIDocumentInteractionController *interactionController = [UIDocumentInteractionController interactionControllerWithURL: fileURL];
    interactionController.delegate = interactionDelegate;
    return interactionController;
}

1
हालांकि यह कोड प्रश्न का उत्तर दे सकता है, लेकिन समस्या को हल करने के तरीके के बारे में अतिरिक्त संदर्भ प्रदान करता है और यह समस्या को हल करता है ताकि उत्तर के दीर्घकालिक मूल्य में सुधार हो सके।
Thewaywewere

0
 NSURL *myURL = [NSURL URLWithString:sampleImageURL];
                    NSData * imageData = [[NSData alloc] initWithContentsOfURL:myURL];
                    UIImage *imageToUse = [[UIImage alloc] initWithData:imageData];
                    NSString *documentDirectory=[NSHomeDirectory() stringByAppendingPathComponent:@"Documents"];
                    NSString *saveImagePath=[documentDirectory stringByAppendingPathComponent:@"Image.ig"];
                    [imageData writeToFile:saveImagePath atomically:YES];
                    NSURL *imageURL=[NSURL fileURLWithPath:saveImagePath];
                    self.documentController = [UIDocumentInteractionController interactionControllerWithURL:imageURL];
                    self.documentController.delegate = self;
                    self.documentController.annotation = [NSDictionary dictionaryWithObjectsAndKeys:[NSString stringWithFormat:@""], @"", nil];
                    self.documentController.UTI = @"com.instagram.exclusivegram";
                    [self.documentController presentOpenInMenuFromRect:CGRectMake(1, 1, 1, 1) inView:self.view animated:YES];
हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.