在 Manus 中运行任何 Skill
一键导入
一键导入
一键在 Manus 中运行任何 Skill
开始使用deep-linking
星标7
分支1
更新时间2026年1月15日 19:02
URL schemes and deep link handling
安装
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
SKILL.md
readonly菜单
URL schemes and deep link handling
用 Codex 或 Claude 帮你安装 复制这段 Prompt,粘贴到 Codex、Claude 或其他助手里,让它检查 Skill 页面并帮你完成安装。
基于 SOC 职业分类
Image caching and storage management with expo-image
Reusable component patterns and styling
Background chapter downloads and offline reading
Common patterns for Expo SDK 54 and React Native development
Paperback-compatible extension runtime and source API
Multi-language support with i18n-js
| name | Deep Linking |
| description | URL schemes and deep link handling |
| Scheme | Platform | Example |
|---|---|---|
paperand:// | Both | paperand://manga/123 |
paperback:// | Both | paperback://source/add?url=... |
// app.json
{
"expo": {
"scheme": "paperand",
"android": {
"intentFilters": [
{
"action": "VIEW",
"autoVerify": true,
"data": [{ "scheme": "paperback" }],
"category": ["BROWSABLE", "DEFAULT"]
}
]
}
}
}
import * as Linking from 'expo-linking';
// Get initial URL (app opened via link)
const initialUrl = await Linking.getInitialURL();
if (initialUrl) {
handleDeepLink(initialUrl);
}
// Listen for links while app is open
useEffect(() => {
const subscription = Linking.addEventListener('url', ({ url }) => {
handleDeepLink(url);
});
return () => subscription.remove();
}, []);
function handleDeepLink(url: string) {
const parsed = Linking.parse(url);
// { scheme: 'paperand', path: 'manga/123', queryParams: {} }
const [action, id] = parsed.path?.split('/') || [];
switch (action) {
case 'manga':
navigation.navigate('MangaDetail', { mangaId: id });
break;
case 'chapter':
navigation.navigate('Reader', { chapterId: id });
break;
case 'source':
if (parsed.queryParams?.url) {
handleAddSource(parsed.queryParams.url);
}
break;
}
}
// services/deepLinkService.ts
import * as Linking from 'expo-linking';
export const deepLinkService = {
async handleUrl(url: string) {
const parsed = Linking.parse(url);
return parsed;
},
createMangaLink(mangaId: string): string {
return Linking.createURL(`manga/${mangaId}`);
},
createSourceLink(repoUrl: string): string {
return Linking.createURL('source/add', {
queryParams: { url: repoUrl },
});
},
};
Handle Paperback-style source repository links:
// paperback://addRepo?name=MyRepo&url=https://...
function handlePaperbackLink(url: string) {
const parsed = Linking.parse(url);
if (parsed.path === 'addRepo') {
const { name, url: repoUrl } = parsed.queryParams;
navigation.navigate('AddRepository', { name, url: repoUrl });
}
}
import * as Sharing from 'expo-sharing';
async function shareManga(manga: Manga) {
const link = deepLinkService.createMangaLink(manga.id);
await Sharing.shareAsync(link, {
dialogTitle: `Share ${manga.title}`,
});
}
# Android
adb shell am start -a android.intent.action.VIEW -d "paperand://manga/123"
# iOS Simulator
xcrun simctl openurl booted "paperand://manga/123"