আইওএস-তে ইনস্টাগ্রামে কীভাবে একটি ছবি ভাগ করবেন?


87

আমার ক্লায়েন্ট ইনস্টাগ্রাম, টুইটার, ফেসবুকে একটি চিত্র ভাগ করতে চান।

আমি টুইটার এবং ফেসবুক করেছি কিন্তু ইনস্টাগ্রামে ছবি ভাগ করে নেওয়ার জন্য কোনও এপিআই বা কোনও জিনিস ইন্টারনেটে পাইনি। ইনস্টাগ্রামে চিত্র ভাগ করা কি সম্ভব? যদি হ্যাঁ তবে কিভাবে?

আমি যখন ইনস্টাগ্রামের বিকাশকারী সাইটটি পরীক্ষা করি তখন আমি রিল এবং পাইথনের উপর রুবির লাইব্রেরিগুলি পেয়েছি। তবে আইওএস এসডকের কোনও ডকুমেন্টেশন নেই

আমি ইনস্টাগ্রাম / ডেডেলিভার অনুসারে ইনস্টাগ্রাম থেকে টোকেন পেয়েছি তবে ইনস্টাগ্রাম চিত্রের সাথে ভাগ করার জন্য পরবর্তী পদক্ষেপটি এখন কী করতে হবে তা জানি না।


উত্তর:


70

অবশেষে আমি উত্তর পেয়েছি। আপনি সরাসরি ইনস্টাগ্রামে কোনও চিত্র পোস্ট করতে পারবেন না। আপনাকে আপনার চিত্রটি ইউআইডোকামেন্টইন্ট্রেসেশন কন্ট্রোলার দিয়ে পুনর্নির্দেশ করতে হবে।

@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;
}

দ্রষ্টব্য: একবার আপনি ইনস্ট্রাগ্রাম অ্যাপে পুনর্নির্দেশ করলে আপনি আপনার অ্যাপ্লিকেশনটিতে ফিরে যেতে পারবেন না। আপনাকে আবার আপনার অ্যাপ খুলতে হবে

এখান থেকে উত্স ডাউনলোড করুন


ফাংশন সেটআপ নিয়ন্ত্রণকারীর সাথে কোথায় বা এটি করতে পারে?
khaled

4
@ সুরেন্দ্ররঠোর আপনাকে আপনার চিত্রটি 12১২ * 12১২ এর মধ্যে স্কেল করতে হবে এবং .ig ফর্ম্যাটে সংরক্ষণ করতে হবে। আইজি দেখায় যে আপনি নিজের ছবি ইনস্টাগ্রামে খুলতে চান এবং আপনার আইফোন বা আইপডে সংস্করণ ৪.৩ পর্যন্ত পরীক্ষা করতে হবে। আইপ্যাড সমর্থিত নয়
হিরেন

4
@ হাইরেন: হ্যাঁ, আপনি ঠিক বলেছেন তবে আমার অ্যাপে আমি একটি দৃশ্যের স্ক্রিনশট নিচ্ছি এবং তারপরে ইনস্টাগ্রাম অ্যাপের মাধ্যমে সেই স্ক্রিনশটটি ভাগ করছি এবং এটি পুরোপুরি ভালভাবে কাজ করছে। তবে আমি সেই স্ক্রিনশটের সাথে কিছু স্থিতিশীল পাঠ্যও পাস করতে চাই। আপনার যদি কোন ধারণা থাকে তবে আমাকে সাহায্য করুন। ডিএমএসিটিভিটিআইন্সটাগ্রামের জন্য গিথুবে একটি ডেমো কোড রয়েছে এবং আপনি যা বলতে চাইছেন সেখান থেকে আপনি দেখতে পাবেন। আগাম ধন্যবাদ.
মান্থান

