在WhatsApp URLscheme中的ABID

Whatsapp昨天更新了他们的iOS应用程序并发布了官方的URLscheme(api hooks)。

我想玩一点,我现在面临的问题是我不明白这整个“阿比德”的事情?! 我从哪里得到联系人ID? 那么我该如何使用它呢?

提前致谢 :)

ABID代表地址簿loggingID,下面的代码用于获取ABloggingID。 它对URL本身使用delimeters非常敏感。 所以最初的试验不起作用。 要发送一个笔记给特定的用户,使用这个 – urlstring格式:whatsapp:// send?abid = 123&text = What%20a%20nice%20day – 注意使用&来标记第二个参数。

- (BOOL)peoplePickerNavigationController:(ABPeoplePickerNavigationController *)peoplePicker shouldContinueAfterSelectingPerson:(ABRecordRef)person { QR_whatsappABID = (ABRecordID)ABRecordGetRecordID(person); .... QR_whatsapp_string = [NSString stringWithFormat:@"whatsapp://send?abid=%d&text=%@;",QR_whatsappABID, outmessage]; .... } 

这可以编码,而不使用人select器只需打开地址簿:

比较姓名或姓名和号码,逐个查看logging –

 ABAddressBookRef addressBook = ABAddressBookCreateWithOptions (NULL, error); int len = (int)ABAddressBookGetPersonCount(addressBook); for(int i = 1; i < (len + 1); i++) { ABRecordRef person = ABAddressBookGetPersonWithRecordID(addressBook, (ABRecordID)i); NSString *first, *last; if (!person) { continue; } CFStringRef firstc = (CFStringRef)ABRecordCopyValue(person, kABPersonFirstNameProperty); if (firstc) { CFStringRef lastc =(CFStringRef) ABRecordCopyValue(person, kABPersonLastNameProperty); if (lastc) { first = [NSString stringWithFormat:@"%@",firstc]; last =[NSString stringWithFormat:@"%@",lastc]; CFRelease(lastc); } CFRelease(firstc); } if ([[first lowercaseString] isEqualToString:[firstname lowercaseString]] && [[last lowercaseString] isEqualToString:[surname lowercaseString]]) { alreadyExists = YES; ABID = ABRecordGetRecordID(person); break; } } 

请注意,Whatsapp已经删除(在16年3月)URL模式打开与特定联系人的对话。

正如你可以在他们的Custom URL Scheme页面上看到的,没有更多的ABID参数。

我已经写了一个方法来批量获取ABID: http ://n8henrie.com/2014/02/how-to-get-the-abid-for-whatsapp-url-schemes/

基本的想法是使用iFunBox来访问手机上的sqlite数据库,然后运行一个脚本来提取所有的ABID和名称。

最近两个解决scheme(2017年7月)

我在这个答案中发现,testing和引用了两个新的不同的解决scheme(因为SO策略我不得不把解决scheme的链接,没有重复)。

abid表示Adress Book ID,它是您使用WhatsApp urlscheme的参数,以便使用通讯簿中的数据。 从Whatsapp网站 。

要在您的应用程序中使用WhatsApp的urlscheme来发送一个文字说“Hello World”,你会做这样的事情(例如从网站):

  NSURL *whatsappURL = [NSURL URLWithString:@"whatsapp://send?text=Hello%2C%20World!"]; if ([[UIApplication sharedApplication] canOpenURL: whatsappURL]) { [[UIApplication sharedApplication] openURL: whatsappURL]; } 

但是既然你没有发布任何代码,我真的不能说如何使用上面或在哪里把它。 但是,如果需要的话,你总是可以查看一些使用URLscheme的教程。

希望这能回答你的问题!

对于阿比德,你可以得到联系人列表,然后select发送消息给特定的人。

  1. 从AddressBook获取loggingID

     contactList=[[NSMutableArray alloc] init]; CFArrayRef allPeople = ABAddressBookCopyArrayOfAllPeople(m_addressbook); CFIndex nPeople = ABAddressBookGetPersonCount(m_addressbook); for (int i=0;i<nPeople;i++) { NSMutableDictionary *dOfPerson=[[NSMutableDictionary alloc] init]; ABRecordRef ref = CFArrayGetValueAtIndex(allPeople,i); NSNumber *recordId = [NSNumber numberWithInteger:ABRecordGetRecordID(ref)]; [dOfPerson setObject:recordId forKey:@"RecordID"]; [contactList addObject:dOfPerson]; } 
  2. 获取选定的RecordID,如:

    NSString * recordID = [dict objectForKey:@“RecordID”];

  3. 呼叫Whats应用程序的URL计划

     NSString *str = [NSString stringWithFormat:@"whatsapp://send?text=Whenitize&abid=%@",recordID]; NSLog(@"%@", str); NSURL *whatsappURL = [NSURL URLWithString:str]; if ([[UIApplication sharedApplication] canOpenURL:whatsappURL]) { [[UIApplication sharedApplication] openURL:whatsappURL]; } else { [[[UIAlertView alloc] initWithTitle:@"" message:@"Please install What's App in your device." delegate:nil cancelButtonTitle:@"OK" otherButtonTitles:nil] show]; }