mirror of
https://github.com/jjbrunton/Sauci.git
synced 2026-11-01 18:19:43 +00:00
fix(share): attach captured card image when sharing to Instagram Stories
Both share modals opened the instagram-stories:// scheme without ever placing the captured PNG on the pasteboard, so Instagram opened an empty story. Replace the manual scheme launch with react-native-share shareSingle(INSTAGRAM_STORIES), which writes the image to UIPasteboard under com.instagram.sharedSticker.backgroundImage on iOS and uses the ADD_TO_STORY intent on Android. Gate the flow on the required Facebook App ID (EXPO_PUBLIC_FACEBOOK_APP_ID) and Instagram being installed, with fallback to the system share sheet, and remove the dead base64 reads. Co-Authored-By: Claude Fable 5 <noreply@anthropic.com>
This commit is contained in:
1 parent
f38b6f14fa
commit
04822043ae
11 files changed
+215
-62
No files matched your search
@@ -1,6 +1,5 @@
|
||||
import { useEffect, useRef, useState } from "react";
|
||||
import {
|
||||
Linking,
|
||||
Modal,
|
||||
Platform,
|
||||
Share,
|
||||
@@ -16,8 +15,8 @@ import { Ionicons } from "@expo/vector-icons";
|
||||
import { useSafeAreaInsets } from "react-native-safe-area-context";
|
||||
import ViewShot from "react-native-view-shot";
|
||||
import * as Sharing from "expo-sharing";
|
||||
import * as FileSystem from "expo-file-system/legacy";
|
||||
import { colors, spacing, typography, blur } from "../../../theme";
|
||||
import { shareToInstagramStories } from "../../../lib/instagramShare";
|
||||
import { Events } from "../../../lib/analytics";
|
||||
import { QuizResultsShareCard } from "./QuizResultsShareCard";
|
||||
|
||||
@@ -63,22 +62,11 @@ export function QuizShareModal({ visible, onClose, scorePercent }: QuizShareModa
|
||||
const handleInstagramShare = async () => {
|
||||
if (!capturedUri) return;
|
||||
|
||||
try {
|
||||
const instagramUrl = "instagram://app";
|
||||
const canOpenInstagram = await Linking.canOpenURL(instagramUrl);
|
||||
|
||||
if (canOpenInstagram && Platform.OS === "ios") {
|
||||
await FileSystem.readAsStringAsync(capturedUri, {
|
||||
encoding: FileSystem.EncodingType.Base64,
|
||||
});
|
||||
const instagramStoriesUrl = "instagram-stories://share?source_application=com.sauci.app";
|
||||
await Linking.openURL(instagramStoriesUrl);
|
||||
Events.quizShared();
|
||||
} else {
|
||||
await handleMoreShare();
|
||||
}
|
||||
} catch (error) {
|
||||
console.error("Instagram share error:", error);
|
||||
const shared = await shareToInstagramStories(capturedUri);
|
||||
if (shared) {
|
||||
Events.quizShared();
|
||||
} else {
|
||||
// Instagram Stories sharing unavailable - fall back to the share sheet
|
||||
await handleMoreShare();
|
||||
}
|
||||
};
|
||||
|
||||
Reference in new issue
Block a user