4
এই লাইনটি ব্যবহার করে আমি আইওএস 6 এ ক্র্যাশ পেয়েছি: এনএসআরএল * igImageHookFile = [[এনএসআরএল বরাদ্দ] ইনিউইং স্ট্রিং: [[এনএসএসআরটিং বরাদ্দ] #With Format: @ "ফাইল: //% @", jpgPath]]; এটি উভয় ক্ষেত্রেই কাজ করে: এনএসআরএল * igImageHookFile = [এনএসআরএল ফাইল URLWithPath: jpgPath]; উত্তরটি সেভাবে সম্পাদন করার যোগ্য হতে পারে, যদি না আমি কিছু মিস করছি?
ওয়েইন ওয়েল

4
এটি কি ন্যায়সঙ্গত আমি, বা অন্য কেউ বলতে চান "আরে ইনস্টাগ্রাম, আপনি একবার বিকাশকারী হয়েছিলেন, আপনি কেন আমাদের জীবনকে এত কঠিন করে তুলছেন?"
ক্রিস চেন

27

ইনস্টাগ্রামে চিত্র + ক্যাপশন পাঠ্য আপলোড করার জন্য এখানে একটি সম্পূর্ণ পরীক্ষিত কোড দেওয়া আছে ..

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

ইনস্টাগ্রাম অ্যাপ্লিকেশন আপনার ডিভাইসে ইনস্টল করা হয়?
হার্ডিক ঠাক্কর

4
@ হার্দিকথাকর যখন আমি আপনার সমাধানটি ব্যবহার করি তখন আমি কেবলমাত্র অ্যাপ্লিকেশনগুলির পছন্দ বেছে নেব, ইনস্টাগ্রাম নয়। আইওএস ১১. এটি কি এখনও কাজ করে জানেন? আপনাকে ধন্যবাদ
ভ্লাদিস্লাভ মেলেনিচেঙ্কো

22

আপনি ইনস্টাগ্রাম ইউআরএল স্কিম সরবরাহিত একটি ব্যবহার করতে পারেন

এখানে চিত্র বর্ণনা লিখুন

  1. ইনস্টাগ্রাম অফিসিয়াল ডক এখানে

  2. UIDocamentInterationController এর সাথে ভাগ করুন

    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>

4
অন্যান্য উত্তরগুলি থেকে একসাথে অন্যান্য স্টাফ চেষ্টা করেছিল এবং কেবল এটিই কাজ করেছিল (কমপক্ষে ভিডিওগুলির জন্য inst "ইনস্টাগ্রাম: // লাইব্রেরি? লোকালআইডেন্টিফায়ার =" এটি কী করেছিল Many অনেক ধন্যবাদ!
জর্জ রোচে

প্রত্যক্ষ পুনঃনির্দেশের সাথে ভাগ (যা এখন পর্যন্ত সেরা সমাধান আইএমও) আমার পক্ষে আর কাজ করে না - ইনস্টাগ্রামটি লাইব্রেরির পৃষ্ঠায় খোলে তবে কোনও চিত্র প্রাক-নির্বাচন করে না। এই ইউআরএল স্কিমের সাহায্যে কী পরিবর্তন হয়েছে সে সম্পর্কে আপনার কি ধারণা আছে? আপনি কি আইওএস-এ ইনস্টাগ্রামের সর্বশেষতম সংস্করণটির সাথে একই ব্যর্থতা অনুভব করছেন?
urchino

@gbk এই কোডটি আমার পক্ষে কাজ করে। তবে ইনস্টাগ্রামে আমার নতুন প্রয়োজনে সারে একাধিক ছবি রয়েছে। ইনস্টাগ্রামের মতো নতুন বিকল্প রয়েছে একাধিক আপলোড এবং স্লাইড ভিউয়ের মতো প্রদর্শন। আপনি কিভাবে এটি করবেন? আমাকে সাহায্য করুন.
একতা পদলিয়া

পবিত্র sh * টি। এই জন্য আপনাকে ধন্যবাদ. আমি গত দিনটি একটি প্রাচীরের বিরুদ্ধে মাথা ঠেকিয়ে যাচ্ছি যাতে ভালভাবে কাজ করার জন্য আমার অ্যাপ্লিকেশন থেকে ইনস্টাগ্রামে ভাগ করে নেওয়ার চেষ্টা করছি।
জেসি এস।

4
আইওএস 13 এর জন্য কেবল 3 ডি বৈকল্পিক আমার জন্য কাজ করছে, তবে বিটিডব্লু <key> এনএসপি ফটো লাইব্রেরি ইউজেজ বিবরণ </key> <স্ট্রিং> অ্যাপটিকে আপনার নগ্ন ফটো দরকার </ </ স্ট্রিং>
সার্জ_জেড

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];
        }
    }];

4
আপনি কি প্রতিবার এটি করেন তা খুঁজে পাবেন, ইনস্টাগ্রাম অ্যাপটি পূর্ববর্তী চিত্রটি লোড করবে? আমি মনে করি সম্পদ পথের লিঙ্কটিতে কিছু ভুল আছে।
সুপারটেকনোবফ

4
চমত্কার !! সুতরাং ইনস্ট্রাগুলি সরাসরি ইউআইডোক্যামেন্টইন্ট্রেসকন্ট্রোলার.আর ধন্যবাদ ছাড়া খোলা যেতে পারে।
আইচিরাগ

তুমি কি আমাকে এই ক্ষেত্রে ব্যাপারে সাহায্য করতে পারেন stackoverflow.com/questions/34226433/...
jose920405

আমরা কি ছবিটি দিয়ে URL টিও পাস করতে পারি?
অলোক

4
দুর্ভাগ্যবশত, ALAssetsLibrary অবচিত আইওএস 9. যেহেতু
Alena

10

আপনি যদি ইউআইডোসামেন্ট ইনটেকশন কন্ট্রোলার ব্যবহার করতে না চান

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)
            }

        }
    }

এটি আমার সত্যই দরকার। ধন্যবাদ!
আজেল

আপনি আমার জীবন বাঁচিয়েছেন, নিখুঁত উত্তর। ধন্যবাদ !!
টেকনারড

4
আমি যখন ইনস্টাগ্রামে ভাগ করে নেওয়ার জন্য ক্লিক করি এবং ক্যামেরা রোলটিতে এর সংরক্ষণ বাতিল না করি তখনই এটি সম্পূর্ণ ভুল wrong
শ্রীকান্ত কে

