0

我在使用 IG 分享到故事 API 时遇到了一些麻烦。我发现了两种奇怪的行为,它们阻止我使用 Intents。

预期行为

我的应用程序中有一个共享按钮,当用户点击它时,应用程序会显示所有可用已安装应用程序的共享选择器,如果用户点击 IG Stories 一个,应用程序应重定向到 instagram 并创建一个带有stickerAssetUri图片。例如,如果用户点击 WhatsApp,应用程序应该使用主要意图,而不是主要意图,createInstagramStickerIntent(...)并共享uri图像。这就是我使用EXTRA_INITIAL_INTENTS的原因

1.无法添加额外的意图

我想在我的意图选择器中添加一个 IG 故事选项的额外意图,以便向 IG 应用程序发送自定义贴纸。但是,当我添加它 .putExtra(Intent.EXTRA_INITIAL_INTENTS, createInstagramStickerIntent(uri, activity))并单击选择器中的 IG Stories 图标时,我会在 IG 中看到一个黑屏和下一条消息“出了点问题。请稍后再试”

如果我直接使用我的createInstagramStickerIntent(...)意图作为主要意图,而不是使用 putExtra 添加它,它可以工作。使用EXTRA_INITIAL_INTENTS标志似乎有问题。

代码

private fun startShareImage(uri: Uri, activity: Activity, title: String? = null, shareText: String? = null) {
        val intent = Intent.createChooser(
            ShareCompat.IntentBuilder.from(activity)
            .intent
            .setAction(Intent.ACTION_SEND)
            .setType(SHARE_VIDEO_TYPE)
            .putExtra(Intent.EXTRA_STREAM, uri)
            .addFlags(Intent.FLAG_GRANT_READ_URI_PERMISSION)
            .apply {
                ...
            },
            null 
        ).putExtra(Intent.EXTRA_INITIAL_INTENTS, createInstagramStickerIntent(uri, activity))

        activity.startActivity(intent)
    }

    private fun createInstagramStickerIntent(stickerAssetUri: Uri, activity: Activity) = Intent("com.instagram.share.ADD_TO_STORY").apply {

        val sourceApplication = activity.packageName

        putExtra("source_application", sourceApplication)

        type = SHARE_IMAGE_TYPE
        putExtra("interactive_asset_uri", stickerAssetUri)
        putExtra("top_background_color", "#33FF33")
        putExtra("bottom_background_color", "#FF00FF")

         activity.grantUriPermission(
            "com.instagram.android", stickerAssetUri, Intent.FLAG_GRANT_READ_URI_PERMISSION
        )
    }

2. 无法创建带有视频背景的贴纸

如果尝试创建带有图像资产背景的贴纸,它看起来不错,但是如果我使用视频而不是图像作为背景,应用程序总是显示黑色背景。你可以看到我的createInstagramStickerBackgroundIntent(...)方法逻辑

代码

private fun createInstagramStickerBackgroundIntent(stickerAssetUri: Uri, activity: Activity) = Intent("com.instagram.share.ADD_TO_STORY").apply {

        val videoUri = Uri.parse(String.format(VIDEO_URI, activity.packageName))

        putExtra("source_application", activity.packageName);

        flags = Intent.FLAG_GRANT_READ_URI_PERMISSION;
        setDataAndType(videoUri, "video/mp4");
        putExtra("interactive_asset_uri", stickerAssetUri);

        activity.grantUriPermission(
            "com.instagram.android", stickerAssetUri, Intent.FLAG_GRANT_READ_URI_PERMISSION
        )
    }

非常感谢 :)

4

0 回答 0