9

আইওএস 6 এবং তারপরের জন্য, আপনি ইনস্টাগ্রামে চিত্রগুলি আপলোড করতে এই ইউআইএসিটিভিটি ব্যবহার করতে পারেন যা আইওএস হুক ব্যবহার করে একই ওয়ার্কফ্লো রয়েছে তবে বিকাশকে সহজতর করে:

https://github.com/coryalder/DMActivityInstગ્રામ


হাই @ চিন্তন প্যাটেল কীভাবে ব্যবহারকারীর প্রোফাইল তথ্য পেতে পারি যদি আপনার কোনও নমুনা উত্স থাকে তবে আমাদের সাথে শেয়ার করুন
সাবির

6

এটি সঠিক উত্তর যা আমি বিস্তারিত সহ প্রয়োগ করি। .H ফাইলে

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

in.m ফাইল কেবল লিখুন

 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");

 }

অবশ্যই আপনি ফলাফল পাবেন। উদাহরণস্বরূপ আপনি ইনস্টাগ্রাম চিত্রের সাথে নীচ থেকে পপওভার দেখতে পাবেন itএটি ক্লিক করুন এবং মজা করুন।


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

এখানে সঠিক উত্তর। আপনি সরাসরি ইনস্টাগ্রামে কোনও ছবি পোস্ট করতে পারবেন না। আপনাকে ইউআইডোক্যামেন্ট ইনটেকশন কন্ট্রোলার ব্যবহার করে ইনস্টাগ্রামে পুনর্নির্দেশ করা দরকার ...

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

আপনি ইউআইডোকামেন্ট ইনটেকশন কন্ট্রোলার ব্যবহার না করে এটি করতে পারেন এবং এই 3 টি পদ্ধতিতে সরাসরি ইনস্টাগ্রামে যেতে পারেন:

এটি অন্যান্য সমস্ত বিখ্যাত অ্যাপের মতোই কাজ করে। কোডটি উদ্দেশ্য সিতে লেখা হয়েছে, আপনি চাইলে আপনি এটি স্যুইফ্টে অনুবাদ করতে পারেন। আপনার যা করা দরকার তা হ'ল আপনার চিত্রটি ডিভাইসে সংরক্ষণ করা এবং ইউআরএলচেমি ব্যবহার করা

এটি আপনার .m ফাইলের মধ্যে যুক্ত করুন

#import <Photos/Photos.h>

প্রথমে আপনাকে এই পদ্ধতির সাহায্যে আপনার ইউআইআইজেইসটি ডিভাইসে সংরক্ষণ করতে হবে:

-(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");
        }

    }
}

এবং আপনার info.plist এর অধীনে এটি রাখতে ভুলবেন না 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?
র‌্যাপ্টর

বোঝা. আরও বিশদ সরবরাহ করার জন্য আপনার উত্তর সম্পাদনা করার পরামর্শ দিন
র্যাপ্টর

@ র‌্যাপ্টর: দয়া করে নিম্নলিখিতটি থেকে নমুনা অ্যাপ্লিকেশনটি ডাউনলোড করুন: লিংক
নেহা_সিংহ 19

ইউআইইটিসগুলি একটি ক্লাস যা আমি ইউটিলিটি পদ্ধতিগুলি পরিচালনা করার জন্য তৈরি করেছি t এটি এনএসবজেক্ট থেকে উদ্ভূত। সতর্কতা প্রদর্শনের জন্য আমি বার্তা সতর্কতা পদ্ধতি যুক্ত করেছি। নমুনা অ্যাপটিতে যার লিঙ্কটি আমি উপরে সরবরাহ করেছি, আপনি UIUtils শ্রেণীর সন্ধান করতে পারেন। আশা করি, আপনি বুঝতে পারবেন।
নেহা_সিংহ 19

1

আমার হিসাবে, এখানে বর্ণিত সেরা এবং সহজ উপায়টি আমার আইওএস অ্যাপ থেকে ইনস্টাগ্রামে ফটো ভাগ করুন

আপনার ডিভাইসে .igo ফর্ম্যাট ব্যবহার করে চিত্র সংরক্ষণ করতে হবে, তারপরে স্থানীয় পথের ইনস্টাগ্রাম অ্যাপ্লিকেশন প্রেরণের জন্য "UIDocamentInterationController" ব্যবহার করুন। "UIDocamentInterationControllerDelegate" সেট করতে ভুলবেন না

আমার পরামর্শটি হ'ল এর মতো কিছু যুক্ত করুন:

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");
            }
        }
    }

দ্রষ্টব্য: - আইএমপি টোডো: - ইনফট.পিস্টে নীচে কী যুক্ত করুন

<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;
}

4
যদিও এই কোডটি প্রশ্নের উত্তর দিতে পারে, কীভাবে এবং / বা কেন এটি সমস্যার সমাধান করে তা সম্পর্কিত অতিরিক্ত প্রসঙ্গ সরবরাহ করলে উত্তরের দীর্ঘমেয়াদী মান উন্নত হবে।
ওয়েওওয়েওয়ের

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];
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.